join 運算子
透過比對每個資料表中所指定資料行的值,來合併兩個資料表的資料列,以形成新的資料表。
Kusto 查詢語言 (KQL) 提供各種聯結,每個聯結都會以不同的方式影響結果數據表中的架構和數據列。 例如,如果您使用 inner
聯結,則數據表的數據行與左數據表相同,再加上右數據表中的數據行。 為獲得最佳效能,如果某個資料表勢必會小於另一個資料表,請將其做為 join
運算子的左側。
下圖提供每個聯結所執行作業的視覺表示法。
Syntax
LeftTable|
join
[ kind
=
JoinFlavor ] [ Hints ] (
RightTable)
on
條件
深入瞭解 語法慣例。
參數
名稱 | 類型 | 必要 | Description |
---|---|---|---|
LeftTable | string |
✔️ | 左數據表或表格式表示式,有時稱為外部數據表,其數據列要合併。 表示方法為 $left 。 |
JoinFlavor | string |
要執行的聯結類型:innerunique 、、、leftouter inner 、rightouter 、fullouter 、leftanti 、rightanti leftsemi 、 rightsemi 。 預設為 innerunique 。 如需聯結類別的詳細資訊,請參閱 傳回。 |
|
提示 | string |
以名稱= 值的形式分隔零個或多個空格分隔聯結提示,可控制數據列比對作業和執行計劃的行為。 如需詳細資訊,請參閱 提示。 |
|
RightTable | string |
✔️ | 右數據表或表格式表示式,有時稱為內部數據表,其數據列要合併。 表示方法為 $right 。 |
條件 | string |
✔️ | 決定 LeftTable 中的數據列如何與 RightTable 中的數據列相符。 如果您想要比對的數據行在這兩個數據表中具有相同的名稱,請使用 ColumnName 語法ON 。 否則,請使用 LeftColumn== $right. RightColumn 語法ON $left. 。 若要指定多個條件,您可以使用 「and」 關鍵詞,或使用逗號分隔它們。 如果您使用逗號,則會使用 「and」 邏輯運算符來評估條件。 |
提示
為了獲得最佳效能,如果一個數據表一律小於另一個數據表,請使用它作為聯結的左側。
提示
提示索引鍵 | 值 | 說明 |
---|---|---|
hint.remote |
auto , left , local , right |
請參閱跨叢集聯結 |
hint.strategy=broadcast |
指定在叢集節點上共用查詢負載的方式。 | 請參閱廣播聯結 |
hint.shufflekey=<key> |
此 shufflekey 查詢會使用索引鍵來分割資料,以共用叢集節點上的查詢負載。 |
請參閱隨機查詢 |
hint.strategy=shuffle |
策略 shuffle 查詢會共用叢集節點上的查詢負載,其中每個節點會處理數據的一個分割區。 |
請參閱隨機查詢 |
名稱 | 值 | 說明 |
---|---|---|
hint.remote |
auto , left , local , right |
|
hint.strategy=broadcast |
指定在叢集節點上共用查詢負載的方式。 | 請參閱廣播聯結 |
hint.shufflekey=<key> |
此 shufflekey 查詢會使用索引鍵來分割資料,以共用叢集節點上的查詢負載。 |
請參閱隨機查詢 |
hint.strategy=shuffle |
策略 shuffle 查詢會共用叢集節點上的查詢負載,其中每個節點會處理數據的一個分割區。 |
請參閱隨機查詢 |
注意
聯結提示不會變更 的語意, join
但可能會影響效能。
傳回
傳回架構和數據列取決於聯結類別。 聯結類別是以 kind 關鍵詞指定。 下表顯示支持的聯結類別。 若要查看特定聯結類別的範例,請選取 [ 聯結類別 ] 數據行中的連結。
聯結類別 | 傳回 | 範例說明 |
---|---|---|
innerunique (預設) | 內部聯結與左側重複資料刪除 結構描述:這兩個資料表中的所有資料行,包括相符的索引鍵 資料列:左資料表中所有重復資料刪除的資料列都符合右資料表的資料列 |
|
內 | 標準內部聯結 結構描述:這兩個資料表中的所有資料行,包括相符的索引鍵 資料列:僅限兩個資料表中相符的資料列 |
|
leftouter | 左方外部聯結 結構描述:這兩個資料表中的所有資料行,包括相符的索引鍵 資料列:左資料表中的所有記錄,而且只包含右資料表中相符的資料列 |
|
rightouter | 右方外部聯結 結構描述:這兩個資料表中的所有資料行,包括相符的索引鍵 資料列:右資料表中的所有記錄,而且只包含左資料表中相符的資料列 |
|
fullouter | 完整外部聯結 結構描述:這兩個資料表中的所有資料行,包括相符的索引鍵 資料列:兩個資料表中的所有記錄,其中不相符的儲存格填入了 null |
|
leftsemi | 左方半聯結 結構描述:左資料表中的所有資料行 資料列:左資料表中的所有記錄符合右資料表的記錄 |
|
leftanti , anti , leftantisemi |
左方反向聯結和半變異 結構描述:左資料表中的所有資料行 資料列:左資料表中的所有記錄不符合右資料表的記錄 |
|
rightsemi | 右方半聯結 結構描述:右資料表中的所有資料行 資料列:右資料表中的所有記錄符合左資料表的記錄 |
|
rightanti , rightantisemi |
右方反向聯結和半變異 結構描述:右資料表中的所有資料行 資料列:右資料表中的所有記錄不符合左資料表的記錄 |
交叉聯結
KQL 不提供交叉聯結類別。 不過,您可以使用佔位元元索引鍵方法來達成交叉聯結效果。
在下列範例中,佔位元索引鍵會新增至這兩個數據表,然後用於內部聯結作業,有效地達到類似交叉聯結的行為:
X | extend placeholder=1 | join kind=inner (Y | extend placeholder=1) on placeholder
相關內容
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應