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

如何在KQL中将数组多值提取至不同行并生成对应DateTimeKey?

解决方案

可以通过结合mv-apply、range和数组索引实现一次性展开所有数据点并生成对应时间键,以下是完整的Kusto查询:

datatable(T:dynamic)
[
    dynamic
    (
        {
            "name": "Temperature",
            "startTimestamp": "2022-12-14T08:00:00.0000000Z",
            "signals": [
                {
                    "name": "Temperature_inside",
                    "values": [
                        "17.1",
                        "17.5",
                        "17.8",
                        "17.9"
                    ]
                },
                {
                    "name": "Temperature_outside",
                                "values": [
                        "1.3",
                        "1.4",
                        "1.4",
                        "1.5"
                    ]
                }
            ]
        }
    )
]
| extend start_time = todatetime(T.startTimestamp), signals = T.signals
| mv-apply idx = range(0, array_length(signals[0].values)-1, 1) on (
    summarize 
        event_time = start_time + idx * 15m,
        temperature_bag = make_bag(
            bag_pack(
                tostring(signals[*].name), 
                todouble(signals[*].values[idx])
            )
        )
)
| evaluate bag_unpack(temperature_bag)
| extend DateTimeKey = format_datetime(event_time, 'yyyyMMddhhmmss')
| project DateTimeKey, Temperature_inside, Temperature_outside

关键步骤说明:

  1. 解析起始时间:将字符串格式的startTimestamp转换为datetime类型,方便后续时间计算,同时提取信号列表。
  2. 生成数据点索引:利用range生成与values数组长度匹配的索引序列(0到3),通过mv-apply遍历每个索引。
  3. 计算对应时间与打包数据:对每个索引,计算该数据点的实际时间(起始时间 + 索引×15分钟),并将每个温度传感器的名称与对应索引的数值打包成bag。
  4. 展开与格式化:用bag_unpack将bag展开为单独的列,再将计算出的时间格式化为需要的数值型DateTimeKey。
  5. 整理输出:调整列顺序,得到目标结果。

运行该查询后,就能直接得到期望的4行数据,无需多次执行查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:35:20