Event Grid データ接続

Event Grid インジェストは、Azure ストレージをリッスンし、サブスクライブしたイベントが発生したときに情報をプルするように Azure Data Explorer を更新するパイプラインです。 Azure Data Explorer では、BLOB 作成または BLOB 名前変更の通知に対する Azure Event Grid サブスクリプションを使用して Azure Storage (Blob Storage と ADLSv2) からの継続的なインジェストが提供され、Azure Event Hubs を介してそれらの通知が Azure Data Explorer にストリーミングされます。

Event Grid のインジェスト パイプラインでは、いくつかの手順が実行されます。 特定の形式のデータが取り込まれるターゲット テーブルを Azure Data Explorer に作成します。 次に、Azure Data Explorer で Event Grid データ接続を作成します。 Event Grid データ接続では、データを送信するテーブルやテーブルのマッピングなど、イベントのルーティング情報を把握している必要があります。 また、取り込まれるデータ、ターゲット テーブル、およびマッピングを記述するインジェスト プロパティも指定します。 サンプル データを生成し、BLOB をアップロードするか、BLOB を名前変更して、接続をテストできます。 インジェスト後、BLOB を削除します。

Event Grid インジェストは、Azure portalインジェスト ウィザードC# または Python のプログラム、または Azure Resource Manager テンプレートを使って管理できます。

Azure Data Explorer でのデータ インジェストに関する一般的な情報については、「Azure Data Explorer のデータ インジェスト概要」を参照してください。

Azure Data Explorer のデータ接続認証メカニズム

注意事項

マネージド ID のアクセス許可がデータ ソースから削除された場合、データ接続は無効になり、そのデータ ソースからデータをフェッチすることはできません。

  • キーベースのデータ接続: マネージド ID がデータ接続で指定されていない場合、接続は自動的にキーベースの認証に設定されます。 キーベースの接続では、リソース接続文字列 (Azure Event Hubs 接続文字列など) を使用してデータがフェッチされます。 Azure Data Explorer では、指定したリソースのリソース接続文字列が生成され、データ接続に安全に保存されます。 その後、接続文字列を使用して、データ ソースからデータがフェッチされます。

注意事項

キーがローテーションされると、データ接続は無効になり、データ ソースからデータをフェッチすることはできません。 この問題を解決するには、データ接続を更新または再作成します。

データ形式

  • サポートされる形式を確認してください。
  • サポートされる圧縮を確認してください。
    • 元の非圧縮データ サイズは、BLOB メタデータの一部である必要があります。それ以外の場合は、Azure Data Explorer によって推定されます。 ファイルごとのインジェストの非圧縮サイズの制限は 6 GB です。

注意

Event Grid 通知サブスクリプションは、BlobStorageStorageV2、または BlobStorage に対して Azure Storage アカウントで設定できます。

インジェストのプロパティ

BLOB メタデータを使用して、BLOB インジェストのインジェストのプロパティを指定できます。 以下のプロパティを設定できます。

プロパティ 説明
rawSizeBytes 未加工の (圧縮されていない) データのサイズ。 Avro/ORC/Parquet の場合、これは形式固有の圧縮が適用される前のサイズです。 このプロパティを圧縮されていないデータ サイズ (バイト単位) に設定して、元のデータ サイズを指定します。
kustoDatabase 大文字と小文字が区別される、ターゲット データベースの名前。 既定では、データはデータ接続に関連付けられているターゲット データベースに取り込まれます。 既定のデータベースをオーバーライドし、別のデータベースにデータを送信するには、このプロパティを使用します。 これを行うには、最初にマルチデータベース接続として接続を設定する必要があります。
kustoTable 大文字と小文字が区別される、既存のターゲット テーブルの名前。 [Data Connection] ペインで設定された Table をオーバーライドします。
kustoDataFormat データ形式。 [Data Connection] ペインで設定された Data format をオーバーライドします。
kustoIngestionMappingReference 使用する既存のインジェスト マッピングの名前。 [Data Connection] ペインで設定された Column mapping をオーバーライドします。
kustoIgnoreFirstRecord true に設定した場合、Kusto で BLOB の最初の行が無視されます。 表形式のデータ (CSV、TSV など) でヘッダーを無視するために使用します。
kustoExtentTags 結果のエクステントに添付されるタグを表す文字列。
kustoCreationTime ISO 8601 文字列として書式設定された Blob の エクステント作成時間 を オーバーライドします。 バックフィルに使用します。

イベント ルーティング

クラスターへのデータ接続を作成するときに、取り込まれたデータの送信先のルーティングを指定します。 既定のルーティングは、ターゲット データベースに関連付けられている接続文字列で指定されたターゲット テーブルです。 データに対する既定のルーティングは、"静的ルーティング" と呼ばれることもあります。 イベント データのプロパティを使用することで、データの代替ルーティングを指定できます。

イベント データを別のデータベースにルーティングする

代替データベースへのデータのルーティングは、既定では無効になっています。 データを別のデータベースに送信するには、最初に、マルチデータベース接続として接続を設定する必要があります。 これは、Azure portal、C#、Python、または ARM テンプレートで行うことができます。 データベース ルーティングを許可するために使用されるユーザー、グループ、サービス プリンシパル、またはマネージド ID には、少なくともクラスターに対する共同作成者ロールと書き込みアクセス許可が必要です。 詳細については、「Azure Data Explorer の Event Grid データ接続を作成する」を参照してください。

別のデータベースを指定するには、"データベース" のインジェストのプロパティを設定します。

警告

マルチデータベースのデータ接続として接続を設定せずに別のデータベースを指定すると、インジェストが失敗します。

イベント データを別のテーブルにルーティングする

Azure Data Explorer クラスターへの BLOB ストレージ接続を設定するときに、ターゲット テーブルのプロパティを指定します。

  • テーブル名
  • データ形式
  • mapping

BLOB メタデータを使用して、各 BLOB のターゲット テーブルのプロパティを指定することもできます。 データは、インジェスト プロパティの指定に従って、動的にルーティングされます。

次の例は、BLOB メタデータをアップロードする前にインジェスト プロパティを設定する方法を示しています。 BLOB は異なるテーブルにルーティングされます。

さらに、ターゲット データベースを指定できます。 Event Grid データ接続は、特定のデータベースのコンテキスト内で作成されます。 そのため、このデータベースはデータ接続の既定のデータベース ルーティングです。 データを別のデータベースに送信するには、"KustoDatabase" インジェスト プロパティを設定し、マルチデータベース データ接続としてデータ接続を設定します。 別のデータベースへのデータのルーティングは、既定では無効になっています (許可されません)。 複数のデータベースへのデータ ルーティングを許可 (接続をマルチデータベース データ接続として設定) しないで、データ接続のデータベースとは異なるデータベース インジェスト プロパティを設定すると、インジェストは失敗します。

詳細については、「BLOB をアップロードする」を参照してください。

var container = new BlobContainerClient("<storageAccountConnectionString>", "<containerName>");
await container.CreateIfNotExistsAsync();
var blob = container.GetBlobClient("<blobName>");
// Blob is dynamically routed to table `Events`, ingested using `EventsMapping` data mapping
await blob.SetMetadataAsync(
    new Dictionary<string, string>
    {
        { "rawSizeBytes", "4096" }, // the uncompressed size is 4096 bytes
        { "kustoTable", "Events" },
        { "kustoDataFormat", "json" },
        { "kustoIngestionMappingReference", "EventsMapping" },
        { "kustoDatabase", "AnotherDB" }
    }
);
await blob.UploadAsync(BinaryData.FromString(File.ReadAllText("<filePath>")));

BLOB をアップロードする

ローカル ファイルから BLOB を作成し、インジェストのプロパティを BLOB メタデータに設定して、それをアップロードすることができます。 例については、「 Event Grid データ接続を使用する」を参照してください。

注意

  • を使用 BlockBlob すると予期しない動作が発生する可能性があるため、 を使用してデータを AppendBlob 生成することを強くお勧めします。
  • Azure Data Lake Gen2 Storage SDK を使用するには、 を使用 CreateFile してファイルをアップロードし、 Flush 最後に close パラメーターを に設定する true必要があります。 Data Lake Gen2 SDK の正しい使用方法の詳細な例については、「 Event Grid データ接続を使用する」を参照してください。
  • 操作に続くインジェストの CopyBlob トリガーは、階層型名前空間機能が有効になっているストレージ アカウントではサポートされていません。
  • イベント ハブ エンドポイントでイベントの受信が認識されない場合、Azure Event Grid によって再試行メカニズムがアクティブ化されます。 この再試行配信に失敗した場合、配信されなかったイベントは Event Grid の "配信不能" プロセスを使用してストレージ アカウントに配信できます。 詳細については、Event Grid のメッセージの配信と再試行に関する記事を参照してください。

BLOB を名前変更する

ADLSv2 を使用する場合、BLOB を名前変更して、Azure Data Explorer への BLOB インジェストをトリガーできます。 たとえば、「BLOB の 名前を変更する」を参照してください。

注意

  • ディレクトリの名前変更は ADLSv2 で実行できますが、"名前変更された BLOB" イベントおよびディレクトリ内への BLOB のインジェストはトリガーされません。 名前変更後に BLOB を取り込むには、目的の BLOB を直接名前変更します。
  • データ接続を作成するとき、または Event Grid リソースを手動で作成するときに、特定のサブジェクトを追跡するフィルターを定義した場合、これらのフィルターは対象のファイル パスに適用されます。

ストレージ ライフサイクルを使用した BLOB の削除

Azure Data Explorer では、取り込み後に BLOB は削除されません。 Azure Blob Storage のライフサイクルを使用して、BLOB の削除を管理してください。 BLOB は 3 日から 5 日間保持することをお勧めします。

Event Grid の既知の問題

  • Azure Data Explorer を使用して、Event Grid のインジェストに使用されるファイルをエクスポートする場合は、次の点に注意してください。
    • エクスポート コマンドに指定された接続文字列、または外部テーブルに指定された接続文字列が ADLS Gen2 形式の接続文字列 (など) であるが、ストレージ アカウントが階層型名前空間に対して有効になっていない場合、Event Grid 通知はトリガーされません。
    • アカウントが階層型名前空間に対して有効でない場合、接続文字列で Blob Storage 形式 (たとえば、) を使用する必要があります。 ADLS Gen2 接続文字列を使用している場合でもエクスポートは想定どおりに動作しますが、通知はトリガーされず、Event Grid インジェストは機能しません。