union 運算子
適用於:✅Microsoft網狀架構✅Azure 數據✅總管 Azure 監視器✅Microsoft Sentinel
接受兩個或多個數據表,並傳回所有數據列。
語法
[ T |
] union
[ UnionParameters ] [|kind=
outer
inner
] [ withsource=
ColumnName] [|true
isfuzzy=
false
] 數據表
[ T |
] union
[kind=
outer
|inner
] [withsource=
ColumnName] [|true
isfuzzy=
false
] 數據表
深入瞭解 語法慣例。
參數
姓名 | 類型 | 必要 | 描述 |
---|---|---|---|
T | string |
輸入表格式表達式。 | |
UnionParameters | string |
名稱值形式的= 零個或多個空格分隔參數,可控制數據列比對作業和執行計劃的行為。 請參閱 支援的等位參數。 |
|
kind |
string |
inner 或 outer 。 inner 會導致結果具有所有輸入數據表通用的數據行子集。 outer 會導致結果具有任何輸入中發生的所有數據行。 輸入資料欄未定義的儲存格會設定為 null 。 預設值為 outer 。使用 outer 時,結果會包含任何輸入中發生的所有數據行,每個名稱和類型出現次數各有一個數據行。 這表示,如果數據行出現在多個數據表中,而且有多個類型,它就會針對聯集結果中的每個類型都有對應的數據行。 此數據行名稱後綴為 『_』,後面接著源數據行 類型。 |
|
withsource= ColumnName |
string |
如果指定,輸出會包含名為 ColumnName 的數據行,其值表示哪個源數據表已貢獻每個數據列。 如果查詢有效地參考來自多個資料庫之數據表,包括預設資料庫,則此數據行的值具有與資料庫限定的數據表名稱。 如果參考多個叢集,叢集和資料庫 限定性會出現在 值中。 | |
isfuzzy |
bool |
如果設定為 true ,則允許模糊解析聯集腿。 聯集來源集合會縮減為一組數據表參考,這些參考存在且在分析查詢並準備執行時可供存取。 如果找到至少一個這類數據表,任何解決失敗都會產生查詢狀態結果中的警告,但不會防止查詢執行。 如果未成功解析,查詢會傳回錯誤。 預設值為 false 。isfuzzy=true union 僅適用於來源解析階段。 一旦決定源數據表集之後,就不會隱藏可能的額外查詢失敗。 |
|
表格 | string |
一或多個逗號分隔數據表參考、以括弧括住的查詢表達式,或以通配符指定的一組數據表。 例如, E* 會形成名稱開頭 E 之資料庫中所有數據表的聯集。 |
支援的等位參數
名稱 | 類型 | 必要 | 描述 |
---|---|---|---|
hint.concurrency |
int |
提示系統應該平行執行運算子的 union 並行子查詢數目。 默認值是叢集單一節點上的 CPU 核心數目(2 到 16)。 |
|
hint.spread |
int |
提示系統並行子查詢應該使用 union 多少個節點。 預設值是 1。 |
名稱 | 類型 | 必要 | 描述 |
---|---|---|---|
T | string |
輸入表格式表達式。 | |
kind |
string |
inner 或 outer 。 inner 會導致結果具有所有輸入數據表通用的數據行子集。 outer 會導致結果具有任何輸入中發生的所有數據行。 輸入資料欄未定義的儲存格會設定為 null 。 預設值為 outer 。使用 outer 時,結果會包含任何輸入中發生的所有數據行,每個名稱和類型出現次數各有一個數據行。 這表示,如果數據行出現在多個數據表中,而且有多個類型,它就會針對聯集結果中的每個類型都有對應的數據行。 此數據行名稱後綴為 『_』,後面接著源數據行 類型。 |
|
withsource= ColumnName |
string |
如果指定,輸出會包含名為 ColumnName 的數據行,其值表示哪個源數據表已貢獻每個數據列。 如果查詢有效地參考來自多個資料庫之數據表,包括預設資料庫,則此數據行的值具有與資料庫限定的數據表名稱。 如果參考多個叢集,叢集和資料庫 限定性會出現在 值中。 | |
isfuzzy |
bool |
如果設定為 true ,則允許模糊解析聯集腿。 聯集來源集合會縮減為一組數據表參考,這些參考存在且在分析查詢並準備執行時可供存取。 如果找到至少一個這類數據表,任何解決失敗都會產生查詢狀態結果中的警告,但不會防止查詢執行。 如果未成功解析,查詢會傳回錯誤。 不過,在跨工作區和跨應用程式查詢中,如果找不到任何工作區或應用程式,查詢將會失敗。 預設值為 false 。isfuzzy=true union 僅適用於來源解析階段。 一旦決定源數據表集之後,就不會隱藏可能的額外查詢失敗。 |
|
表格 | string |
一或多個逗號分隔數據表參考、以括弧括住的查詢表達式,或以通配符指定的一組數據表。 例如, E* 會形成名稱開頭 E 之資料庫中所有數據表的聯集。每當已知資料表清單時,請避免使用通配符。 某些工作區包含大量會導致執行效率不佳的數據表。 數據表也可能隨著時間而新增,導致未預測的結果。 |
注意
傳回
具有所有輸入數據表中所有數據列數目的數據表。
範例
名稱或數據列中有字串的數據表
union K* | where * has "Kusto"
資料庫中所有數據表的數據列,其名稱開頭 K
為 ,且其中任何數據行都包含 這個字 Kusto
。
相異計數
union withsource=SourceTable kind=outer Query, Command
| where Timestamp > ago(1d)
| summarize dcount(UserId)
在過去一 Query
天中產生事件或 Command
事件的不同用戶數目。 在結果中,'SourceTable' 資料行會指出 “Query” 或 “Command”。
Query
| where Timestamp > ago(1d)
| union withsource=SourceTable kind=outer
(Command | where Timestamp > ago(1d))
| summarize dcount(UserId)
這個更有效率的版本會產生相同的結果。 它會先篩選每個數據表,再建立聯集。
使用 isfuzzy=true
// Using union isfuzzy=true to access non-existing view:
let View_1 = view () { print x=1 };
let View_2 = view () { print x=1 };
let OtherView_1 = view () { print x=1 };
union isfuzzy=true
(View_1 | where x > 0),
(View_2 | where x > 0),
(View_3 | where x > 0)
| count
輸出
計數 |
---|
2 |
觀察查詢狀態 - 傳回下列警告: Failed to resolve entity 'View_3'
// Using union isfuzzy=true and wildcard access:
let View_1 = view () { print x=1 };
let View_2 = view () { print x=1 };
let OtherView_1 = view () { print x=1 };
union isfuzzy=true View*, SomeView*, OtherView*
| count
輸出
計數 |
---|
3 |
觀察查詢狀態 - 傳回下列警告: Failed to resolve entity 'SomeView*'
源數據行類型不符
let View_1 = view () { print x=1 };
let View_2 = view () { print x=toint(2) };
union withsource=TableName View_1, View_2
輸出
TableName | x_long | x_int |
---|---|---|
View_1 | 1 | |
View_2 | 2 |
let View_1 = view () { print x=1 };
let View_2 = view () { print x=toint(2) };
let View_3 = view () { print x_long=3 };
union withsource=TableName View_1, View_2, View_3
輸出
TableName | x_long1 | x_int | x_long |
---|---|---|---|
View_1 | 1 | ||
View_2 | 2 | ||
View_3 | 3 |
x
從 View_1
接收後置詞_long
的數據行,而且當名為 x_long
的數據行已存在於結果架構中,數據行名稱已取消複製,產生新的數據行-x_long1