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

如何用KQL从JSON对象数组提取指定key的value并设置默认值

高效提取JSON数组中指定Key对应的Value(Kusto查询)

针对百万级行数据的性能需求,推荐使用array_to_bag矢量函数实现,避免行级遍历的性能损耗:

解决方案查询语句

datatable(d:dynamic)
[
    dynamic({
        "Details":[
            {"value":"Dave","key":"Name"},
            {"value":"Male","key":"Gender"},
            {"value":"30","key":"Age"}
        ]
    }),
    dynamic({
        "Details":[
            {"value":"Dan","key":"Name"},
            {"value":"40","key":"Age"}
        ]
    }),
]
| extend details_bag = array_to_bag(d.Details, "key", "value")
| extend Gender = coalesce(details_bag["Gender"], "Undefined")
| project Gender

逻辑说明

  1. array_to_bag转换数组为键值对字典:
    这个函数是Kusto的矢量操作函数,直接对整个JSON数组批量转换,将[{"key":"X","value":"Y"}, ...]结构的数组转换成键值对形式的bag(类似字典),性能远高于行级展开的mv-apply/mv-extend,适合百万级大表场景。
    参数依次为:目标数组列、作为键的字段名、作为值的字段名。

  2. coalesce设置默认值:
    直接通过bag索引details_bag["Gender"]获取对应值,若该key不存在则返回null,coalesce会取第一个非空值,即返回预设的"Undefined"。

输出结果

Gender
------
Male
Undefined

额外注意

如果数组中存在重复的key,array_to_bag会保留最后一个出现的value,符合常规提取需求;若需处理重复key的特殊场景,可结合mv-apply做前置去重,但针对当前需求,array_to_bag是性能最优的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 22:40:06