Azure Data Explorer と Azure Data Factory の統合

Azure Data Factory (ADF) は、異なるデータ ストアを統合し、データに対してアクティビティを実行できるクラウドベースのデータ統合サービスです。 ADF を使用して、データ移動とデータ変換を調整し、自動化するためのデータ駆動型ワークフローを作成できます。 Azure Data Explorer は、Azure Data Factory 内でサポートされるデータ ストアの 1 つです。

Azure Data Explorer に対する Azure Data Factory アクティビティ

Azure Data Explorer ユーザーは、Azure Data Factory とのさまざまな統合を利用できます。

コピー アクティビティ

Azure Data Factory コピー アクティビティは、データ ストア間でデータを転送するために使用されます。 Azure Data Explorer は、Azure Data Explorer からサポートされている任意のデータ ストアにデータがコピーされるソースとして、また、サポートされる任意のデータ ストアから Azure Data Explorer にデータがコピーされるシンクとしてサポートされています。 詳細については、「Azure Data Factory を使用して Azure Data Explorer をコピー先またはコピー元としてデータをコピーする」を参照してください。 詳細なチュートリアルについては、「Azure Data Factoryから Azure Data Explorer にデータを読み込む」を参照してください。 Azure Data Explorer は、Azure 内でデータをコピーするときに使用される Azure IR (Integration Runtime) と、オンプレミス、または Azure Virtual Network などのアクセス制御が可能なネットワーク内にあるデータ ストアとの間でデータをコピーするときに使用されるセルフホステッド IR によってサポートされています。 詳細については、どの IR を使用するかを参照してください。

ヒント

コピー アクティビティを使用し、リンクされたサービスまたはデータセットを作成する場合は、古いデータ ストア Kusto ではなく、データ ストア Azure Data Explorer (Kusto) を選択します。

ルックアップ アクティビティ

ルックアップ アクティビティは、Azure Data Explorer 上でクエリを実行するために使用されます。 クエリの結果は、ルックアップ アクティビティの出力として返され、ADF ルックアップに関するドキュメントで説明されているように、パイプライン内の次のアクティビティで使用できます。

応答サイズの上限である 5,000 行と 2 MB に加え、アクティビティには 1 時間のクエリ タイムアウト制限もあります。

コマンド アクティビティ

Command アクティビティを使用すると、Azure Data Explorer管理コマンドを実行できます。 クエリとは異なり、管理コマンドはデータまたはメタデータを変更する可能性があります。 管理コマンドの一部は、 や .set-or-appendなどのコマンドを使用して Azure Data Explorerにデータを取り込むか、 などの.ingestコマンドを使用して Azure Data Explorerから外部データ ストアにデータを.exportコピーすることを対象とします。 コマンド アクティビティの詳細なチュートリアルについては、「Azure Data Factory コマンド アクティビティを使用して Azure Data Explorer管理コマンドを実行する」を参照してください。 管理コマンドを使用してデータをコピーすると、Copy アクティビティよりも高速かつ安価なオプションになる場合があります。 コマンド アクティビティとコピー アクティビティのどちらを使用するかを決定するには、データをコピーするときのコピー アクティビティとコマンド アクティビティ間での選択に関するページを参照してください。

データベース テンプレートから一括コピーする

Azure Data Factory テンプレートを使用してデータベースから Azure Data Explorer に一括コピーする」は、事前定義された Azure Data Factory パイプラインです。 テンプレートを使用して、データベースまたはテーブルごとにさまざまなパイプラインを作成し、データのコピーを高速化します。

データ フローのマッピング

Azure Data Factory: マッピング データ フローは、視覚的に設計されたデータ変換であり、データ エンジニアはコードを記述せずにグラフィカルなデータ変換ロジックを開発できます。 データ フローを作成して Azure Data Explorer にデータを取り込むには、次の方法を使用します。

  1. マッピング データ フローを作成します。
  2. Azure BLOB にデータをエクスポートします。
  3. データを Azure に取り込むために、Event Grid または ADF コピーアクティビティを定義します。

データをコピーするときにコピーと Azure Data Explorer コマンド アクティビティ間で選択する

このセクションでは、データコピーのニーズに適したアクティビティを選択する方法について説明します。

Azure Data Explorer との間でデータをコピーする場合、Azure Data Factory では次の 2 つのオプションを使用できます。

  • コピー アクティビティ。
  • Azure Data Explorer コマンド アクティビティ。Azure Data Explorerでデータを転送する管理コマンドの 1 つを実行します。

Azure Data Explorer からデータをコピーする

コピー アクティビティまたは .export コマンドを使用して、Azure Data Explorer からデータをコピーできます。 .export コマンドでは、クエリを実行してから、クエリの結果をエクスポートします。

Azure Data Explorer からデータをコピーするためのコピー アクティビティと .export コマンドの比較については、次の表を参照してください。

コピー アクティビティ .export コマンド
フローの説明 ADF により Kusto に対してクエリが実行され、結果が処理されてターゲット データ ストアに送信されます。
(Azure Data Explorer > ADF > シンク データ ストア)
ADF は管理コマンドを .export Azure Data Explorerに送信し、このコマンドを実行し、データをターゲット データ ストアに直接送信します。
(** Azure Data Explorer > シンク データ ストア**)
サポートされるターゲット データ ストア さまざまなサポートされるデータ ストア ADLSv2、Azure BLOB、SQL Database
パフォーマンス 一元化
  • 分散 (既定)。複数のノードからデータを同時にエクスポート
  • 高速で、COGS (売却済商品の原価) の効率性が高い。
サーバーの制限 クエリの制限を拡張/無効化できます。 既定では、ADF クエリには以下が含まれます。
  • 500,000 レコードまたは 64 MB のサイズ制限。
  • 10 分の時間制限。
  • noTruncation が false に設定されている。
既定では、クエリの制限を拡張または無効にします。
  • サイズ制限が無効になっている。
  • サーバー タイムアウトが 1 時間に延長される。
  • MaxMemoryConsumptionPerIteratorMaxMemoryConsumptionPerQueryPerNode が最大値 (5 GB、TotalPhysicalMemory/2) に拡張される。

ヒント

コピー先が .export コマンドでサポートされているデータ ストアの 1 つであり、どのコピー アクティビティ機能もご自身のニーズにとって重要でない場合は、.export コマンドを選択します。

Azure Data Explorer へのデータのコピー

コピー アクティビティ、またはクエリからの取り込み (.set-or-append.set-or-replace.set.replace)ストレージからの取り込み (.ingest) などの取り込みコマンドを使用して、Azure Data Explorer にデータをコピーできます。

Azure Data Explorer にデータをコピーするためのコピー アクティビティと取り込みコマンドの比較については、次の表を参照してください。

コピー アクティビティ クエリからの取り込み
.set-or-append / .set-or-replace / .set / .replace
ストレージからの取り込み
.ingest
フローの説明 ADF により、ソース データ ストアからデータが取得され、それが表形式に変換されて、必要なスキーママッピング変更が行われます。 その後、ADF によってデータが Azure BLOB にアップロードされてチャンクに分割され、BLOB がダウンロードされて Azure Data Explorer テーブルに取り込まれます。
(ソース データ ストア > ADF > Azure BLOB > Azure Data Explorer)
これらのコマンドは、クエリまたはコマンドを.show実行し、クエリの結果をテーブルに取り込むことができます (Azure Data Explorer > Azure Data Explorer)。 このコマンドでは、1 つまたは複数のクラウド ストレージの成果物からデータを "プル" することで、データがテーブルに取り込まれます。
サポートされるソース データ ストア さまざまなオプション ADLS Gen 2、Azure Blob、SQL ( sql_request() プラグインを使用)、Azure Cosmos DB ( cosmosdb_sql_request プラグインを使用)、および HTTP または Python API を提供するその他のデータ ストア。 ファイルシステム、Azure Blob Storage、ADLS Gen 1、ADLS Gen 2
パフォーマンス 取り込みはキューに登録されて管理されるため、負荷分散、再試行、エラー処理を提供することで、取り込みのサイズが小さく保たれ、高可用性が保証されます。
  • これらのコマンドは、大量のデータをインポートするようには設計されていません。
  • 予想どおりに動作し、コストが低くなります。 ただし、運用環境のシナリオでは、トラフィック速度とデータ サイズが大きい場合にはコピー アクティビティを使用します。
サーバーの制限
  • サイズ制限はありません。
  • 最大タイムアウト制限: 取り込まれた BLOB ごとに 1 時間。
  • クエリ部分にはサイズ制限だけがあります。これは、noTruncation=true を指定することでスキップできます。
  • 最大タイムアウト制限: 1 時間。
  • サイズ制限はありません。
  • 最大タイムアウト制限: 1 時間。

ヒント

  • ADF から Azure Data Explorer にデータをコピーする場合は、ingest from query コマンドを使用します。
  • 大規模なデータセット (>1 GB) の場合は、Copy アクティビティを使用します。

必要なアクセス許可

次の表に、Azure Data Factory との統合におけるさまざまな手順に必要なアクセス許可を示します。

手順 Operation 最小レベルのアクセス許可 Notes
リンクされたサービスの作成 データベース ナビゲーション "データベース表示者"
ADF を使用してログインしているユーザーには、データベース メタデータを読み取る権限が必要です。
ユーザーは、データベース名を手動で指定できます。
接続をテスト "データベース監視者" または "テーブル取り込み者"
サービス プリンシパルには、データベース レベルの .show コマンドまたはテーブル レベルの取り込みを実行する権限が必要です。
  • TestConnection では、データベースではなく、クラスターへの接続が検証されます。 データベースが存在しない場合でも成功する可能性があります。
  • テーブル管理者のアクセス許可では不十分です。
データセットの作成 テーブル ナビゲーション "データベース監視者"
ADF を使用してログインしたユーザーには、データベース レベルの .show コマンドを実行する権限が必要です。
ユーザーは、テーブル名を手動で指定できます。
データセットの作成またはコピー アクティビティ データのプレビュー "データベース表示者"
サービス プリンシパルには、データベース メタデータを読み取る権限が必要です。
Import schema "データベース表示者"
サービス プリンシパルには、データベース メタデータを読み取る権限が必要です。
Azure Data Explorer が表形式から表形式へのコピーのソースである場合、ユーザーがスキーマを明示的にインポートしなかった場合でも、ADF はスキーマを自動的にインポートします。
シンクとしての Azure Data Explorer by-name 列マッピングの作成 "データベース監視者"
サービス プリンシパルには、データベース レベルの .show コマンドを実行する権限が必要です。
  • すべての必須操作は 、テーブル 取り込み子で動作します。
  • 一部のオプションの操作は失敗する場合があります。
  • テーブルに CSV マッピングを作成する
  • マッピングを削除する
"テーブル取り込み者" または "データベース管理者"
サービス プリンシパルには、テーブルに変更を加える権限が必要です。
データの取り込み "テーブル取り込み者" または "データベース管理者"
サービス プリンシパルには、テーブルに変更を加える権限が必要です。
ソースとしての Azure Data Explorer クエリの実行 "データベース表示者"
サービス プリンシパルには、データベース メタデータを読み取る権限が必要です。
Kusto コマンド 各コマンドのアクセス許可レベルに従います。

パフォーマンス

Azure Data Explorer がソースであり、クエリを含むルックアップ、コピー、またはコマンド アクティビティを使用する場合、パフォーマンス情報に関する「クエリのベスト プラクティス」と、コピー アクティビティに関する ADF のドキュメントを参照してください。

このセクションでは、Azure Data Explorer がシンクであるコピー アクティビティの使用について説明します。 Azure Data Explorer シンクの推定スループットは 11-13 MBps です。 次の表は、Azure Data Explorer シンクのパフォーマンスに影響するパラメーターの詳細を示しています。

パラメーター Notes
コンポーネントの地理的距離 すべてのコンポーネントを同じリージョンに配置します。
  • ソースおよびシンク データ ストア。
  • ADF 統合ランタイム。
  • 対象の Azure Data Explorer クラスター。
少なくとも、お使いの統合ランタイムが対象の Azure Data Explorer クラスターと同じリージョンにあることを確認してください。
DIU の数 ADF によって使用される 4 つの DIU ごとに 1 つの VM。
DIU を増やすと、ソースが複数のファイルを含むファイル ベースのストアである場合にのみ役立ちます。 各 VM では、異なるファイルが並列に処理されます。 そのため、1 つの大きなファイルをコピーすると、複数の小さなファイルをコピーするよりも待機時間が長くなります。
Azure Data Explorer クラスターの量と SKU Azure Data Explorer ノードの数が多い場合、インジェスト処理時間が長くなります。 dev SKU を使用すると、パフォーマンスが著しく制限されます。
並列処理 データベースから大量のデータをコピーするには、データをパーティション分割してから、各パーティションを並列にコピーする ForEach ループを使用するか、データベースから Azure Data Explorer テンプレートへの一括コピーを使用します。 注: コピー アクティビティの [設定]>[並列処理の次数] は、Azure Data Explorer には関係ありません。
データ処理の複雑さ 待ち時間は、ソース ファイル形式、列マッピング、および圧縮によって異なります。
統合ランタイムを実行している VM
  • Azure のコピーでは、ADF VM とマシン SKU を変更することはできません。
  • オンプレミスから Azure へのコピーの場合は、セルフホステッド IR をホストしている VM が十分に強力であることを確認します。

ヒントとよくある落とし穴

アクティビティの進行状況の監視

  • アクティビティの進行状況を監視する場合、 データの書き込み プロパティは データ読み取 りプロパティよりも大きくなる可能性があります。 データの読み取り はバイナリ ファイル サイズに従って計算され、 書き込まれたデータ はメモリ内サイズに従って計算され、データが逆シリアル化および圧縮解除された後に計算されます。

  • アクティビティの進行状況を監視するときに、データが Azure Data Explorer シンクに書き込まれていることを確認できます。 Azure Data Explorer テーブルに対してクエリを実行すると、データが到着していないことがわかります。 これは、Azure Data Explorer にコピーするときに 2 つのステージがあるためです。

    • 最初のステージでは、ソース データが読み取られ、それが 900 MB のチャンクに分割されて、各チャンクが Azure BLOB にアップロードされます。 最初のステージは、ADF アクティビティの進行状況ビューに表示されます。
    • 2 番目のステージは、すべてのデータが Azure BLOB にアップロードされた後に開始されます。 クラスターのノードは BLOB をダウンロードし、シンク テーブルにデータを取り込みます。 その後、データが Azure Data Explorer テーブルに表示されます。

不適切なエスケープ処理のために CSV ファイルの取り込みに失敗

Azure Data Explorer では、CSV ファイルが RFC 4180 に合致していることが予期されています。 次のことが予期されています。

  • エスケープ処理 (" や改行など) を必要とする文字が含まれているフィールドの先頭と末尾は、空白を含まない " 文字にする必要があります。 フィールドのすべての " 文字は、二重の " 文字 ( "" ) を使用してエスケープされます。 たとえば、 "Hello, ""World""" は、Hello, "World" という内容の 1 つの列またはフィールドを持つ 1 つのレコードを含む有効な CSV ファイルです。
  • ファイル内のすべてのレコードには、同じ数の列とフィールドが含まれている必要があります。

Azure Data Factory では、バックスラッシュ (エスケープ) 文字を使用できます。 Azure Data Factory を使用してバックスラッシュを含む CSV ファイルを生成すると、そのファイルの Azure Data Explorer への取り込みは失敗します。

次のテキスト値の場合: Hello, "World"
ABC DEF
"ABC\D"EF
"ABC DEF

適切な CSV ファイルには次のように表示されます。"Hello, ""World"""
"ABC DEF"
"""ABC\D""EF"
"""ABC DEF"

既定のエスケープ文字 (バックスラッシュ) を使用すると、次の CSV は Azure Data Explorer では機能しません。"Hello, "World""
"ABC DEF"
""ABC\D"EF"
""ABC DEF"

入れ子になった JSON オブジェクト

JSON ファイルを Azure Data Explorer にコピーするときは、次の点に注意してください。

  • 配列はサポートされません。
  • JSON 構造にオブジェクトのデータ型が含まれている場合、Azure Data Factory はオブジェクトの子項目をフラット化し、各子項目を Azure Data Explorer テーブル内の別の列にマップしようとします。 オブジェクト項目全体を Azure Data Explorer の 1 つの列にマップするには、次のようにします。
    • JSON 行全体を Azure Data Explorer の 1 つの動的列に取り込みます。
    • Azure Data Factory の JSON エディターを使用して、パイプライン定義を手動で編集します。 [Mappings](マッピング) で、
      • 子項目ごとに作成された複数のマッピングを削除し、オブジェクトの種類をテーブル列にマップする 1 つのマッピングを追加します。
      • 終わり角かっこの後にコンマを追加し、続けて次を指定します。
        "mapComplexValuesToString": true.

Azure Data Explorer にコピーするときに追加のプロパティを指定する

その他のインジェスト プロパティを追加するには、パイプラインのコピー アクティビティに指定します。

プロパティを追加するには

  1. Azure Data Factory で、[作成] 鉛筆ツールを選択します。

  2. [パイプライン] で、インジェスト プロパティを追加するパイプラインを選びます。

  3. [アクティビティ] キャンバスで、[データのコピー] アクティビティを選択します。

  4. アクティビティの詳細で、[シンク] を選択し、[その他のプロパティ] を展開します。

  5. [新規] を選択し、必要に応じて [ノードの追加] または [Add array](配列の追加) を選択し、インジェスト プロパティの名前と値を指定します。 さらにプロパティを追加するには、この手順を繰り返します。

  6. 完了したら、パイプラインを保存して発行します。

次のステップ