You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Log Analytics中Kusto合并多行并按条件过滤的实现问题

解决方案

1. 修正合并行的Kusto查询

你之前用的any()函数会随机选取值,大概率拿到空值,所以导致trackedproperty2为空。可以用take_any_non_empty()替代(优先选取非空值),或者用max()(每个uniqueID对应属性只有一个非空值,max会直接取到该值),两种方式都能解决问题:

方法一:聚合函数直接取非空值

table
| summarize 
    trackedproperty1 = take_any_non_empty(trackedproperty1),
    trackedproperty2 = take_any_non_empty(trackedproperty2)
by uniqueID
| where toint(trackedproperty1) >= 25

方法二:自连接(和SQL思路对齐)

如果更习惯SQL的自连接写法,也可以拆分数据集后再关联:

// 提取trackedproperty1非空的行
let prop1_set = table | where isnotempty(trackedproperty1);
// 提取trackedproperty2非空的行
let prop2_set = table | where isnotempty(trackedproperty2);
// 按uniqueID做内连接
prop1_set
| join kind=inner prop2_set on uniqueID
| project uniqueID, trackedproperty1, trackedproperty2
| where toint(trackedproperty1) >= 25

2. 扩展:展开JSON格式的trackedproperty2

如果trackedproperty2是JSON字符串,先通过parse_json()转成动态对象,再根据JSON结构选择展开方式:

情况1:JSON为对象(如{"name":"test", "value":"123"})

用bag_unpack()直接展开为列:

table
| summarize 
    trackedproperty1 = take_any_non_empty(trackedproperty1),
    trackedproperty2 = take_any_non_empty(trackedproperty2)
by uniqueID
| where toint(trackedproperty1) >= 25
| extend json_obj = parse_json(trackedproperty2)
| evaluate bag_unpack(json_obj)

情况2:JSON为数组(如[{"item":"a"}, {"item":"b"}])

用mv-expand先展开数组元素,再拆分为列:

table
| summarize 
    trackedproperty1 = take_any_non_empty(trackedproperty1),
    trackedproperty2 = take_any_non_empty(trackedproperty2)
by uniqueID
| where toint(trackedproperty1) >= 25
| extend json_array = parse_json(trackedproperty2)
| mv-expand json_array
| evaluate bag_unpack(json_array)

注意:如果trackedproperty1存储为字符串类型,必须用toint()转换为数字后再做数值比较,避免类型错误。

内容的提问来源于stack exchange,提问作者TheDemonLord

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 10:33:24