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

跨群集联接

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

跨群集联接涉及联接驻留在不同群集中的数据集中的数据。

在跨群集联接中,可以在三个可能的位置执行查询,每个位置都有一个特定的指定,供整个文档参考:

  • 本地群集:请求发送到的群集,也称为在上下文中托管数据库的群集。
  • 左群集:在联接操作左侧托管数据的群集。
  • 右群集:在联接操作右侧托管数据的群集。

运行查询的群集从另一个群集中提取数据。

注意

如果联接操作左侧和右侧的数据托管在同一群集中,则不会将其视为跨群集联接,即使数据托管在本地群集外部也是如此。

语法

[ cluster(ClusterName).database(DatabaseName).]LeftTable | ...
| join [ hint.remote=策略 ] (
  [ cluster(ClusterName).database(DatabaseName).]RightTable | ...
) on Conditions

详细了解语法约定

参数

客户 类型​​ 必需 说明
LeftTable string ✔️ 要合并其行的左侧表或表格表达式。 表示为 $left
策略 string 确定要对其执行联接的群集。 支持的值为 leftrightlocalauto。 有关详细信息,请参阅策略
ClusterName string 如果联接的数据驻留在本地群集外部,请使用 cluster() 函数指定群集。
DatabaseName string 如果联接的数据驻留在本地数据库上下文外部,请使用 database() 函数指定数据库。
RightTable string ✔️ 要合并其行的右侧表或表格表达式。 表示为 $right
条件 string ✔️ 确定 LeftTable 中的行如何与 RightTable 中的行匹配。 如果要匹配的列在这两个表中具有相同的名称,请使用 ON ColumnName 语法。 否则,请使用 ON $left.LeftColumn ==RightColumn 语法。$right. 若要指定多个条件,可以使用“and”关键字,也可以使用逗号分隔它们。 如果使用逗号,则将使用“and”逻辑运算符来计算条件。

策略

以下列表说明了 Strategy 参数支持的值:

  • left:在左侧表的群集或左侧群集上执行联接。
  • right:在右侧表的群集或右侧群集上执行联接。
  • local:在当前群集的群集或本地群集上执行联接。
  • auto:(默认)Kusto 做出远程处理决策。

注意

如果提示的策略不适用于联接操作,则将忽略联接远程处理提示。

auto 策略的工作原理

默认情况下,auto 策略根据以下规则确定跨群集联接的执行位置:

  • 如果其中一个表托管在本地群集中,则在本地群集上执行联接。 例如,使用自动策略,此查询在本地群集上执行:

    T | ... | join (cluster("B").database("DB").T2 | ...) on Col1
    
  • 如果两个表都托管在本地群集外部,则在右侧群集上执行联接。 例如,假设两个群集都不是本地群集,则会在正确的群集上执行联接:

    cluster("B").database("DB").T | ... | join (cluster("C").database("DB2").T2 | ...) on Col1
    

性能注意事项

为了获得最佳性能,我们建议在包含最大表的群集上运行查询。

在以下示例中,如果 T | ... 生成的数据集小于 cluster("B").database("DB").T2 | ... 生成的数据集,则在群集 B上执行联接操作会更有效,在这种情况下,正确的群集而不是本地群集。

T | ... | join (cluster("B").database("DB").T2 | ...) on Col1

可以重写查询以使用 hint.remote=right 来优化性能。 这样,即使左表位于本地群集中,联接操作也会在右侧群集上执行。

T | ... | join hint.remote=right (cluster("B").database("DB").T2 | ...) on Col1