跨叢集聯結

跨叢集聯結牽涉到從位於不同叢集中的數據集聯結數據。

在跨叢集聯結中,查詢可以在三個可能的位置執行,每個位置都有特定的指定供本文件參考:

  • 本機叢集:要求傳送至的叢集,也稱為裝載內容中資料庫的叢集。
  • 左叢集:裝載聯結作業左側數據的叢集。
  • 右叢集:裝載聯結作業右側數據的叢集。

執行查詢的叢集會從其他叢集擷取數據。

注意

如果聯結作業左邊和右側的數據裝載在相同的叢集中,則即使數據裝載在本機叢集外部,也不會被視為跨叢集聯結。

Syntax

[ cluster(ClusterName).database(DatabaseName).]LeftTable| ...
|join [ hint.remote=策略 ] (
  [ cluster(ClusterName).database(DatabaseName).]RightTable| ...
)條件

深入瞭解 語法慣例

參數

名稱 類型 必要 Description
LeftTable string ✔️ 要合併其數據列的左數據表或表格式表示式。 表示方法為 $left
策略 string 決定要在其中執行聯結的叢集。 支援的值為:leftrightlocal,和 auto。 如需詳細資訊,請參閱 策略
ClusterName string 如果聯結的數據位於本機叢集外部,請使用 cluster () 函式來指定叢集。
DatabaseName string 如果聯結的數據位於本機資料庫內容之外,請使用 database () 函式來指定資料庫。
RightTable string ✔️ 要合併其數據列的右數據表或表格式表示式。 表示方法為 $right
條件 string ✔️ 決定 LeftTable 中的數據列如何與 RightTable 中的數據列相符。 如果您想要比對的數據行在這兩個數據表中具有相同的名稱,請使用 ColumnName 語法ON。 否則,請使用 LeftColumn==$right.RightColumn 語法ON $left.。 若要指定多個條件,您可以使用 「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 監視器不支援這項功能