你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

lookup 运算符

适用于:✅Microsoft Fabric✅Azure 数据资源管理器Azure MonitorMicrosoft✅ Sentinel

使用在维度表中查找的值扩展事实数据表的列。

FactTable | lookup kind=leftouter (DimensionTable) on CommonColumn, $left.Col1 == $right.Col2

此处,结果是一个表,它根据后一个表中的每对 (CommonColumn1,Col2) 查找前一个表中的每对 (CommonColumn,Col),使用来自 DimensionTable(通过 $right 进行引用)的数据来扩展 FactTable ($left)。 有关事实数据表与维度表之间的差异,请参阅事实数据表与维度表

lookup 运算符执行的操作类似于 join 运算符,但存在以下差异:

  • 结果不会重复 $right 表中作为联接操作基础的列。
  • 仅支持两种查找:leftouterinner,并且 leftouter 为默认值。
  • 从性能方面考虑,系统默认情况下假定 $left 表是较大的(事实数据)表,而 $right 表是较小的(维度)表。 这与 join 运算符使用的假设完全相反。
  • lookup 运算符自动将 $right 表广播到 $left 表(实质上,其行为与指定了 hint.broadcast 时的行为相同)。 这会限制 $right 表的大小。

注意

如果查找的右侧大于几十 MB,则查询将失败。

可以运行以下查询来估计右侧的大小(以字节为单位):

rightSide
| summarize sum(estimate_data_size(*))

语法

LeftTable | lookup [kind = (leftouter|inner)] (RightTable) on Conditions

详细了解语法约定

参数

客户 类型​​ 必需 说明
LeftTable string ✔️ 用作查找基础的表或表格表达式。 表示为 $left
RightTable string ✔️ 用于“填充”事实数据表中的新列的表或表格表达式。 表示为 $right
特性 string ✔️ 一个或多个规则的逗号分隔列表,这些规则描述 LeftTable 中的行如何与 RightTable 中的行进行匹配。 将使用 and 逻辑运算符评估多个规则。 请参阅规则
kind string 确定如何处理 LeftTable 中在 RightTable 中没有匹配项的行。 默认情况下将使用 leftouter,这意味着所有这些行都将出现在输出中,对于此运算符添加的 RightTable 列的缺失值,将使用 null 值。 如果使用 inner,则输出中将省略此类行。 lookup 运算符不支持其他种类的联接。

规则

规则类型 语法 Predicate
基于名称的等式 ColumnName where LeftTable.ColumnName == RightTable.ColumnName
基于值的等式 $left.LeftColumn == $right.RightColumn where $left.LeftColumn == $right.*RightColumn

注意

如果使用“基于值的等式”,则列名称必须通过由 $left$right 表示法表示的相应所有者表进行限定。

返回

具有以下内容的表:

  • 一列,用于每个表中的每一列,包括匹配键。 如果存在名称冲突,会自动重命名右侧的列。
  • 一行,用于输入表之间的所有匹配项。 匹配项是从表中选出的一行,该表中的所有 on 字段值与其他表中的值相同。
  • 属性(查找键)在输出表中将只出现一次。
  • 如果 kind 未指定或 kind=leftouter,则除了内部匹配,还有一行用于左侧(和/或右侧)的每一行(即使没有匹配项)。 在这种情况下,不匹配的输出单元格包含 null。
  • 如果 kind=inner,则输出中存在一行,用于左侧和右侧匹配行的每个组合。

示例

let FactTable=datatable(Row:string,Personal:string,Family:string) [
  "1", "Bill",   "Gates",
  "2", "Bill",   "Clinton",
  "3", "Bill",   "Clinton",
  "4", "Steve",  "Ballmer",
  "5", "Tim",    "Cook"
];
let DimTable=datatable(Personal:string,Family:string,Alias:string) [
  "Bill",  "Gates",   "billg",
  "Bill",  "Clinton", "billc",
  "Steve", "Ballmer", "steveb",
  "Tim",   "Cook",    "timc"
];
FactTable
| lookup kind=leftouter DimTable on Personal, Family
个人 系列 Alias
1 Bill Gates billg
2 Bill Clinton billc
3 Bill Clinton billc
4 Steve Ballmer steveb
5 Tim Cook timc