innerunique 聯結
適用於:✅Microsoft網狀架構✅Azure 數據✅總管 Azure 監視器✅Microsoft Sentinel
聯 innerunique
結類別會從左側移除重複的索引鍵。 此行為可確保輸出包含每個唯一左右索引鍵組合的數據列。
根據預設,如果未kind
指定 參數,innerunique
則會使用聯結類別。 此預設實作在記錄/追蹤分析案例中很有用,目的是根據共用的相互關聯標識符來相互關聯兩個事件。 它可讓您擷取現象的所有實例,同時忽略導致相互關聯的重複追蹤記錄。
語法
LeftTable |
join
kind=innerunique
[ 提示 ] RightTable 條件 on
深入瞭解 語法慣例。
參數
姓名 | 類型 | 必要 | 描述 |
---|---|---|---|
LeftTable | string |
✔️ | 左數據表或表格式表示式,有時稱為外部數據表,其數據列要合併。 表示為 $left 。 |
提示 | string |
以 Name = Value 的形式,控制數據列比對作業和執行計劃的行為,以零或多個空格分隔聯結提示。 如需詳細資訊,請參閱 提示。 |
|
RightTable | string |
✔️ | 右數據表或表格式表示式,有時稱為內部數據表,其數據列要合併。 表示為 $right 。 |
條件 | string |
✔️ | 決定 LeftTable 中的數據列如何與 RightTable 中的數據列相符。 如果您想要比對的數據行在這兩個數據表中具有相同的名稱,請使用語法 ON ColumnName。 否則,請使用 LeftColumn RightColumn 語法。$right. == ON $left. 若要指定多個條件,您可以使用 「and」 關鍵詞,或使用逗號分隔它們。 如果您使用逗號,則會使用 「and」 邏輯運算符來評估條件。 |
提示
為了獲得最佳效能,如果一個數據表一律小於另一個數據表,請使用它做為聯結的左側。
提示
參數名稱 | 值 | 描述 |
---|---|---|
hint.remote |
auto 、 、 left 、 local right |
請參閱 跨叢集聯結 |
hint.strategy=broadcast |
指定在叢集節點上共用查詢負載的方式。 | 請參閱 廣播聯結 |
hint.shufflekey=<key> |
查詢 shufflekey 會使用索引鍵來分割數據,在叢集節點上共用查詢負載。 |
請參閱 隨機查詢 |
hint.strategy=shuffle |
策略 shuffle 查詢會共用叢集節點上的查詢負載,其中每個節點都會處理數據的一個分割區。 |
請參閱 隨機查詢 |
傳回
架構:這兩個數據表中的所有數據行,包括相符的索引鍵。
數據列:所有重複資料刪除的數據列都來自左數據表,符合來自右數據表的數據列。
範例
使用預設 innerunique 聯結
let X = datatable(Key:string, Value1:long)
[
'a',1,
'b',2,
'b',3,
'c',4
];
let Y = datatable(Key:string, Value2:long)
[
'b',10,
'c',20,
'c',30,
'd',40
];
X | join Y on Key
輸出
機碼 | Value1 | Key1 | 值2 |
---|---|---|---|
b | 2 | b | 10 |
c | 4 | c | 20 |
c | 4 | c | 30 |
注意
索引鍵 『a』 和 'd' 不會出現在輸出中,因為左右兩側沒有相符的索引鍵。
查詢會執行預設聯結,這是重複數據刪除左側以聯結索引鍵為基礎的內部聯結。 重複資料刪除只會保留第一筆記錄。 重複資料刪除之後,聯結產生的左側為:
機碼 | Value1 |
---|---|
a | 1 |
b | 2 |
c | 4 |
來自 innerunique 聯結的兩個可能輸出
注意
聯 innerunique
結類別可能會產生兩個可能的輸出,而且兩者都正確。
在第一個輸出中,聯結運算符會隨機選取出現在 t1 中的第一個索引鍵,值為 “val1.1”,並將它與 t2 索引鍵比對。
在第二個輸出中,聯結運算符隨機選取出現在 t1 中的第二個索引鍵,值為 “val1.2”,並將它與 t2 索引鍵比對。
let t1 = datatable(key: long, value: string)
[
1, "val1.1",
1, "val1.2"
];
let t2 = datatable(key: long, value: string)
[
1, "val1.3",
1, "val1.4"
];
t1
| join kind = innerunique
t2
on key
輸出
索引鍵 | value | key1 | value1 |
---|---|---|---|
1 | val1.1 | 1 | val1.3 |
1 | val1.1 | 1 | val1.4 |
let t1 = datatable(key: long, value: string)
[
1, "val1.1",
1, "val1.2"
];
let t2 = datatable(key: long, value: string)
[
1, "val1.3",
1, "val1.4"
];
t1
| join kind = innerunique
t2
on key
輸出
索引鍵 | value | key1 | value1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
- Kusto 已優化,以盡可能將之後
join
的篩選推送至適當的聯結端、左側或右側。 - 有時候,所使用的類別是 內部統 一的,而且篩選會傳播到聯結的左側。 類別會自動傳播,且套用至該篩選的索引鍵會出現在輸出中。
- 使用上述範例並新增篩選
where value == "val1.2"
。 它會提供第二個結果,而且永遠不會為數據集提供第一個結果:
let t1 = datatable(key: long, value: string)
[
1, "val1.1",
1, "val1.2"
];
let t2 = datatable(key: long, value: string)
[
1, "val1.3",
1, "val1.4"
];
t1
| join kind = innerunique
t2
on key
| where value == "val1.2"
輸出
索引鍵 | value | key1 | value1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
取得擴充的登入活動
從 login
取得擴充活動,其中某些項目標示為活動的開始和結尾。
let Events = MyLogTable | where type=="Event" ;
Events
| where Name == "Start"
| project Name, City, ActivityId, StartTime=timestamp
| join (Events
| where Name == "Stop"
| project StopTime=timestamp, ActivityId)
on ActivityId
| project City, ActivityId, StartTime, StopTime, Duration = StopTime - StartTime
let Events = MyLogTable | where type=="Event" ;
Events
| where Name == "Start"
| project Name, City, ActivityIdLeft = ActivityId, StartTime=timestamp
| join (Events
| where Name == "Stop"
| project StopTime=timestamp, ActivityIdRight = ActivityId)
on $left.ActivityIdLeft == $right.ActivityIdRight
| project City, ActivityId, StartTime, StopTime, Duration = StopTime - StartTime
相關內容
- 瞭解其他 聯結類別