通过


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

优化使用命名表达式的查询

使用 “版本 ”下拉列表切换服务。 了解有关导航的详细信息
适用于: ✅ Microsoft Fabric ✅ Azure 数据资源管理器 ✅ Azure Monitor ✅ Microsoft Sentinel

本文讨论如何在查询中优化命名表达式的重复使用。

在 Kusto 查询语言中,可以通过多种不同的方式将名称绑定到复杂表达式:

在查询中引用这些命名表达式时,将执行以下步骤:

  1. 计算命名表达式中的计算。 此计算生成标量或表格值。
  2. 命名表达式将替换为计算值。

如果多次使用同一绑定名称,则基础计算将多次重复。 这何时是个问题?

  • 当计算消耗许多资源并多次使用时。
  • 当计算是不确定的,但查询假定所有调用都返回相同的值。

缓解措施

若要缓解这些问题,可以在查询期间将计算结果具体化到内存中。 根据定义命名计算的方式,你将使用不同的具体化策略:

表格函数

对表格函数使用以下策略:

  • let 语句和函数参数:使用 materialize() 函数。
  • as 运算符:将 hint.materialized 提示值设置为 true.

例如,以下查询使用非确定性表格 示例运算符

注释

表不一般排序,因此查询中的任何表引用都是按定义确定性的。

不使用具体化函数的行为

range x from 1 to 100 step 1
| sample 1
| as T
| union T

输出

x
63
92

使用具体化函数的行为

range x from 1 to 100 step 1
| sample 1
| as hint.materialized=true T
| union T

输出

x
95
95

标量函数

使用 toscalar()可以强制非确定性标量函数精确计算一次。

例如,以下查询使用非确定性函数 rand()

let x = () {rand(1000)};
let y = () {toscalar(rand(1000))};
print x, x, y, y

输出

print_0 print_1 print_2 print_3
166 137 70 70