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

如何编写Kusto查询按时间聚合并动态合并多行列数据?

Kusto动态转置查询方案

针对你需要按Time聚合,动态将不同id的p90/p95/p99指标转为列的需求,推荐两种简洁的实现方式:

方法一:使用pivot运算符(推荐)

pivot是Kusto专门用于行转列的运算符,支持动态生成列,无需硬编码id值:

let raw = datatable(id:string, Time:string, p90:long, p95:long, p99:long)
[
    "A", "2025-01-06", 38, 124, 156,
    "B", "2025-01-06", 66, 120, 130,
    "A", "2025-01-13", 55, 99, 150, 
    "B", "2025-01-13", 77, 100, 130, 
];
raw
| pivot id, take_any(p90), take_any(p95), take_any(p99)

说明:

  • pivot id:指定以id列作为行转列的依据
  • take_any(p90):因为每个Time+id组合仅有一行数据,用take_any直接取对应指标值即可(也可替换为any)
  • 当新增id(如C、D)时,查询会自动生成C_p90/C_p95/C_p99等列,无需修改代码

方法二:使用字典打包+展开

通过将指标打包为动态字典,聚合后再展开为列,同样支持动态id:

let raw = datatable(id:string, Time:string, p90:long, p95:long, p99:long)
[
    "A", "2025-01-06", 38, 124, 156,
    "B", "2025-01-06", 66, 120, 130,
    "A", "2025-01-13", 55, 99, 150, 
    "B", "2025-01-13", 77, 100, 130, 
];
raw
| extend metrics = pack(strcat(id, "_p90"), p90, strcat(id, "_p95"), p95, strcat(id, "_p99"), p99)
| summarize metrics = bag_merge(make_bag(metrics)) by Time
| evaluate bag_unpack(metrics)
| project Time, *

说明:

  1. extend metrics = pack(...):为每行生成字典,键为{id}_p90格式,值为对应指标
  2. summarize ... by Time:按Time聚合,合并同一时间点的所有指标字典
  3. evaluate bag_unpack(metrics):将字典的键值对展开为独立列
  4. project Time, *:将Time列置于最前面

两种方法都能输出你需要的格式,且适配动态变化的id值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:22:38