使用維度數據表中查閱的值,擴充事實數據表的數據行。
例如,下列查詢會產生數據表,其會藉由執行查閱,以從 FactTable ($left) 的數據來擴充 DimensionTable ($right)。 查閱會比對 CommonColumn 中每個配對(Col1、FactTable)與 CommonColumn中的每個配對(Col2、DimensionTable)。 如需事實和維度數據表之間的差異,請參閱 事實和維度數據表。
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 |
注意
如果是「依值相等」,數據行名稱者數據表限定。
傳回
具有:
- 這兩個數據表中每個數據行的數據行,包括相符的索引鍵。 如果有名稱衝突,則會自動重新命名右側的數據行。
- 輸入數據表之間每個相符項目的數據列。 比對是從一個數據表選取的數據列,其值
on與另一個數據表中的數據列相同。 - 屬性 (查閱索引鍵) 只會出現在輸出資料表中一次。
- 如果
kind未指定 或kind=leftouter,則除了內部相符專案之外,左邊的每個數據列都有一個數據列(和/或右邊),即使它沒有相符專案也一樣。 在此情況下,不相符的輸出儲存格會包含 Null。 - 如果
kind=inner為 ,則輸出中有一個數據列,每個相符數據列的組合從左到右。
例
下列範例示範如何根據 FactTable 和 DimTable 數據行中的相符值,在 Personal 與 Family之間執行左外部聯結。
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 |