クラスター間の結合

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

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

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

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

注意

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

構文

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

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

パラメーター

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

方法

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

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

注意

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

自動戦略のしくみ

既定では、次の 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 ではサポートされていません。