如何在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
相关产品推荐
相关产品推荐

