KQL 将数字转换为动态

问题描述 投票:0回答:1

我需要将一些数字数据直接转换为

dynamic
。考虑以下情况

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
id 袋_袋
1 {"x":1.0,"y":1.1}

*请注意:如果您从 ADX Web UI 访问此内容,则会对存储的

dynamic
值进行调整以进行显示。添加
| extend dynamic_to_json(bag_bag)
to compare

我知道

x
值始终是整数,我想在打包之前将其转换为整数。然而,
iff()
函数要求两个表达式具有相同的显式类型。因此,以下表达式...

| extend bag = bag_pack(
    label, 
    iff(
        label == "x",
        toint(value),
        value
    )
)

...失败...

调用 iff():@then 数据类型 (int) 必须与 @else 数据类型 (real) 匹配

...以及明显的解决方法...

| extend bag = bag_pack(
    label, 
    iff(
        label == "x",
        todynamic(toint(value)),
        todynamic(value)
    )
)

...失败...

todynamic():参数 #1 应该是字符串表达式

todynamic()
parse_json()
的已弃用别名,而不是
tostring()
/
toint()
/等函数组的一部分;并且不适合此目的。是否有另一种解决方法可以用来将我的数字直接转换为
dynamic

type-conversion kql azure-data-explorer
1个回答
0
投票

我知道

x
值始终是整数,我想在打包之前将其转换为整数。

我已经在我的环境中重现了,以下是我的预期结果:

The KQL query which worked for me:

datatable(
    id: int,
    label1: string, 
    value: real
)[
    2, 'x', 2.0, 
    2, 'y', 2.1,
]
| extend bag = bag_pack(
    label1, 
    parse_json(
        iff(
            label1 == "x",
            todynamic(tostring(toint(value))),
            todynamic(tostring(value))
        )
    )
)
| summarize make_bag(bag) by id

Output:

enter image description here

小提琴。

© www.soinside.com 2019 - 2024. All rights reserved.