lookup 運算子
使用維度數據表中查閱的值,擴充事實數據表的數據行。
例如,下列查詢會產生數據表,其會藉由執行查閱,以從 DimensionTable
($right
) 的數據來擴充 FactTable
($left
)。 查閱會比對 FactTable
中每個配對(CommonColumn
、Col1
)與 DimensionTable
中的每個配對(CommonColumn
、Col2
)。 如需事實和維度數據表之間的差異,請參閱 事實和維度數據表。
FactTable | lookup kind=leftouter (DimensionTable) on CommonColumn, $left.Col1 == $right.Col2
lookup
運算符會執行類似聯結運算子的作業,但有下列差異:
- 結果不會從
$right
屬於聯結作業基礎的數據表中重複數據行。 - 僅支援兩種查閱,
leftouter
且inner
為leftouter
預設值。 - 就效能而言,系統預設會
$left
假設數據表是較大的 (facts) 數據表,而$right
數據表是較小的 (dimensions) 數據表。 這與運算子所使用的join
假設完全相反。 - 運算子
lookup
會自動將$right
數據表廣播至$left
數據表(基本上,行為就像已指定一樣hint.broadcast
)。 這會限制數據表的大小$right
。
注意
如果查閱的右側大於數十個 MB,查詢將會失敗。
您可以執行下列查詢,以位元組為單位估計右側的大小:
rightSide
| summarize sum(estimate_data_size(*))
語法
LeftTable|
lookup
[kind
=
(leftouter
|inner
)] (
RightTable)
on
属性
深入瞭解 語法慣例。
參數
姓名 | 類型 | 必要 | 描述 |
---|---|---|---|
LeftTable | string |
✔️ | 表格或表格式表示式,這是查閱的基礎。 表示為 $left 。 |
RightTable | string |
✔️ | 用來在事實數據表中「填入」新數據行的數據表或表格式表達式。 表示為 $right 。 |
屬性 | string |
✔️ | 一或多個規則的逗號分隔清單,描述 LeftTable 中的數據列如何與 RightTable 中的數據列相符。 使用 and 邏輯運算子評估多個規則。 請參閱 規則。 |
kind |
string |
決定如何在 RightTable 中處理沒有相符專案之 LeftTable 中的數據列。 根據預設,會使用 leftouter ,這表示所有這些數據列都會出現在輸出中,其中包含 null 值,這些值會用於運算子所加入 RightTable 數據行的遺漏值。 如果使用 inner ,則會從輸出中省略這類數據列。 運算子不支援 lookup 其他類型的聯結。 |
規則
規則種類 | 語法 | 述詞 |
---|---|---|
依名稱相等 | ColumnName |
where
LeftTable。ColumnName== RightTable。ColumnName |
依值相等 |
$left.
LeftColumn== $right. RightColumn |
where
$left.
LeftColumn== $right. *RightColumn |
注意
如果是「依值相等」,數據行名稱$right
者數據表限定。
傳回
具有:
- 這兩個數據表中每個數據行的數據行,包括相符的索引鍵。 如果有名稱衝突,則會自動重新命名右側的數據行。
- 輸入數據表之間每個相符項目的數據列。 比對是從一個數據表選取的數據列,其值
on
與另一個數據表中的數據列相同。 - 屬性 (查閱索引鍵) 只會出現在輸出資料表中一次。
- 如果
kind
未指定 或kind=leftouter
,則除了內部相符專案之外,左邊的每個數據列都有一個數據列(和/或右邊),即使它沒有相符專案也一樣。 在此情況下,不相符的輸出儲存格會包含 Null。 - 如果
kind=inner
為 ,則輸出中有一個數據列,每個相符數據列的組合從左到右。
範例
下列範例示範如何根據 Personal
和 Family
數據行中的相符值,在 FactTable
與 DimTable
之間執行左外部聯結。
let FactTable=datatable(Row:string,Personal:string,Family:string) [
"1", "Rowan", "Murphy",
"2", "Ellis", "Turner",
"3", "Ellis", "Turner",
"4", "Maya", "Robinson",
"5", "Quinn", "Campbell"
];
let DimTable=datatable(Personal:string,Family:string,Alias:string) [
"Rowan", "Murphy", "rowanm",
"Ellis", "Turner", "ellist",
"Maya", "Robinson", "mayar",
"Quinn", "Campbell", "quinnc"
];
FactTable
| lookup kind=leftouter DimTable on Personal, Family
輸出
資料列 | 個人版 | 系列 | Alias |
---|---|---|---|
1 | 洛恩 | 墨菲 | rowanm |
2 | 埃利斯 | 車工 | ellist |
3 | 埃利斯 | 車工 | ellist |
4 | 瑪雅 | 羅賓遜 | mayar |
5 | 奎因 | 坎貝爾 | quinnc |