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

如何在KQL查询中使用JSON数组中的值作为参数?

在Kusto中使用数组元素匹配记录的方法

方案1:先提取目标值集合,再匹配

先提取你需要的目标值数组,将其存储为变量,再用该变量过滤所有匹配记录:

// 提取目标值集合,去重并展开为单个值列表
let target_values = My_workspace
| where ArgumentOne == "ThisIsArgumentOne"
| project Data_Set_One
| summarize values = make_set(Data_Set_One)
| mv-expand values to typeof(string);

// 过滤包含任一目标值的记录
My_workspace
| where Data_Set_One has_any (target_values)

方案2:合并为单条查询(无需单独变量)

如果不想拆分查询,可以直接将提取逻辑嵌入过滤条件:

My_workspace
| where Data_Set_One has_any (
    My_workspace
    | where ArgumentOne == "ThisIsArgumentOne"
    | project Data_Set_One
    | summarize make_set(Data_Set_One)
    | mv-expand to typeof(string)
)

针对不同数据类型的适配

  • 如果Data_Set_One是字符串格式的数组(例如存储为 "[\"value1\",\"value2\"]"),需要先解析为dynamic类型再匹配:

    My_workspace
    | extend parsed_data = todynamic(Data_Set_One)
    | where parsed_data has_any (target_values)
    
  • 如果需要严格匹配数组元素(而非字符串包含),可以用数组交集判断:

    My_workspace
    | where array_length(array_intersect(todynamic(Data_Set_One), target_values)) > 0
    

关键函数说明

  • make_set():合并所有查询结果中的数组元素,生成无重复的集合
  • mv-expand:将集合展开为单个值的列表,用于后续匹配
  • has_any():检查目标字段(数组或字符串)是否包含列表中的任一值
  • array_intersect():计算两个数组的交集,通过交集长度判断是否存在匹配元素

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:12:49