join 运算符

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

通过匹配每个表中指定列的值,合并两个表的行以组成新表。

Kusto 查询语言 (KQL) 提供了许多类型的联接,每种联接都以不同的方式影响结果表中的架构和行。 例如,如果使用 inner 联接,则该表具有与左表相同的列,再加上右表中的列。 为获得最佳性能,如果某个表始终小于另一个表,则将其用作 join 运算符的左侧。

下图提供了每种联接执行的操作的可视化表示形式。 阴影的颜色代表返回的列,而阴影的区域代表返回的行。

显示查询联接类型的关系图。

语法

LeftTable | join [ kind = JoinFlavor ] [ Hints ] (RightTable) on Conditions

详细了解语法约定

参数

客户 类型​​ 必需 说明
LeftTable string ✔️ 要合并其行的左侧表或表格表达式(有时称为外部表)。 表示为 $left
JoinFlavor string 要执行的联接类型:inneruniqueinnerleftouterrightouterfullouterleftantirightantileftsemirightsemi。 默认为 innerunique。 有关联接风格的详细信息,请参阅返回结果
提示 string 零个或多个(以空格分隔)以 Name = Value 形式表示的联接提示,用于控制行匹配操作和执行计划的行为。 有关详细信息,请参阅提示
RightTable string ✔️ 要合并其行的右侧表或表格表达式(有时称为内部表)。 表示为 $right
条件 string ✔️ 确定 LeftTable 中的行如何与 RightTable 中的行匹配。 如果要匹配的列在这两个表中具有相同的名称,请使用 ON ColumnName 语法。 否则,请使用 ON $left.LeftColumn == $right.RightColumn 语法。 若要指定多个条件,可以使用“and”关键字,也可以使用逗号分隔它们。 如果使用逗号,则将使用“and”逻辑运算符来计算条件。

提示

为获得最佳性能,如果某个表始终小于另一个表,则将其用作 join 的左侧。

提示

提示键 说明
hint.remote auto, left, local, right 请参阅跨群集联接
hint.strategy=broadcast 指定在群集节点上共享查询负载的方式。 请参阅广播联接
hint.shufflekey=<key> shufflekey 查询使用键将数据分区,在群集节点上共享查询负载。 请参阅 shuffle 查询
hint.strategy=shuffle shuffle 策略查询会在群集节点上共享查询负载,其中的每个节点将处理一个数据分区。 请参阅 shuffle 查询
名称 说明
hint.remote auto, left, local, right
hint.strategy=broadcast 指定在群集节点上共享查询负载的方式。 请参阅广播联接
hint.shufflekey=<key> shufflekey 查询使用键将数据分区,在群集节点上共享查询负载。 请参阅 shuffle 查询
hint.strategy=shuffle shuffle 策略查询会在群集节点上共享查询负载,其中的每个节点将处理一个数据分区。 请参阅 shuffle 查询

注意

联接提示不会更改 join 的语义,但可能会影响性能。

返回

返回架构和行取决于联接风格。 联接风格是通过 kind 关键字指定的。 下表显示了受支持的联接风格。 若要查看特定联接风格的示例,请选择“联接风格”列中的链接。

联接风格 返回 图示
innerunique(默认) 执行左侧重复数据删除的内联
架构:两个表中的所有列,包括匹配的键
行:左表中与右表中的行匹配的行,其中已删除重复的行
inner 标准内联
架构:两个表中的所有列,包括匹配的键
行:仅限两个表中的匹配行
leftouter 左外部联接
架构:两个表中的所有列,包括匹配的键
行:左表中的所有记录,并且仅匹配右表中的行
rightouter 右外部联接
架构:两个表中的所有列,包括匹配的键
行:右表中的所有记录,并且仅匹配左表中的行
fullouter 完全外联
架构:两个表中的所有列,包括匹配的键
行:两个表中的所有记录,其中不匹配的单元格填充为 null
leftsemi 左半联
架构:左表中的所有列
行:左表中所有与右表中记录相匹配的记录
leftanti, anti, leftantisemi 左反联接和半变体
架构:左表中的所有列
行:左表中所有与右表中记录不匹配的记录
rightsemi 右半联
架构:右表中的所有列
行:右表中所有与左表中记录相匹配的记录
rightanti, rightantisemi 右反联接和半变体
架构:右表中的所有列
行:右表中所有与左表中记录不匹配的记录

交叉联接

KQL 不提供交叉联接风格。 但是,你可使用占位符键方法实现交叉联接效果。

在以下示例中,占位符键被添加到两个表中,然后用于内部联接操作,从而有效实现类似交叉联接的行为:

X | extend placeholder=1 | join kind=inner (Y | extend placeholder=1) on placeholder