你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
lookup 运算符
使用在维度表中查找的值扩展事实数据表的列。
例如,以下查询将生成一个表,该表通过执行查找,使用 DimensionTable
($right
)中的数据扩展 FactTable
($left
)。 查找匹配 DimensionTable
中每对(CommonColumn
、Col1
)与每对(CommonColumn
、Col2
)之间的 FactTable
匹配。 有关事实数据表与维度表之间的差异,请参阅事实数据表与维度表。
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 ,这意味着所有这些行都出现在输出中,其中 null 值用于运算符添加的 RightTable 列的缺失值。 如果使用 inner ,则输出中将省略此类行。
lookup 运算符不支持其他种类的联接。 |
规则
规则类型 | 语法 | Predicate |
---|---|---|
基于名称的等式 | ColumnName |
where
LeftTable.ColumnName== RightTable.ColumnName |
基于值的等式 |
$left.
LeftColumn== $right. RightColumn |
where
$left.
LeftColumn== $right. *RightColumn |
注意
如果使用“基于值的等式”,则列名称必须通过由 和 $left
表示法表示的相应所有者表进行限定。
返回
具有以下内容的表:
- 一列,用于每个表中的每一列,包括匹配键。 如果存在名称冲突,则会自动重命名右侧的列。
- 一行,用于输入表之间的所有匹配项。 匹配项是从表中选出的一行,该表中的所有
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 |