共用方式為


跨叢集聯結

適用於:✅Microsoft網狀架構Azure 數據✅總管 Azure 監視器✅Microsoft Sentinel

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

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

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

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

注意

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

語法

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

深入瞭解 語法慣例

參數

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