如何在Kusto查询语言中提取JSON数组指定属性的所有值
问题描述
现有表格包含OrgId、OrgName及动态JSON数组列DProducts,示例输入如下:
OrgId, OrgName, DProducts (dynamic) 581, ABC, [{"Id":"123","Name":"abc","PlanId":"af3"},{"Id":"234","Name":"bcd","PlanId":"aee3"}] 582, ABCD, [{"Id":"12345","Name":"abcfg","PlanId":"afg3"},{"Id":"234","Name":"bcd","PlanId":"aee3"}] 583, CDEF, []
需要提取每个机构对应的所有Name属性值组成新数组,期望输出格式如下:
OrgId, OrgName, DProducts_name 581, ABC, ["abc" , "bcd"] 582, ABCD, ["abcfg" , "bcd"] 583, CDEF, []
尝试过以下Kusto查询,但会将每个Name值展开为单独行,不符合预期:
| mv-expand DProducts | project OrgId, OrgName,DProducts["Name"]
解决方案
可以通过两种方式实现需求:
方法1:使用array_map函数(推荐,更简洁)
直接遍历DProducts数组,提取每个元素的Name字段生成新数组:
| project OrgId, OrgName, DProducts_name = array_map(p => p.Name, DProducts)
方法2:使用mv-apply结合summarize
先将数组元素展开,再按机构聚合生成Name数组:
| mv-apply DProducts on ( project Name = DProducts.Name ) | summarize DProducts_name = make_list(Name) by OrgId, OrgName
两种方法都能保留原有的机构行,同时生成包含所有Name值的数组列,其中方法1性能更优,适合处理大规模数据。
内容的提问来源于stack exchange,提问作者sambe
相关产品推荐
相关产品推荐

