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

KQL中如何将数值直接转换为dynamic类型?解决类型不匹配问题

在ADX中将指定数值转换为对应类型的dynamic值

已知在ADX中执行如下查询时,打包后的dynamic值里所有数值均为real类型:

datatable(
    id: int,
    label: string, 
    value: real
)[
    1, 'x', 1.0, 
    1, 'y', 1.1,
]
| extend bag = bag_pack(label, value)
| summarize make_bag(bag) by id

返回的bag_bag为{"x":1.0,"y":1.1}(可通过追加| extend dynamic_to_json(bag_bag)查看原始类型)。

需要将label为"x"的value转换为int类型后再打包,但直接使用iff()会因类型不匹配报错,使用todynamic()(已弃用的parse_json()别名)也因参数类型要求无法实现。


方案1:通过parse_json()结合字符串转换实现

利用parse_json()可将字符串解析为对应类型dynamic值的特性,先将数值转为字符串再解析:

datatable(
    id: int,
    label: string, 
    value: real
)[
    1, 'x', 1.0, 
    1, 'y', 1.1,
]
| extend bag = bag_pack(
    label, 
    parse_json(
        iff(
            label == "x",
            tostring(toint(value)), // 将x的value转为int后再转字符串
            tostring(value)          // 其他value直接转字符串
        )
    )
)
| summarize make_bag(bag) by id
| extend dynamic_to_json(bag_bag) // 查看最终dynamic的原始JSON格式

执行后dynamic_to_json(bag_bag)会返回{"x":1,"y":1.1},其中"x"对应的值为int类型,"y"为real类型。

方案2:拆分处理后合并Bag

将x和其他标签的Bag分开构造,再合并为最终Bag:

datatable(
    id: int,
    label: string, 
    value: real
)[
    1, 'x', 1.0, 
    1, 'y', 1.1,
]
| extend 
    x_bag = iff(label == "x", bag_pack(label, toint(value)), dynamic({})),
    other_bag = iff(label != "x", bag_pack(label, value), dynamic({}))
| summarize 
    x_combined = make_bag(x_bag),
    other_combined = make_bag(other_bag) by id
| extend bag_bag = bag_merge(x_combined, other_combined)
| extend dynamic_to_json(bag_bag)

此方法通过分别构造不同类型的Bag,再用bag_merge()合并,同样能得到{"x":1,"y":1.1}的结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:56:26