【Dr.Sum Data Funnel】データをMQTTで受け取ってみた＆Dr.Sumに溜めてみた

#やりたいこと
前回の記事↓でpythonからMQTTでDr.Sum Data Funnelにデータを送りました。

https://qiita.com/TaroJiroTaro/private/affe551389d46eca0483

今回はFunnel側でデータを受け取って、Dr.Sumというデータベースに格納してみます。

###Dr.Sumとは
高速集計が得意なデータベースです。
Oracle DBやPostgres、SQL Serverなどが同じ土俵になるかと思います。
「Enterprise Manager」というクライアントツールで操作します。

###Dr.Sum Data Funnelとは
継続的に発生する時系列データをリアルタイムに収集、加工するためのツールです。
「Dr.Sum Data Funnel Client」というクライアントツールで操作します。

#データを受け取る
・Dr.Sum Data Funnel Clientの画面からデータをパイプライン定義を作っていきます。右クリック→新規作成

![2021-11-16_18h00_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/3cbb6211-b009-b5ed-e768-eeec5e9069d8.png)

・パイプライン定義の名前を決めます。今回は「test」にします。subscribeするデータの型を取得するため、データ取得ボタンをクリック。

![2021-11-17_11h44_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/75a95dbb-096e-eb85-2ead-3cec88423841.png)![2021-11-17_12h00_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/a3d26f13-6d73-68d3-7fa2-ce3260725744.png)

・ここでコンソールを開き、前記事で紹介したpublishプログラムを実行します。プログラムでは、”test”というMQTTトピックでpublishしています。
![2021-11-17_12h05_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/b7beb3de-9c53-f9d1-4a8f-1c7d72f73668.png)

・Dr.Sum Data Funnel Clientの画面に戻り、MQTTトピックに「test」と入力し「データ取得」ボタンをクリックしてsubscribeを開始します。正常にpublishされていれば、画像のようにjson形式のデータを取得できます。後に取得したjsonデータからテーブルを作るため、json部分をコピーしておきます。コピーしたら、データ取得の画面は閉じてOKです。
![2021-11-17_12h09_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/87d6ea43-030c-e9e5-5424-541ca4f4b055.png)![2021-11-17_12h58_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/8c9382b1-8897-dc47-a929-57b1c3a8f712.png)

・定義作成画面に戻ったら、次のように操作していきます。
トリガー間隔を「1秒」に設定
→「テーブル化の設定」ボタンクリック→「データを入力して推定」ボタンクリック
→"パブリッシュされる1回分の推定用データ"の欄に、先程コピーしたjsonデータを貼り付け→中央の「推定」ボタンクリック→右下「OK」ボタンクリック
→右下「OK」ボタンクリック

![2021-11-18_15h59_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/31d638b8-6c6f-05d8-2cc5-4dc106f04fe5.png)
![2021-11-17_16h08_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/c94eaafe-b2bf-226e-9d4a-bd585a1d1b1a.png)
![2021-11-17_16h10_38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/d23d550a-bb06-de4c-54eb-fc95575acffc.png) 

・次に、時間の項目の処理について定義していきます。これを行わないとDr.Sumへの出力ができません。次のように操作します。
左メニュー「時刻関連項目の設定」→上部のプルダウンから「ARRIVEDTIME」を選択
→右の項目名に「ROUNDTIME」と入力（ここは任意でOK）→右下「追加」をクリック
![2021-11-17_16h24_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/f7e70fac-6e0f-78b7-2a15-c4cb5e317595.png)
ここまでで、publishされたデータを受け取る（subscribe）部分は終了です。
「時間関連項目の設定」からはサンプリングされた時刻データを丸めることが出来るので、ミリ秒単位を秒単位に直したりと、データ量を少なくしたいときに便利です。

# Dr.Sumにデータを溜める
・まず、データの格納先となるテーブルを作成する必要があるので、Enterprise Managerからテーブルを作成していきます。
今回は「SensorDB」という名前でDBを作成してみました。作り方等はこちらがわかりやすいと思います。

http://navi.wingarc.com/drsum/drsum01.html

DBを作成したら、画面上部のアイコン群から「SQL Executor」を起動します。

![2021-11-17_16h51_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/05ccbb00-da21-9550-efd5-f9d6d175f9eb.png)

・SQL Executorの画面が開きます。左上の「接続先データベース」が「SensorDB」になっていることを確認します。
![2021-11-18_09h29_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/cc988bb4-5f60-ae79-159c-e573a4695708.png)

・Funnel Clientの画面を開き、左のメニューから「Dr.Sumに出力」クリック→「テーブルの作成SQLをクリップボードにコピー」をクリック
![2021-11-18_09h26_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/37c2a7ec-0ab4-8d82-7457-1a691672a7ce.png)

・Enterprise Managerの画面に戻り、画像のエリアにコピーしたテキストを貼り付けます。テーブルを作成するSQLがコピーされています。貼り付けたら左上の右矢印アイコンをクリックして、SQL文を実行します。実行すると、右下のエリアにログが出てきます。正常に実行されているようであれば、SQL Executorの画面を閉じます。
![2021-11-18_09h26_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/837c9def-2854-8e55-0bd4-4d29a71d0649.png)
![2021-11-18_09h40_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/21a6e003-8af4-41ee-f127-3e463d5a9595.png)

・Enterprise Managerの画面に戻ります。念の為、一度左上の更新ボタンを押し、SensorDBの中のテーブルに「test」ができていることを確認します。
![2021-11-18_09h49_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/8d80b243-c57e-c551-c1cb-f6cc3c667c1e.png)

・「test」のテーブルを右クリック→「開く」で、データの項目が揃っていることを確認します。
![2021-11-18_09h52_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/b82fcdde-fc25-c0ed-9292-05128fce24ee.png)

・Funnel Clientに戻り、Dr.Sumへの出力設定を行います。
「出力する」にチェック→「出力先サーバーの選択」でDr.Sumのアクセス情報でログイン
→データベース名を「SensorDB」に→右のテーブル名から「test」を選択→「パイプライン定義を保存」
![2021-11-18_15h49_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/2d8cca28-8872-c617-6e21-dd34adb30f04.png)

ここまでで、設定はばっちりです！
では、早速pythonからデータを送って、Funnelで受け取り、Dr.Sumへ格納してみましょう！

#実行
Funnel Clientで先程保存したパイプライン定義を起動します。
![2021-11-18_16h03_56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/23d10b0c-fae5-f99d-a5fb-edddb69a5ea7.png)


pythonのプログラムを実行します。
![2021-11-17_12h05_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/b7beb3de-9c53-f9d1-4a8f-1c7d72f73668.png)

・Dr.Sumのtestテーブルの中身を確認してみます。データが格納されていることが確認できます。
![2021-11-18_15h57_27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254022/7464c542-d3cd-6a2d-c2fc-0d472a5d39d7.png)


[]( 
<img width="400" alt ="" src =""> 
)