ルックアップ演算子
ディメンション表で検索された値を使用して、ファクト表の列を拡張します。
FactTable | lookup kind=leftouter (DimensionTable) on CommonColumn, $left.Col1 == $right.Col2
ここで、結果は、前者の表の各ペア (CommonColumn、Col) を、後者の表の各ペア (CommonColumn1、Col2) とともに検索することによって、 DimensionTable ( $rightによって参照される) のデータで FactTable ($left) を拡張する表です。 ファクト表とディメンション表の違いについては、 ファクト表とディメンション表を参照してください。
lookup 演算子は、 結合演算子 と同様の操作を実行しますが、以下のような違いがあります。
- 結果は、結合操作の基礎となる
$right表の列を繰り返しません。 - サポートされるルックアップは、
leftouterとinnerの 2 種類のみです。leftouterがデフォルトです。 - パフォーマンスの観点から、システムはデフォルトで、
$left表は大きい (ファクト) 表、$right表は小さい (ディメンション) 表であると想定します。 これは、join演算子によって使用される想定とはまったく反対のものです。 lookupオペレーターは、$right表を$left表に自動的にブロードキャストします (基本的には、hint.broadcastが指定された場合と同様に動作します)。 これにより、$right表のサイズが制限されることに注意してください。
注
ルックアップの右側のサイズが数十 MB を超える場合、クエリーは失敗します。
以下の照会を実行して、右側のサイズ (バイト単位) を見積もることができます。
rightSide
| summarize sum(estimate_data_size(*))
構文
LeftTable | lookup [kind = (leftouter|inner)] ( RightTable ) on 属性
引数
LeftTable: ルックアップの基礎となるテーブルまたは表形式の式。
$leftとして示されます。RightTable: ファクト表の新しい列に「データを取り込む」ために使用される表または表形式の式。
$rightとして示されます。属性: LeftTable の行が RightTableの行とどのように一致するかを記述する 1 つ以上の規則のコンマ区切りリスト。 複数の規則は、
and論理演算子を使用して評価されます。 ルールは、以下のいずれかになります。
| ルールの種類 | 構文 | 述部 |
|---|---|---|
| 名前による等価 | ColumnName | where LeftTable.ColumnName == RightTable.ColumnName |
| 値による等価 | $left.LeftColumn == $right.RightColumn |
where $left.LeftColumn == $right.*RightColumn |
注
「値による等価」の場合、列名は、 $left および $right 表記で示される適用可能な所有者表で修飾 しなければなりません 。
kind: RightTableに一致するものがない LeftTable 内の行を処理する方法に関するオプションの命令。 デフォルトでは、leftouterが使用されます。これは、演算子によって追加された RightTable 列の欠落値に使用される NULL 値を使用して、これらのすべての行が出力に表示されることを意味します。innerを使用すると、そのような行は出力から省略されます。 (その他の種類の結合は、lookup演算子ではサポートされません。)
返品
以下を含む表:
マッチング・キーを含む、2 つの表のそれぞれの列ごとに 1 つの列。 名前の競合がある場合、右側の列は自動的に名前変更されます。
入力表の間の一致ごとに 1 行。 一致とは、一方の表から選択された行のうち、すべての
onフィールドに他方の表の行と同じ値を持つ行のことです。属性 (ルックアップ・キー) は、出力表に 1 回だけ表示されます。
kind指定なし、kind=leftouter一致するものがない場合でも、内部一致に加えて、左側 (および/または右側) のすべての行に 1 つの行があります。 その場合、一致しない出力セルにはヌルが含まれます。
kind=inner左右の一致する行の組み合わせごとに 1 行が出力されます。
例
events_all
| project
event_uuid,
data_source_id,
original_time
| where original_time > ago(24h) and isnotempty(data_source_id)
| lookup datasources on $left.data_source_id == $right.data_source_id
| summarize EventCount=count_distinct(event_uuid) by DataSourceName=data_source_name
| order by EventCount desc
| take 10
結果
| datasourceName | EventCount |
|---|---|
| Cisco ACE Firewall@ test.abc.acd | 112346 |
| test-UseCase0lookupDataSource | 9123 |
| MicroStWindows@Test3 | 123 |