共用方式為


union 運算子

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

接受兩個或多個數據表,並傳回所有數據列。

語法

[ T | ] union [ UnionParameters ] [|kind=outerinner ] [ withsource= ColumnName] [|trueisfuzzy=false ] 數據表

[ T | ] union [kind= outer|inner] [withsource= ColumnName] [|trueisfuzzy=false ] 數據表

深入瞭解 語法慣例

注意

藉由使用 set 語句或透過用戶端要求屬性,將要求屬性設定best_efforttrue,即可改變運算子的union作業。 當此屬性設定為 true時, union 運算符會忽略模糊解析和連線失敗,以執行任何正在「聯集」的子表達式,並在查詢狀態結果中產生警告。

參數

姓名 類型​​ 必要 描述
T string 輸入表格式表達式。
UnionParameters string 名稱值形式的= 零個或多個空格分隔參數,可控制數據列比對作業和執行計劃的行為。 請參閱 支援的等位參數
kind string innerouterinner 會導致結果具有所有輸入數據表通用的數據行子集。 outer 會導致結果具有任何輸入中發生的所有數據行。 輸入資料欄未定義的儲存格會設定為 null。 預設值為 outer

使用 outer時,結果會包含任何輸入中發生的所有數據行,每個名稱和類型出現次數各有一個數據行。 這表示,如果數據行出現在多個數據表中,而且有多個類型,它就會針對聯集結果中的每個類型都有對應的數據行。 此數據行名稱後綴為 『_』,後面接著源數據行 類型
withsource=ColumnName string 如果指定,輸出會包含名為 ColumnName 的數據行,其值表示哪個源數據表已貢獻每個數據列。 如果查詢有效地參考來自多個資料庫之數據表,包括預設資料庫,則此數據行的值具有與資料庫限定的數據表名稱。 如果參考多個叢集,叢集和資料庫 限定性會出現在 值中。
isfuzzy bool 如果設定為 true,則允許模糊解析聯集腿。 聯集來源集合會縮減為一組數據表參考,這些參考存在且在分析查詢並準備執行時可供存取。 如果找到至少一個這類數據表,任何解決失敗都會產生查詢狀態結果中的警告,但不會防止查詢執行。 如果未成功解析,查詢會傳回錯誤。 預設值為 false

isfuzzy=trueunion僅適用於來源解析階段。 一旦決定源數據表集之後,就不會隱藏可能的額外查詢失敗。
表格 string 一或多個逗號分隔數據表參考、以括弧括住的查詢表達式,或以通配符指定的一組數據表。 例如, E* 會形成名稱開頭 E之資料庫中所有數據表的聯集。

支援的等位參數

名稱 類型​​ 必要 描述
hint.concurrency int 提示系統應該平行執行運算子的 union 並行子查詢數目。 默認值是叢集單一節點上的 CPU 核心數目(2 到 16)。
hint.spread int 提示系統並行子查詢應該使用 union 多少個節點。 預設值是 1。
名稱 類型​​ 必要 描述
T string 輸入表格式表達式。
kind string innerouterinner 會導致結果具有所有輸入數據表通用的數據行子集。 outer 會導致結果具有任何輸入中發生的所有數據行。 輸入資料欄未定義的儲存格會設定為 null。 預設值為 outer

使用 outer時,結果會包含任何輸入中發生的所有數據行,每個名稱和類型出現次數各有一個數據行。 這表示,如果數據行出現在多個數據表中,而且有多個類型,它就會針對聯集結果中的每個類型都有對應的數據行。 此數據行名稱後綴為 『_』,後面接著源數據行 類型
withsource=ColumnName string 如果指定,輸出會包含名為 ColumnName 的數據行,其值表示哪個源數據表已貢獻每個數據列。 如果查詢有效地參考來自多個資料庫之數據表,包括預設資料庫,則此數據行的值具有與資料庫限定的數據表名稱。 如果參考多個叢集,叢集和資料庫 限定性會出現在 值中。
isfuzzy bool 如果設定為 true,則允許模糊解析聯集腿。 聯集來源集合會縮減為一組數據表參考,這些參考存在且在分析查詢並準備執行時可供存取。 如果找到至少一個這類數據表,任何解決失敗都會產生查詢狀態結果中的警告,但不會防止查詢執行。 如果未成功解析,查詢會傳回錯誤。 不過,在跨工作區和跨應用程式查詢中,如果找不到任何工作區或應用程式,查詢將會失敗。 預設值為 false

isfuzzy=trueunion僅適用於來源解析階段。 一旦決定源數據表集之後,就不會隱藏可能的額外查詢失敗。
表格 string 一或多個逗號分隔數據表參考、以括弧括住的查詢表達式,或以通配符指定的一組數據表。 例如, E* 會形成名稱開頭 E之資料庫中所有數據表的聯集。

每當已知資料表清單時,請避免使用通配符。 某些工作區包含大量會導致執行效率不佳的數據表。 數據表也可能隨著時間而新增,導致未預測的結果。

注意

  • 如果屬性為 關鍵詞,範圍union可以包含 let 語句view
  • 範圍 union 不會包含 函式。 若要包含函式,請使用 關鍵詞定義 let 語句view
  • 無法保證聯集腿出現的順序,但如果每個腿有 order by 操作員,則會排序每個腿。

傳回

具有所有輸入數據表中所有數據列數目的數據表。

範例

名稱或數據列中有字串的數據表

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

xView_1 接收後置詞_long的數據行,而且當名為 x_long 的數據行已存在於結果架構中,數據行名稱已取消複製,產生新的數據行-x_long1