KQL查询:相同key下仅数字值合并为列表,非数字值保留单独行
KQL 实现指定key合并数字类型value需求
实现逻辑
核心思路是先按key分组判断该组内的value是否全部为数字类型,再分逻辑处理:
- 标记每行value是否为数字(或可转换为数字的字符串)
- 统计每个key下非数字value的数量,作为是否需要聚合的判断依据
- 拆分两种处理逻辑后合并结果:key下无非数字value则聚合生成列表,否则保留原始单行数据
可运行示例代码
// 构造和示例一致的测试数据集 datatable(key:string, value:string) [ "location", "CA", "location", "LA", "code", "2", "code", "3", "IP", "192.143.204.19" ] // 标记当前行value是否为可转换的数字 | extend is_numeric = isnotnull(tolong(value)) // 窗口函数统计每个key下的非数字value总数 | extend non_numeric_count = countif(is_numeric == false) over (partition by key) // 分逻辑处理后合并结果 | union isfuzzy=true // 逻辑1:该key下所有value都是数字,聚合为列表 ( where non_numeric_count == 0 | summarize value = make_list(value) by key ), // 逻辑2:该key下存在非数字value,保留原始行不合并 ( where non_numeric_count > 0 | project key, value ) // 可选:按key排序和示例输出顺序对齐 | order by key asc
注意事项
如果你的数据集里value本身就是数值类型而非字符串存储,只需要把is_numeric的判断条件替换为typeof(value) in (long, int, double, decimal)即可。
如果同一key下同时存在数字和非数字value,数字部分也会和非数字一样保留单独行,不会合并,符合需求要求。
内容的提问来源于stack exchange,提问作者shani klein
相关产品推荐
相关产品推荐

