如何将数组型JSON解析为对应数量的列并自动适配数据?
解决方案(Kusto Query Language)
假设你的表名为MyTable,存储JSON数组的字段名为AppsJson,可以用以下查询实现需求:
MyTable | extend AppsArray = parse_json(AppsJson) | extend AppsBag = make_bag(pack(item.name, item.value) for item in AppsArray) | evaluate bag_unpack(AppsBag) | project-away AppsJson, AppsArray, AppsBag
步骤说明
- parse_json(AppsJson):将字符串类型的JSON数组转换为Kusto可识别的动态数组类型
- make_bag(pack(...)):遍历数组中的每个应用项,用
pack把每个项的name作为列名、value作为对应值打包成小字典,再通过make_bag合并成一个完整的属性包 - evaluate bag_unpack(AppsBag):自动将属性包中的每个键(即应用名称)转为列,对应的值填充到单元格中,适配任意数量的应用项
- project-away:移除过程中生成的临时辅助列
为什么mv-expand没生效?
mv-expand的作用是将数组的每个元素拆分为单独的行,而你需要的是将元素转为列,所以需要先把数组聚合为属性包,再拆分成列,而不是拆分行。
内容的提问来源于stack exchange,提问作者Pierrot
相关产品推荐
相关产品推荐

