Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
使用在维度表中查找的值扩展事实数据表的列。
例如,下面的查询通过执行查找,生成一个表,该表使用 FactTable ($left) 中的数据对 DimensionTable ($right) 进行扩展。 查找蒋 CommonColumn 中的每个对 (Col1, FactTable) 与 CommonColumn 中的每个对 (Col2, DimensionTable) 匹配。 有关事实数据表与维度表之间的差异,请参阅事实数据表与维度表。
FactTable | lookup kind=leftouter (DimensionTable) on CommonColumn, $left.Col1 == $right.Col2
lookup 运算符执行的操作类似于 join 运算符,但存在以下差异:
- 结果不会重复
$right表中作为联接操作基础的列。 - 仅支持两种查找:
leftouter和inner,并且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 | string |
✔️ | 用作查找基础的表或表格表达式。 表示为 $left。 |
| RightTable | string |
✔️ | 用于“填充”事实数据表中的新列的表或表格表达式。 表示为 $right。 |
| 特性 | string |
✔️ | 一个或多个规则的逗号分隔列表,这些规则描述 LeftTable 中的行如何与 RightTable 中的行进行匹配。 将使用 and 逻辑运算符评估多个规则。 请参阅规则。 |
kind |
string |
确定如何处理 LeftTable 中在 RightTable 中没有匹配项的行。 默认情况下将使用 leftouter,这意味着所有这些行都出现在输出中,对于此运算符添加的 RightTable 列的缺失值,将使用 null 值。 如果使用 inner,则输出中将省略此类行。
lookup 运算符不支持其他种类的联接。 |
规则
| 规则类型 | 语法 | 谓词 |
|---|---|---|
| 基于名称的等式 | ColumnName |
where
LeftTable。ColumnName==RightTable。ColumnName |
| 基于值的等式 |
$left.
LeftColumn==$right.RightColumn |
where
$left.
LeftColumn==$right.*RightColumn |
注意
如果使用“基于值的等式”,则列名称必须通过由 和 $left 表示法表示的相应所有者表进行限定。
返回
具有以下内容的表:
- 一列,用于每个表中的每一列,包括匹配键。 如果存在名称冲突,会自动重命名右侧的列。
- 一行,用于输入表之间的所有匹配项。 匹配项是从表中选出的一行,该表中的所有
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
输出
| 行 | 个人 | 系列 | 别名 |
|---|---|---|---|
| 1 | 洛恩 | 墨菲 | rowanm |
| 2 | 埃利斯 | 车工 | ellist |
| 3 | 埃利斯 | 车工 | ellist |
| 4 | 玛雅 | Robinson 分部 TMC 总裁 | mayar |
| 5 | 奎因 | 坎贝尔 | quinnc |