union 演算子

複数のテーブルを受け取り、それらすべてのテーブルの行を返します。

構文

[ T | ] union [ UnionParameters ] [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=trueunion のソース解決フェーズにのみ適用されます。 一連のソース テーブルが特定されると、追加のクエリエラーが発生する可能性は抑制されません。
テーブル 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=trueunion のソース解決フェーズにのみ適用されます。 一連のソース テーブルが特定されると、追加のクエリエラーが発生する可能性は抑制されません。
テーブル 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 が生成されました。