跨叢集聯結
適用於:✅Microsoft網狀架構✅Azure 數據✅總管 Azure 監視器✅Microsoft Sentinel
跨叢集聯結牽涉到從位於不同叢集中的數據集聯結數據。
在跨叢集聯結中,查詢可以在三個可能的位置執行,每個位置都有特定指定供本文件參考:
- 本機叢集:要求傳送至其中的叢集,也稱為在內容中裝載資料庫的叢集。
- 左叢集:裝載聯結作業左側數據的叢集。
- 右叢集:裝載聯結作業右側數據的叢集。
執行查詢的叢集會從其他叢集擷取數據。
注意
如果聯結作業的左側和右側數據裝載在相同的叢集中,即使數據裝載在本機叢集外部,也不會被視為跨叢集聯結。
語法
[ cluster(
ClusterName).database(
DatabaseName).
]LeftTable |
...
|
join
[ hint.remote=
策略 ](
[ cluster(
ClusterName).database(
DatabaseName).
]RightTable |
...
)
在條件上
深入瞭解 語法慣例。
參數
姓名 | 類型 | 必要 | 描述 |
---|---|---|---|
LeftTable | string |
✔️ | 要合併其數據列的左數據表或表格式表示式。 表示為 $left 。 |
策略 | string |
決定要在其中執行聯結的叢集。 支援的值為: left 、 right 、 local 、 和 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