Azure Data Explorer クラスターでのストリーミング インジェストの構成

ストリーミング インジェストによるデータの読み込みは、インジェストとクエリの間で待機時間を短くする必要がある場合に役立ちます。 次のシナリオでは、ストリーミング インジェストの使用を検討してください。

  • 待機時間を 1 秒未満にする必要がある。
  • 各テーブルへのデータ ストリームが比較的小さい (1 秒あたりのレコード数が少ない) が、データ インジェスト ボリューム全体が高い (1 秒あたり数千レコード) 場合に、多数のテーブルの操作処理を最適化する。

各テーブルへのデータ ストリームが高い (1 時間あたり 4 GB を超える) 場合は、キューに登録されたインジェストの使用を検討してください。

さまざまなインジェスト方法の詳細については、「データ取り込みの概要」を参照してください。

以前の SDK バージョンに基づくコード サンプルについては、アーカイブされた記事参照してください。

適切なストリーミング インジェストの種類を選択する

2 種類のストリーミング インジェストがサポートされています。

インジェストの種類 説明
データ接続 Event Hubs、IoT Hub、Event Grid のデータ接続では、クラスター レベルで有効になっている場合、ストリーミング インジェストを使用できます。 ストリーミング インジェストの使用の決定は、ターゲット テーブルに構成されているストリーミング インジェスト ポリシーに従って行われます。
データ接続の管理の詳細については、「Event Hub、IoT HubEvent Grid」を参照してください。
カスタム インジェスト カスタム インジェストでは、Azure Data エクスプローラー クライアント ライブラリのいずれかを使用するアプリケーションを作成する必要があります
このトピックの情報を参照して、カスタム インジェストを構成することができます。 また、C# ストリーミング インジェストのサンプル アプリケーションに関する記事も役に立つ場合があります。

次の表を使用して、お使いの環境に適したインジェストの種類を選択してください。

条件 データ接続 カスタム インジェスト
インジェスト開始からクエリでデータが使用可能になるまでのデータ遅延 より長い遅延 より短い遅延
開発のオーバーヘッド 高速で簡単なセットアップ、開発オーバーヘッドなし アプリケーションを作成してデータを取り込み、エラーを処理し、データの一貫性を確保するための高い開発オーバーヘッド

Note

Azure portal を使用するか、C# でプログラムにより、クラスターでのストリーミング インジェストを有効または無効にするプロセスを管理できます。 カスタム アプリケーションに C# を使用している場合は、プログラムによるアプローチを使用した方が便利な場合があります。

前提条件

操作および運用面の考慮事項

ストリーミング インジェストに影響を与える可能性のある主な要因は、次のとおりです。

  • VM およびクラスターのサイズ: ストリーミング インジェストのパフォーマンスと容量は、VM とクラスターのサイズを増やして拡張されます。 同時インジェスト要求の数は、コアあたり 6 個に制限されています。 たとえば、D14 や L16 などの 16 コアの SKU の場合、サポートされる最大負荷は 96 の同時インジェスト要求です。 D11 などの 2 コアの SKU の場合、サポートされる最大負荷は 12 の同時インジェスト要求です。
  • データ サイズの制限: ストリーミング インジェスト要求のデータ サイズの制限は 4 MB です。 これには、インジェスト時に更新ポリシー用に作成されたデータが含まれます。
  • スキーマの更新: テーブルとインジェスト マッピングの作成や変更など、スキーマの更新には、ストリーミング インジェスト サービスで最大 5 分かかることがあります。 詳細については、「ストリーミング インジェストとスキーマ変更」を参照してください。
  • SSD 容量: クラスターでストリーミング インジェストを有効にすると、データがストリーミング経由で取り込まれていない場合でも、インジェスト データをストリーミングするためにクラスター マシンのローカル SSD ディスクの一部を使用して、ホット キャッシュに使用できるストレージを減らします。

クラスターでストリーミング インジェストを有効にする

ストリーミング インジェストを使用するには、クラスターで機能を有効にし、ストリーミング インジェスト ポリシーを定義する必要があります。 クラスターを作成するときに機能を有効にすることも、既存のクラスターに追加することもできます。

警告

ストリーミング インジェストを有効にする前に制限事項を確認してください。

新しいクラスターを作成しているときにストリーミング インジェストを有効にする

Azure portal を使用するか、C# でプログラムにより、新しいクラスターを作成するときにストリーミング インジェストを有効にすることができます。

Azure Data Explorer クラスターとデータベースの作成」の手順に従ってクラスターを作成するときに、[構成] タブで [ストリーミング インジェスト] を選択し >[オン] にします。

Azure Data Explorer でクラスターを作成するときに、ストリーミング インジェストを有効にする。

既存のクラスターでストリーミング インジェストを有効にする

既存のクラスターがある場合は、Azure portal を使用するか、C# でプログラムにより、ストリーミング インジェストを有効にすることができます。

  1. Azure portal で、Azure Data Explorer クラスターに移動します。

  2. [設定][構成] を選択します。

  3. [構成] ウィンドウで、 [オン] を選択して [ストリーミング インジェスト] を有効にします。

  4. [保存] を選択します。

    Azure Data Explorer でストリーミング インジェストを有効にする。

ターゲット テーブルを作成し、ポリシーを定義する

Azure portal を使用するか、C# でプログラムにより、ストリーミング インジェスト データを受け取るテーブルを作成し、関連するポリシーを定義します。

  1. Azure portal で、お使いのクラスターに移動します。

  2. クエリを選択します。

    Azure Data Explorer ポータルで [クエリ] を選択してストリーミング インジェストを有効にする。

  3. ストリーミング インジェスト経由でデータを受け取るテーブルを作成するには、次コマンドを [クエリ] ペインにコピーし、 [実行] を選択します。

    .create table TestTable (TimeStamp: datetime, Name: string, Metric: int, Source:string)
    

    Azure Data Explorer へのストリーミング インジェスト用のテーブルを作成する。

  4. 次のコマンドのいずれかを [クエリ] ペイン にコピーし、 [実行] を選択します。 これにより、作成したテーブルまたはそのテーブルを含むデータベースで、ストリーミング インジェスト ポリシーが定義されます。

    ヒント

    データベース レベルで定義されているポリシーは、データベース内の既存および将来のすべてのテーブルに適用されます。 データベース レベルでポリシーを有効にすると、テーブルごとにポリシーを有効にする必要はありません。

    • 作成したテーブルでポリシーを定義するには、次を使用します。

      .alter table TestTable policy streamingingestion enable
      
    • 作成したテーブルを含むデータベースでポリシーを定義するには、次を使用します。

      .alter database StreamingTestDb policy streamingingestion enable
      

    Azure Data Explorer でストリーミング インジェスト ポリシーを定義する。

ストリーミング インジェスト アプリケーションを作成してクラスターにデータを取り込む

希望する言語を使用して、お使いのクラスターにデータを取り込むためのアプリケーションを作成します。

using System.IO;
using System.Threading.Tasks;
using Kusto.Data; // Requires Package Microsoft.Azure.Kusto.Data
using Kusto.Data.Common;
using Kusto.Ingest; // Requires Package Microsoft.Azure.Kusto.Ingest
namespace StreamingIngestion;
class Program
{
    static async Task Main(string[] args)
    {
        var clusterPath = "https://<clusterName>.<region>.kusto.windows.net";
        var appId = "<appId>";
        var appKey = "<appKey>";
        var appTenant = "<appTenant>";
        // Create Kusto connection string with App Authentication
        var connectionStringBuilder = new KustoConnectionStringBuilder(clusterPath)
            .WithAadApplicationKeyAuthentication(
                applicationClientId: appId,
                applicationKey: appKey,
                authority: appTenant
            );
        // Create a disposable client that will execute the ingestion
        using var client = KustoIngestFactory.CreateStreamingIngestClient(connectionStringBuilder);
        // Ingest from a compressed file
        var fileStream = File.Open("MyFile.gz", FileMode.Open);
        // Initialize client properties
        var ingestionProperties = new KustoIngestionProperties(databaseName: "<databaseName>", tableName: "<tableName>");
        // Create source options
        var sourceOptions = new StreamSourceOptions { CompressionType = DataSourceCompressionType.GZip, };
        // Ingest from stream
        await client.IngestFromStreamAsync(fileStream, ingestionProperties, sourceOptions);
    }
}

クラスターでストリーミング インジェストを無効にする

警告

ストリーミング インジェストの無効化には数時間かかることがあります。

Azure Data Explorer クラスターでストリーミング インジェストを無効にする前に、関連するすべてのテーブルとデータベースからストリーミング インジェスト ポリシーを削除します。 ストリーミング インジェスト ポリシーを削除すると、Azure Data Explorer クラスター内でデータの再配置がトリガーされます。 ストリーミング インジェストのデータは、初期ストレージから列ストア (エクステントまたはシャード) 内の永続的なストレージへ移動されます。 初期ストレージ内のデータ量によっては、このプロセスに数秒から数時間かかることがあります。

ストリーミング インジェスト ポリシーをドロップする

Azure portal を使用するか、C# でプログラムによってストリーミング インジェスト ポリシーをドロップできます。

  1. Azure portal で、Azure Data Explorer クラスターに移動し、[クエリ] を選択します。

  2. ストリーミング インジェストポリシーをテーブルからドロップするには、次のコマンドを [クエリ] ペインにコピーし、 [実行] を選択します。

    .delete table TestTable policy streamingingestion
    

    Azure Data Explorer でストリーミング インジェスト ポリシーを削除する。

  3. [設定][構成] を選択します。

  4. [構成] ウィンドウで、 [オフ] を選択して [ストリーミング インジェスト] を無効にします。

  5. [保存] を選択します。

    Azure Data Explorer でストリーミング インジェストを無効にする。

制限事項

  • データ マッピングは、ストリーミング インジェストで使用するために事前に作成する必要があります。 個々のストリーミング インジェスト要求は、インライン データ マッピングには対応していません。
  • extent タグは、ストリーミング インジェスト データには設定できません。
  • 更新ポリシー。 更新ポリシーは、ソース テーブル内に新しく取り込まれたデータのみを参照でき、データベース内のその他のデータまたはテーブルは参照できません。
  • トランザクション ポリシーを使用した更新ポリシー失敗すると、再試行はバッチ インジェストにフォールバックします。
  • フォロワー データベースのリーダーとして使用されるクラスター上でストリーミング インジェストが有効になっている場合、ストリーミング インジェスト データをフォローするためには、次のクラスターでも同様にストリーミング インジェストを有効にする必要があります。 クラスター データが Data Share を介して共有されているかどうかに関わらず、同じことが当てはまります。