「S3 + Athena」 で実行していたことを 「BLOB + Azure Data Explorer」 で実現してみました


STEP-1 : Azure Data Explorer クラスターとデータベースを作成する

概要

AWSの「S3 + Athena」 で実行できること、つまり、S3に保存されているJSON形式等のデータ(以下、JSONデータ)を Athenaで提供されているSQLライクな構文を用いてクエリ実行することによりデータ抽出が可能となっています。同様なことをAzure上の「BLOB + Azure Data Explorer」構成においても可能であることを確認しました。なお、「Web UI」と「Pythonプログラム」の両方で実現しております。

Azure Data Explorer は、ログや利用統計情報データ等のための高速で拡張性に優れたデータ探索サービスです。
Azure Data Explorer を使用するには、最初にクラスターを作成し、そのクラスター内に 1 つまたは複数のデータベースを作成します。
その後、クエリを実行できるように、JSONデータ等をデータベースに取り込み (読み込み) ます。

以下の3つのステップで順次説明します。今回は STEP-1 についてとなります。
STEP-1 : Azure Data Explorer クラスターとデータベースを作成する
STEP-2 : Azure Data Explorer の Web UI でデータベースへのクエリを実行する
STEP-3 : Azure Data Explorer の Python ライブラリを使用してデータベースへのクエリを実行する

ローカル環境

macOS Big Sur 11.1
python 3.8.3
Microsoft Edge 89.0.774.63(Safariでは Azure Data Explorer がうまく動きませんでした)

ローカル上での事前準備

Azure Storega Exploere がインストールされていること。

Azure上での事前準備

今回は、「ストレージアカウント:storageituru」で「BLOBコンテナー:test20210226」を作成し、そこに「ADX2222_test-iot-dummy-2.json」のJSONデータを用意しました。下図は Azure Storage Explorer での確認となります。

そのJSONデータはこの記事 にある「IoTSample-write.py」で 2222件生成したものとなります。データ構成は以下となります(プログラムの一部抜粋)。

(抜粋)IoTSample-write.py
# ダミーデータ作成のための Faker の使用
Faker = Factory.create
fake = Faker()
fake = Faker("ja_JP")

# IoT機器のダミーセクション(小文字アルファベットを定義)
section = string.ascii_uppercase

# IoT機器で送信JSONデータの作成
def iot_json_data(count, proc):
    iot_items = json.dumps({
        'items': [{
            'id': i,                            # id
            'time': generate_time(),            # データ生成時間
            'proc': proc,                       # データ生成プロセス名
            'section': random.choice(section),  # IoT機器セクション
            'iot_num': fake.zipcode(),          # IoT機器番号
            'iot_state': fake.prefecture(),     # IoT設置場所
            'vol_1': random.uniform(100, 200),  # IoT値−1
            'vol_2': random.uniform(50, 90)     # IoT値−2
            } 
            for i in range(count)
        ]
    }, ensure_ascii=False).encode('utf-8')
    return iot_items

BLOBコンテナーのSAS(Shared Access Signature)の取得

Azure Data Explorer のデータベースの作成で必要となるBLOBコンテナーのSASを事前に取得しておきます。

1. Azure Storage Explorer 画面の左タブで「BLOBコンテナー:test20210226」を選択し、右クリックで、「Shared Access Signatureの取得...」を選択します。

2.表示された「Shared Access Signature」ダイアログにおいて、「開始時刻」と「有効期限」を設定し、画面の下部にある [作成] を選択します。

3.表示されたダイアログには、BLOB コンテナーと共に、ストレージリソースへのアクセスに使用できる URL とクエリ文字列が表示されます。 クリップボードにコピーする URL の横にある [コピー] を選択します。この値を後ほど使用します。コピーが完了したら、画面下部の [閉じる] を選択します。

Azure Data Explorer クラスターの作成

コンピューティング リソースとストレージ リソースの定義済みセットを使って、Azure リソース グループ内に Azure Data Explorer クラスターを作成します。

1.Azureポータルにサインインします。
2.ポータルの左上隅にある [+ リソースの作成] ボタンを選択します。
3.Azure Data Explorer を検索します。
4.[Azure Data Explorer] で、画面の下部にある [作成] を選択します。

5.次の情報を基本クラスターの詳細として入力します。

6.[確認と作成] を選択してクラスターの詳細を確認し、 [作成] を選択してクラスターをプロビジョニングします。 プロビジョニングには 約15分 かかりました。 完了後 [リソースに移動] を選択します。

Azure Data Explorer データベースの作成

1.[概要] タブで [データベースの作成] を選択します。

2.フォームに次の情報を入力します。入力後、フォーム画面下部の[作成] を選択してデータベースを作成します。

3.作成にかかる時間は 1 分未満でした。 プロセスが完了すると、クラスターの [概要] タブに表示が戻ります。

4.[概要] タブで [新しいデータの取り込み] を選択します。「Ingest new data」フォームが表示されます。

5.そのフォームの「Table」欄には新規に作成するデータベース名を入力します。
6.そのフォームの「Source type」欄では「BLOBコンテナーから」を選択します。
7.そのフォームの「Link to source」欄には、対象となるBLOBコンテナーのSASを入力します(先述の「BLOBコンテナーのSASの取得」の「3」のURLの値)。
8.フォームの入力が完了したら、画面下部の[Edit schema] を選択します。

9.表示された画面の内容に問題なければ。画面下部の[Start ingestion] を選択します。作成にかかる時間は 1 分未満でした。

10.クラスターにデータベースが作成されたことを確認できます。

Azure Data Explorer データベースで基本コマンドを実行する

問題なくアクセス可能か確認します。

作成したクラスターで [クエリ] を選択します。「.show databases」コマンドを「クエリ ウィンドウ」に入力後、 [実行] を選択します。結果セットには、このクラスター内の唯一のデータベースである 「IoTDummyDatabase」 が表示されます。

次のステップでは、Azure Data Explorer の Web UI でデータベースへのクエリを実行してみます。

本課題のシリーズ情報

3つのステップ
STEP-1.Azure Data Explorer クラスターとデータベースを作成する
STEP-2.Azure Data Explorer の Web UI でデータベースへのクエリを実行する
STEP-3.Azure Data Explorer の Python ライブラリを使用してデータベースへのクエリを実行する