实现函数是否不适用于 Kusto 中的表格函数参数?

Does materialize function not work with tabular function argument in Kusto?

我在下面创建了一个简单的函数 MaterializeRemoteInputTable,它接受 table 的输出作为输入。 为了测试输入是否具体化,我使用它两次来计算两个标量值 - x 和 y:

.create-or-alter function MaterializeRemoteInputTable(inputTable: (State:string)) {
let materializedInput = materialize(inputTable);
let x = toscalar(materializedInput | count );
let y = toscalar(materializedInput | where State contains "S" | count);
print x, y;
}

我正在使用示例 kusto 数据库的函数输出作为上述函数的输入:

cluster('https://help.kusto.windows.net').database('Samples').
GetStatesWithPopulationSmallerThan(1000000)
| invoke MaterializeRemoteInputTable()

在使用我的 ClientActivityId 查询 help.kusto.windows.net 集群时,我看到执行了两个查询:

.show commands-and-queries 
| where ClientActivityId contains "KE.RunQuery;<guid...>"

Above query outputs two rows:

GetStatesWithPopulationSmallerThan(long(1000000))|__executeAndCache|count as Count|limit long(1)|project ["b2fb..."]=["Count"]
GetStatesWithPopulationSmallerThan(long(1000000))|__executeAndCache|where (["State"] contains ("S"))|count as Count|limit long(1)|project ["5d0e2..."]=["Count"]

既然我已经将输入具体化到我的 MaterializeRemoteInputTable,为什么要在远程集群上执行两个查询,x 和 y 各执行一次?

函数的具体化和表格参数没有问题。 该问题是使用跨集群查询实现的已知限制,在某些情况下不执行实现。 请注意,这只是性能问题,不是逻辑问题(保证查询结果正确)。