Kusto映射遍历dynamic数组返回表而非动态数组问题咨询
Kusto dynamic数组映射遍历实现方案
原有实现的问题
自定义函数中使用range+summarize的管道逻辑默认返回单列表结构,而非标量dynamic类型数组,不符合调用预期。原有实现代码如下:
let ArrayMap = (arr: dynamic) { range x from 0 to array_length(arr) - 1 step 1 | summarize x = make_list(strcat('--', arr[x], '--')) }; ArrayMap(dynamic(["a", "b", "c"]))
推荐方案:使用内置array_map函数
当前Kusto已原生提供array_map高阶函数,可直接对数组元素做遍历映射,无需自行实现索引遍历逻辑,返回结果直接为dynamic类型数组。lambda表达式内可编写任意符合Kusto语法的元素处理逻辑,支持类型判断、数值计算、字符串处理等各类操作。
示例代码:
// 直接调用内置函数实现元素前后拼接--的需求 print mapped_result = array_map((elem) { strcat("--", elem, "--") }, dynamic(["a", "b", "c"]))
执行后返回的mapped_result值为dynamic(["--a--", "--b--", "--c--"]),为标准标量数组值,可直接在后续逻辑中引用。
兼容方案:修正自定义函数
若所在集群版本较低不支持array_map,可在原有自定义函数逻辑外层增加toscalar()函数,将表格返回结果转换为标量值,修改后代码如下:
let ArrayMap = (arr: dynamic) { toscalar( range x from 0 to array_length(arr) - 1 step 1 | summarize make_list(strcat('--', arr[x], '--')) ) }; // 调用示例 print result = ArrayMap(dynamic(["a", "b", "c"]))
注意:自定义实现中不要给make_list生成的列设置与range索引变量同名的别名,避免出现变量引用歧义。
内容的提问来源于stack exchange,提问作者codingedward
相关产品推荐
相关产品推荐

