Kusto查询动态传入列名作为参数的可行性及实现问题
Kusto 动态传入列名参数的解决方案
问题原因
你当前的写法存在两处问题:
- 代码中
['column']属于硬编码,实际是引用名为column的固定列,和你传入的column参数没有关联,无法实现动态指定列的效果 - 你写的调用示例仅传入了1个参数,不符合你定义的函数需要传入
timespan类型时间范围、string类型列名两个入参的要求
实现方法
Kusto 完全支持动态传入列名作为参数的需求,通过内置的column()函数即可实现,该函数接收字符串类型的列名参数,返回对应名称的列值。
修正后的可运行代码如下:
let foo = (duration: timespan, colName:string) { SigninLogs | where TimeGenerated >= ago(duration) | summarize totalPerCol = count() by column(colName) }; // 调用示例:统计最近7天按UserPrincipalName列分组的登录次数 foo(7d, 'UserPrincipalName')
注意事项
- 传入的列名必须和目标表中的实际列名完全匹配(大小写敏感),否则会返回空结果或者运行报错
- 如果需要给动态生成的分组列设置固定别名,可以在
summarize后增加重命名逻辑,示例:let foo = (duration: timespan, colName:string) { SigninLogs | where TimeGenerated >= ago(duration) | summarize totalPerCol = count() by column(colName) | extend 统计维度 = column(colName) | project-away column_colName // 移除默认生成的动态列名 }; - 该方法同样适用于
extend、where、project等其他算子的动态列引用场景
内容的提问来源于stack exchange,提问作者Razi
相关产品推荐
相关产品推荐

