Azure IoT Hubで収集したデータをCosmosDBへ送信&PowerBIで可視化してみた

2022.08.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。CX事業本部Delivery部のakkyです。 前回は、Azure IoT Hubで収集したデータをPowerBIでデータの可視化を行いましたが、データベースはPowerBI組み込みの物を使っていました。しかし、データストアは別の場所にあったほうが他の場所での処理や利用が行いやすいと思います。今回はデータをCosmos DBに保存し、その結果をPowerBIで可視化してみましたので、ご紹介します。

Cosmos DBデータベースの作成

Cosmos DBアカウントの作成

Azure PortalからCosmos DBを開き、作成をクリックします。

まずAPIオプションを選択します。今回はCosmos DBをそのままつかうので、コア(SQL)を選択します。

次に、プロジェクトの詳細からサブスクリプションとリソースグループを選択し、アカウント名には任意の名前を入力します。場所はEast Asiaとしました。容量モードはプロビジョニングとサーバレスが選べます。今回はServerlessにしてみました。レビュー+作成をクリックするとデプロイされますので、しばらく待ちます。

コンテナーの作成

作成されたリソースの概要を開き、作成をクリックします。

コンテナの作成画面になりますので、Database id、Container idに任意の名前を入力します。Partition keyは/idのままにします。

設定からキーを選択し、プライマリキーを確認してコピーしておいてください。Stream Analyticsジョブからの接続に使います。

 

Stream Analyticsジョブの設定

新しいStream Analyticsジョブを作成し、前回と同様に入力にIoT Hubを追加します。

出力にはCosmos DBを追加します。

 

出力エイリアスには任意の名前を入力します。サブスクリプションとアカウントIDを選択し、先ほど作成したデータベースを選択します。認証モードは接続文字列を選択し、アカウントキーには先ほどコピーしたプライマリキーをペーストします。

次にクエリを編集します。idとしてEventEnqueuedUtcTimeを使います。[cosmosdb]と[iothub]は出力と入力の名前にします。

SELECT
    EventEnqueuedUtcTime as id,
    *
INTO
    [cosmosdb]
FROM
    [iothub]

設定は以上です。概要から開始をクリックすると、Cosmos DBへのストリーミングが開始されます。

Cosmos DBへのデータの確認

Cosmos DBを開き、データエクスプローラーからデータベースを選択すると、データが書き込まれていることが確認できます。

PowerBIでの可視化

Web版ではCosmos DBデータソースを使えないので、PowerBI Desktopを使います。

ファイル→データを取得→データを取得して開始するをクリックし、Cosmos DBを選択します。

URLにはCosmos DBのキー画面に表示されているURI(https://XXXXXXX.documents.azure.com:443/)を入力します。他の項目は空のままでOKをクリックし、続けて表示されるアカウントキーにはプライマリキーを入力します。

テーブル一覧が表示されますので、対象のテーブルのチェックボックスを入れ、データの変換をクリックします。

データの一覧が表示されますが、Documentsとして集約されているので、列名の右側にある⇔ボタンをクリックし、OKをクリックします。

次に、Document.id列を選択した状態で、リボンの変換にあるデータ型から日付/時刻を選択します。

同様に、Document.temperature列もデータ型から10進数を選択します。

ホームリボンから閉じて適用をクリックすると、データソースの設定は終わりです。

最後に可視化を行います。

フィールドからSensor→Documents.idを可視化領域にドラッグアンドドロップします。グラフの形式は折れ線グラフにします。このままでは日付ごとに値がまとまってしまうので、X軸にあるDocument.idの下矢印をクリックし、Document.idをクリックします。次に、Y軸にDocuments.temperatureをドラッグアンドドロップし、完成です。