如何使用KQL验证子对象数组中存在指定属性值且不使用contains关键字
Kusto 精确过滤policies数组方案
核心逻辑
原始数据中的policies字段为JSON序列化字符串,先转换为动态类型后展开数组,通过精确等于匹配筛选符合要求的元素,全程不使用contains关键字。
方案1:展开后返回匹配记录(关联原始字段)
// 请替换为实际表名 YourTable // 转换字符串格式的policies为动态JSON数组 | extend policies = parse_json(policies) // 展开数组为单个policy对象 | mv-expand single_policy = policies // 精确匹配policyDefinitionId,替换为目标值 | where single_policy.policyDefinitionId == "你需要匹配的具体policyDefinitionId值" // 自定义输出字段,可按需调整 | project eventDataId, subscriptionId, resourceGroup, resourceName = resource, matched_policy = single_policy
方案2:保留原始结构,仅过滤policies数组
如果需要保留原对象的所有字段,仅将policies数组替换为仅符合条件的元素,使用mv-apply实现:
YourTable | extend policies = parse_json(policies) | mv-apply policy_item = policies on ( where policy_item.policyDefinitionId == "目标policyDefinitionId值" | summarize filtered_policies = make_list(policy_item) ) // 过滤掉没有匹配项的记录,不需要可删除此行 | where array_length(filtered_policies) > 0 // 替换原policies字段为过滤后的结果 | project-away policies | project-rename policies = filtered_policies
方案3:仅返回匹配的policy元素本身
如果不需要原记录的其他字段,仅要符合条件的policy对象:
YourTable | extend policies = parse_json(policies) | mv-expand policies | where policies.policyDefinitionId == "目标值" | project policies
内容的提问来源于stack exchange,提问作者Gregory Suvalian
相关产品推荐
相关产品推荐

