クラスター間の結合

クラスター間結合には、異なるクラスターに存在するデータセットからのデータの結合が含まれます。

クロスクラスター結合では、クエリは 3 つの可能な場所で実行できます。それぞれ、このドキュメント全体を通して参照するための特定の指定があります。

  • ローカル クラスター: 要求の送信先となるクラスター。これは、コンテキストでデータベースをホストするクラスターとも呼ばれます。
  • 左のクラスター: 結合操作の左側でデータをホストしているクラスター。
  • 右側のクラスター: 結合操作の右側でデータをホストしているクラスター。

クエリを実行するクラスターは、他のクラスターからデータをフェッチします。

Note

結合操作の左側と右側のデータが同じクラスターでホストされている場合、データがローカル クラスターの外部でホストされている場合でも、クラスター間の結合とは見なされません。

構文

[ cluster(ClusterName).database(DatabaseName).]LeftTable | ...
|join [ hint.remote=Strategy ](
  [ cluster(ClusterName).database(DatabaseName).]RightTable | ...
) on Conditions

構文規則について詳しく知る。

パラメーター

件名 タイプ Required 説明
LeftTable string ✔️ 行をマージする左のテーブルまたは表形式の式。 $left と示されます。
戦略 string 結合を実行するクラスターを決定します。 サポートされている値: leftrightlocalauto。 詳細については、「 Strategies」を参照してください。
ClusterName string 結合のデータがローカル クラスターの外部にある場合は、 cluster() 関数を使用してクラスターを指定します。
DatabaseName string 結合のデータがローカル データベース コンテキストの外部にある場合は、 database() 関数を使用してデータベースを指定します。
RightTable string ✔️ 行をマージする右のテーブルまたは表形式の式。 $right と示されます。
条件 string ✔️ LeftTable の行を RightTable の行と照合する方法を指定します。 一致する列の名前が両方のテーブルで同じである場合は、構文 ON ColumnName を使用します。 それ以外の場合は、構文 ON $left.LeftColumn == $right.RightColumn を使用します。 複数の条件を指定するには、"and" キーワードを使用するか、コンマで区切ります。 コンマを使用する場合、条件は "and" 論理演算子を使用して評価されます。

方法

次の一覧では、 Strategy パラメーターでサポートされている値について説明します。

  • left: 左側のテーブルまたは左側のクラスターのクラスターで結合を実行します。
  • right: 適切なテーブルまたは適切なクラスターのクラスターで結合を実行します。
  • local: 現在のクラスターまたはローカル クラスターのクラスターで結合を実行します。
  • auto: (既定) Kusto がリモート処理を決定します。

Note

ヒント付き戦略が結合操作に適用できない場合、結合リモート処理ヒントは無視されます。

自動戦略のしくみ

既定では、 auto 戦略は、次の規則に基づいて、クラスター間結合を実行する場所を決定します。

  • いずれかのテーブルがローカル クラスターでホストされている場合、結合はローカル クラスターで実行されます。
  • 両方のテーブルがローカル クラスターの外部でホストされている場合、結合は適切なクラスターで実行されます。

次に例を示します。

// Example 1
T | ... | join (cluster("B").database("DB").T2 | ...) on Col1

// Example 2
cluster("B").database("DB").T | ... | join (cluster("C").database("DB2").T2 | ...) on Col1

auto戦略では、ローカル クラスターで "例 1" が実行されます。 "例 2" では、どちらのクラスターもローカル クラスターでないと仮定すると、結合は適切なクラスターで実行されます。

パフォーマンスに関する考慮事項

最適なパフォーマンスを得られるように、最大のテーブルを含むクラスターでクエリを実行することをお勧めします。

次の例をもう一度考えてみましょう。

// Example 1
T | ... | join (cluster("B").database("DB").T2 | ...) on Col1

// Example 2
cluster("B").database("DB").T | ... | join (cluster("C").database("DB2").T2 | ...) on Col1

"例 1" はローカル クラスターで実行するように設定されていますが、 T | ... によって生成されたデータセットが、 cluster("B").database("DB").T2 | ... によって生成されたデータセットよりも小さい場合は、ローカル クラスターではなく、クラスター B (この場合は適切なクラスター) で結合操作を実行する方が効率的です。

次のクエリでは、 right 戦略を使用してこれを行います。 right戦略では、左のテーブルがローカル クラスター内にある場合でも、結合操作は右側のクラスターで実行されます。

T | ... | join hint.remote=right (cluster("B").database("DB").T2 | ...) on Col1

この機能は、Azure Monitor ではサポートされていません。