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

跨群集联接

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

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

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

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

注意

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

语法

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

详细了解语法约定

参数

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

策略

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

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

注意

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

auto 策略的工作原理

默认情况下,auto 策略应根据以下规则确定在何处执行跨群集联接:

  • 如果其中一个表托管在本地群集中,则在本地群集上执行联接。
  • 如果两个表都托管在本地群集外部,则在右侧群集上执行联接。

请开考虑以下示例:

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

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

使用 auto 策略时,“示例 1”将在本地群集上执行。 在“示例 2”中,假设两个群集都不是本地群集,则将在右侧群集上执行联接。

性能注意事项

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

让我们再次考虑以下示例:

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

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

“示例 1”设置为在本地群集上运行,但如果 T | ... 生成的数据集小于 cluster("B").database("DB").T2 | ... 生成的数据集,则在群集 B(在这种情况下为右侧群集)上执行联接操作会比在本地群集上更高效。

以下查询使用 right 策略执行此操作。 使用 right 策略时,即使左侧表位于本地群集中,也会在右侧群集上执行联接操作。

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

Azure Monitor 不支持此功能