union 演算子
適用対象: ✅Microsoft Fabric✅Azure データ エクスプローラー✅Azure Monitor✅Microsoft Sentinel
複数のテーブルを受け取り、それらすべてのテーブルの行を返します。
構文
[ T |
] union
[ UnionParameters ] [kind=
inner
|outer
] [withsource=
ColumnName] [isfuzzy=
true
|false
] Tables
[ T |
] union
[kind=
inner
|outer
] [withsource=
ColumnName] [isfuzzy=
true
|false
] Tables
構文規則について詳しく知る。
Note
union
演算子の操作は、best_effort
要求プロパティを true
に設定するか、set ステートメントまたは client 要求プロパティを使用して変更できます。 このプロパティを true
に設定すると、 union
演算子はあいまい解決と接続エラーを無視して、"共用化" されているサブ式のいずれかを実行し、クエリの状態の結果に警告を生成します。
パラメーター
件名 | タイプ | Required | 説明 |
---|---|---|---|
T | string |
表形式の入力式。 | |
UnionParameters | string |
行の照合操作と実行プランの動作を制御する、空白で区切られた "名前 = 値" の形式の 0 個以上のパラメーター。 サポートされている共用体パラメーターを参照してください。 |
|
kind |
string |
inner または outer のいずれかです。 inner では、すべての入力テーブルに共通する列のサブセットが結果に含まれます。 outer では、いずれかの入力で発生するすべての列が結果に含まれます。 入力行で定義されていないセルは、 null に設定されます。 既定値は、outer です。outer の場合、結果には、名前と型の出現ごとに 1 つの列を含む、任意の入力で発生するすべての列が含まれます。 つまり、1 つの列が複数のテーブルに表示され、複数の型を持つ場合、共用体の結果の各型に対応する列が含まれます。 この列名のサフィックスには、'_' の後に元の列 type が付いています。 |
|
withsource= [ColumnName] |
string |
指定した場合、出力には ColumnName という名前の列が含まれます。この列の値は、各行にどのソース テーブルが関与したかを示します。 クエリが既定のデータベースを含む複数のデータベースのテーブルを効果的に参照する場合、この列の値はデータベースで修飾されたテーブル名になります。 クラスターとデータベース 条件は、複数のクラスターが参照されている場合に値に存在します。 | |
isfuzzy |
bool |
true に設定すると、和集合脚のあいまい解決が許可されます。 共用体ソースのセットは、クエリの分析と実行の準備中に存在し、その時点でアクセス可能なテーブル参照のセットに縮小されます。 このようなテーブルが少なくとも 1 つ見つかった場合、解決エラーが発生すると、クエリの状態の結果に警告が表示されますが、クエリの実行は妨げられません。 解決に成功しなかった場合、クエリはエラーを返します。 既定値は、false です。isfuzzy=true は union のソース解決フェーズにのみ適用されます。 一連のソース テーブルが特定されると、追加のクエリエラーが発生する可能性は抑制されません。 |
|
テーブル | string |
1 つ以上のコンマ区切りテーブル参照、かっこで囲まれたクエリ式、またはワイルドカードで指定された一連のテーブル。 たとえば、E* を使用すると、名前が E で始まるデータベース内のすべてのテーブルの和集合が形成されます。 |
サポートされている共用体パラメーター
名前 | タイプ | Required | 説明 |
---|---|---|---|
hint.concurrency |
int |
並列で実行する必要がある union 演算子の同時サブクエリ数をシステムに示します。 既定値は、クラスターの単一ノード上の CPU コアの数です (2 から 16)。 |
|
hint.spread |
int |
union サブクエリの同時実行に使用されるノード数をシステムに示します。 既定値は 1 です。 |
名前 | タイプ | Required | 説明 |
---|---|---|---|
T | string |
表形式の入力式。 | |
kind |
string |
inner または outer のいずれかです。 inner では、すべての入力テーブルに共通する列のサブセットが結果に含まれます。 outer では、いずれかの入力で発生するすべての列が結果に含まれます。 入力行で定義されていないセルは、 null に設定されます。 既定値は、outer です。outer の場合、結果には、名前と型の出現ごとに 1 つの列を含む、任意の入力で発生するすべての列が含まれます。 つまり、1 つの列が複数のテーブルに表示され、複数の型を持つ場合、共用体の結果の各型に対応する列が含まれます。 この列名のサフィックスには、'_' の後に元の列 type が付いています。 |
|
withsource= [ColumnName] |
string |
指定した場合、出力には ColumnName という名前の列が含まれます。この列の値は、各行にどのソース テーブルが関与したかを示します。 クエリが既定のデータベースを含む複数のデータベースのテーブルを効果的に参照する場合、この列の値はデータベースで修飾されたテーブル名になります。 クラスターとデータベース 条件は、複数のクラスターが参照されている場合に値に存在します。 | |
isfuzzy |
bool |
true に設定すると、和集合脚のあいまい解決が許可されます。 共用体ソースのセットは、クエリの分析と実行の準備中に存在し、その時点でアクセス可能なテーブル参照のセットに縮小されます。 このようなテーブルが少なくとも 1 つ見つかった場合、解決エラーが発生すると、クエリの状態の結果に警告が表示されますが、クエリの実行は妨げられません。 解決に成功しなかった場合、クエリはエラーを返します。 ただし、ワークスペース間クエリとアプリ間クエリでは、ワークスペースまたはアプリのいずれかが見つからない場合、クエリは失敗します。 既定値は、false です。isfuzzy=true は union のソース解決フェーズにのみ適用されます。 一連のソース テーブルが特定されると、追加のクエリエラーが発生する可能性は抑制されません。 |
|
テーブル | string |
1 つ以上のコンマ区切りテーブル参照、かっこで囲まれたクエリ式、またはワイルドカードで指定された一連のテーブル。 たとえば、E* を使用すると、名前が E で始まるデータベース内のすべてのテーブルの和集合が形成されます。テーブルのリストが分かっている場合は、ワイルドカードを使用しないでください。 ワークスペースに、非効率的な実行につながる膨大な数のテーブルが含まれている場合もあります。 時間の経過とともにテーブルが追加され、予想外の結果につながる可能性もあります。 |
Note
union
スコープには、view
キーワードで属性付けされている場合let ステートメントを含めることができます。union
スコープには、functionsは含まれません。 関数を含めるには、view
キーワードを使用してlet ステートメントを定義します。- 共用体の脚が表示される順序は保証されませんが、各脚に
order by
演算子がある場合は、各脚が並べ替えられます。
返品
すべての入力テーブルに存在する行と同数の行を含むテーブル。
例
名前または列に文字列が含まれるテーブル
union K* | where * has "Kusto"
データベース内のすべてのテーブルの行のうち、名前が K
で始まり、いずれかの列に Kusto
という単語が含まれている行。
個別のカウント
union withsource=SourceTable kind=outer Query, Command
| where Timestamp > ago(1d)
| summarize dcount(UserId)
過去 1 日で 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 |
View_1
の列 x
はサフィックス _long
を受け取りました。また、x_long
という名前の列が結果スキーマに既に存在するため、列名が重複除去され、新しい列 x_long1
が生成されました。