Event Hubs から Azure Synapse Data Explorer の中にデータを取り込む
Azure Synapse Data Explorer は、ログと利用統計情報のための高速で拡張性に優れたデータ探索サービスです。 Azure Synapse Data Explorer では、BLOB コンテナーに書き込まれた Event Hubs、IoT Hub、BLOB からのインジェスト (データの読み込み) を提供します。
Azure Synapse Data Explorer は、ビッグ データ ストリーミング プラットフォームおよびイベント取り込みサービスである Event Hubs からのインジェスト (データの読み込み) を提供します。 Event Hubs は、1 秒あたり数百万件のイベントをほぼリアルタイムで処理できます。 この記事では、Event Hubs を作成し、Azure Synapse Data Explorer からそれに接続して、システム経由のデータ フローを確認します。
前提条件
Azure サブスクリプション。 無料の Azure アカウントを作成します。
Synapse Studio または Azure portal を使用して Data Explorer プールを作成します
Data Explorer データベースを作成します。
Synapse Studio の左側のペインで、 [データ] を選択します。
+ (新しいリソースの追加) >[Data Explorer プール] を選択し、次の情報を使用します。
設定 提案された値 説明 プール名 contosodataexplorer 使用する Data Explorer プールの名前 Name TestDatabase データベース名はクラスター内で一意である必要があります。 既定のリテンション期間 365 クエリにデータを使用できることが保証される期間 (日数) です。 期間は、データが取り込まれた時点から測定されます。 既定のキャッシュ期間 31 頻繁にクエリされるデータが、長期ストレージではなく SSD ストレージまたは RAM で利用できるように保持される期間 (日数) です。 [作成] を選択してデータベースを作成します。 通常、作成にかかる時間は 1 分未満です。
Event Hubs からデータが送信されるターゲット テーブルを作成します
Synapse Studio の左側のウィンドウで、 [開発] を選択します。
[KQL スクリプト] で、[+] (新しいリソースの追加) >[KQL スクリプト] を選びます。 右側のウィンドウで、スクリプト名を指定できます。
[接続先] メニューで、[contosodataexplorer] を選択します。
[データベースの使用] メニューで、 [TestDatabase] を選択します。
次のコマンドを貼り付け、 [実行] を選択してテーブルを作成します。
.create table TestTable (TimeStamp: datetime, Name: string, Metric: int, Source:string)
ヒント
テーブルが正常に作成されたことを確認します。 左側のペインで、 [データ] を選択し、contosodataexplorer の [その他] メニューを選択し、 [最新の情報に更新] を選択します。 [contosodataexplorer] で [テーブル] を展開し、TestTable テーブルが一覧に表示されていることを確認します。
次のコマンドをウィンドウにコピーし、 [実行] を選択して、テーブル (TestTable) の列名とデータ型に受信 JSON データをマップします。
.create table TestTable ingestion json mapping 'TestMapping' '[{"column":"TimeStamp", "Properties": {"Path": "$.timeStamp"}},{"column":"Name", "Properties": {"Path":"$.name"}} ,{"column":"Metric", "Properties": {"Path":"$.metric"}}, {"column":"Source", "Properties": {"Path":"$.source"}}]'
データ接続 (省略可能) には、ユーザー割り当てマネージド ID またはシステム割り当てマネージド ID を使用することをお勧めします。
データを生成してイベント ハブに送信するサンプル アプリ。 ご使用のシステムにサンプル アプリをダウンロードしてください。
サンプル アプリを実行するための Visual Studio 2019。
Azure portal にサインインする
Azure portal にサインインします。
イベント ハブの作成
Azure portal で Azure Resource Manager テンプレートを使用して、イベント ハブを作成します。
イベント ハブを作成するには、次のボタンを使用してデプロイを開始します。 この記事の残りの手順を実行できるよう、右クリックして [新しいウィンドウで開く] を選択してください。
[Azure へのデプロイ] ボタンをクリックすると、Azure portal に移動します。
イベント ハブを作成するサブスクリプションを選択し、test-hub-rg というリソース グループを作成します。
フォームに次の情報を入力します。
次の表に記載されていない設定については、既定値のままにしてください。
設定 推奨値 フィールドの説明 サブスクリプション 該当するサブスクリプション Event Hubs に使用する Azure サブスクリプションを選択します。 リソース グループ test-hub-rg 新しいリソース グループを作成します。 場所 米国西部 この記事では [米国西部] を選択します。 運用システムでは、ニーズに最も適したリージョンを選択します。 最適なパフォーマンスを得るために、Azure Synapse Data Explorer クラスターと同じ場所の中に Event Hubs 名前空間を作成します (高スループットの Event Hubs 名前空間にとって最も重要です)。 名前空間名 一意の名前空間名 名前空間を識別する一意の名前を選択します。 たとえば、mytestnamespace と指定します。 指定した名前にドメイン名 servicebus.windows.net が付加されます。 この名前には、文字、数字、ハイフンのみを含めることができます。 名前の先頭は英字、末尾は英字または数字にする必要があります。 値の長さは 6 から 50 文字にする必要があります。 Event Hubs 名 test-hub Event Hubs は、一意のスコープ コンテナーを提供する名前空間の下にあります。 Event Hubs 名は、名前空間内で一意になる必要があります。 コンシューマー グループ名 test-group コンシューマー グループを使用すると、複数の使用アプリケーションがそれぞれイベント ストリーム ビューを持つことができるようになります。 [Review + create](レビュー + 作成) を選択します。
作成されたリソースの概要を確認します。 [作成] を選択して、サブスクリプション内にリソースを作成することを確認します。
プロビジョニング プロセスを監視するには、ツール バーの [通知] を選択します。 デプロイが完了するまでには数分かかることがありますが、すぐに次の手順に進むこともできます。
認証に関する考慮事項
Event Hubs での認証に使用している ID の種類によっては、他の構成が必要になる場合があります。
ユーザー割り当てマネージド ID を使用して Event Hubs で認証している場合は、[Event Hubs] >[ネットワーク] に移動してから、[許可するアクセス元] の下で [すべてのネットワーク] を選択し、変更を保存します。
システム割り当てマネージド ID を使用して Event Hubs で認証している場合は、[Event Hubs] >[ネットワーク] に移動してから、[すべてのネットワーク] からのアクセスを許可するか、[許可するアクセス元] の下で [選択されたネットワーク] を選択し、[信頼された Microsoft サービスがこのファイアウォールをバイパスすることを許可する] を選択して、変更を保存します。
Event Hubs に接続する
ここで、Data Explorer プールから Event Hubs に接続します。 この接続が確立されると、Event Hubs 内に流れるデータが、この記事の前の方で作成したテスト テーブルにストリーミングされます。
ツールバー上の [通知] を選択して、Event Hubs のデプロイが成功したことを確認します。
作成した Data Explorer プールで、 [データベース]>[TestDatabase] を選択します。
[データ接続] 、 [データ接続の追加] の順に選択します。
データ接続を作成する (プレビュー)
フォームに次の情報を入力し、 [作成] を選択します。
設定 | 推奨値 | フィールドの説明 |
---|---|---|
データ接続名 | test-hub-connection | Azure Synapse Data Explorer で作成する接続の名前。 |
サブスクリプション | Event Hubs リソースが配置されているサブスクリプション ID。 このフィールドは自動入力されます。 | |
Event Hubs 名前空間 | 一意の名前空間名 | 以前に選択した、名前空間を識別する名前。 |
Event Hubs | test-hub | 作成した Event Hubs。 |
コンシューマー グループ | test-group | 作成した Event Hubs 内に定義されているコンシューマー グループ。 |
イベント システム プロパティ | 関連するプロパティを選択する | Event Hubs のシステム プロパティ。 1 つのイベント メッセージに複数のレコードがある場合、システム プロパティは最初のレコードに追加されます。 システム プロパティを追加する場合は、テーブル スキーマとマッピングを作成または更新して、選択したプロパティを含めます。 |
圧縮 | なし | Event Hubs メッセージ ペイロードの圧縮の種類。 サポートされている圧縮の種類は、"なし、Gzip" です。 |
マネージド ID | システム割り当て | Event Hubs からの読み取りアクセスのために、Data Explorer クラスターによって使用されるマネージド ID。 注: データ接続が作成されると、次のようになります。 - "システム割り当て" ID が存在しない場合は自動的に作成されます - マネージド ID は、"Azure Event Hubs データ受信者" ロールが自動的に割り当てられ、Data Explorer クラスターに追加されます。 ロールが割り当てられ、ID がクラスターに追加されたことを確認することをお勧めします。 |
ターゲット テーブル
挿入したデータをルーティングするには、"静的" と "動的" という 2 つのオプションがあります。 この記事では、静的ルーティングを使用し、テーブル名、データ形式、およびマッピングを既定値として指定します。 Event Hubs メッセージにデータ ルーティング情報が含まれている場合、このルーティング情報によって既定の設定がオーバーライドされます。
次のルーティング設定を入力します。
設定 推奨値 フィールドの説明 テーブル名 TestTable TestDatabase に作成したテーブル。 データ形式 JSON サポートされている形式は、Avro、CSV、JSON、MULTILINE JSON、ORC、PARQUET、PSV、SCSV、SOHSV、TSV、TXT、TSVE、APACHEAVRO、および W3CLOG です。 マッピング TestMapping TestDatabase に作成したマッピング。これにより、受信データを TestTable の列名とデータ型にマッピングします。 JSON、MULTILINE JSON、AVRO では必須。その他の形式では省略可能。 注意
- 既定のルーティング設定をすべて指定する必要はありません。 部分的な設定も受け入れられます。
- データ接続の作成後にエンキューされたイベントのみが取り込まれたます。
[作成] を選択します
イベント システム プロパティのマッピング
注意
- システム プロパティは、
json
および表形式 (csv
やtsv
など) でサポートされており、圧縮データではサポートされていません。 サポートされていない形式を使用してもデータは取り込まれますが、プロパティは無視されます。 - 表形式データの場合、システム プロパティは単一レコードのイベント メッセージでのみサポートされます。
- JSON データの場合、システム プロパティは複数レコードのイベント メッセージでもサポートされます。 このような場合、システム プロパティは、イベント メッセージの最初のレコードにのみ追加されます。
csv
マッピングの場合、csv
の表に示された順序でプロパティがレコードの先頭に追加されます。json
マッピングの場合、システム プロパティの表のプロパティ名に従ってプロパティが追加されます。
テーブルの [データ ソース] セクションで [イベント システムのプロパティ] を選択した場合は、テーブル スキーマとマッピングにシステム プロパティを含める必要があります。
接続文字列のコピー
前提条件の一覧の中にあるサンプル アプリを実行する場合は、Event Hubs 名前空間用の接続文字列が必要です。
作成した Event Hubs 名前空間の下で、[共有アクセス ポリシー]、[RootManageSharedAccessKey] の順に選択します。
[接続文字列 - 主キー] をコピーします これを、次のセクションで貼り付けます。
サンプル データを作成する
ダウンロードしたサンプル アプリを使用してデータを生成します。
警告
このサンプルでは、例をわかりやすくするために、接続文字列認証を使用して Event Hubs に接続します。 ただし、接続文字列をスクリプトの中にハードコーディングするには、アプリケーションにおいて非常に高度な信頼性が要求され、かつセキュリティ上のリスクが伴います。
長期的で安全なソリューションのためには、次のいずれかのオプションを使用します。
- パスワードレスの認証
- Azure Key Vault の中に接続文字列を格納し、コードの中でこのメソッドを使用してそれを取得する。
Visual Studio でサンプル アプリ ソリューションを開きます。
program.cs ファイルの中で、
eventHubName
定数を Event Hubs の名前に更新し、connectionString
定数を Event Hubs 名前空間からコピーした接続文字列に更新します。const string eventHubName = "test-hub"; // Copy the connection string ("Connection string-primary key") from your Event Hub namespace. const string connectionString = @"<YourConnectionString>";
アプリをビルドし、実行します。 アプリから Event Hubs にメッセージが送信され、10 秒ごとにその状態が出力されます。
アプリからいくつかメッセージが送信されたら、次の手順に進み、Event Hubs とテスト テーブル内へのデータ フローを確認します。
データ フローの確認
データを生成するアプリを使用して、Event Hubs からクラスター内のテーブルへのデータ フローを確認できるようになりました。
Azure portal 内の Event Hubs の下で、アプリ実行中のアクティビティ内にスパイクが表示されます。
これまでにデータベースに届いたメッセージ数を確認するには、テスト データベースで次のクエリを実行します。
TestTable | count
メッセージの内容を表示するには、次のクエリを実行します。
TestTable
結果セットは次の図のようになります。
注意
- Azure Synapse Data Explorer には、インジェスト プロセスを最適化することを目的とした、データ インジェストの集計 (バッチ処理) ポリシーがあります。 既定のバッチ処理ポリシーは、バッチについて次の条件のいずれかが真になると、バッチを封印するように構成されています。最大遅延時間 5 分、合計サイズ 1 G、または 1000 個の BLOB。 そのため、待機時間が発生する可能性があります。 詳細については、バッチ処理ポリシーに関するページを参照してください。
- イベント ハブ インジェストには、10 秒または 1 MB のイベント ハブの応答時間が含まれます。
- 応答時間の遅れを減らすには、ストリーミングをサポートするようにテーブルを構成します。 ストリーミング ポリシーに関するページを参照してください。
リソースをクリーンアップする
この Event Hubs を再び使用する予定がない場合は、test-hub-rg をクリーンアップしてコストが発生しないようにします。
Azure Portal の左端で [リソース グループ] を選択し、作成したリソース グループを選択します。
左側のメニューが折りたたまれている場合は、を選択して展開します。
test-resource-group で [リソース グループの削除] を選択します。
新しいウィンドウで、削除するリソース グループの名前 (test-hub-rg) を入力し、 [削除] を選択します。