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

是否有类似extend的行添加方法?Kusto数据表优化问询

Kusto 优化添加汇总行的查询方案

原始数据集

let DataSource = datatable(Name:string, value1:real, value2:real)
[
    'Section 1', 2211.47, 3564.05,
    'Transfer 1', 3075.44, 3717.51,
    'Transfer 2', 3460.66, 4194.16,
    'Transfer 3', 4819.36, 482.02,
    'Section 2', 1742.02, 11971.05
];

需求说明

  • 添加一行名称为Transfer的数据
  • value1取所有名称包含Transfer的行的value1之和
  • value2取所有名称包含Transfer的行的value2的平均值
  • 最终结果保留原始的非Transfer N行,加上新增的汇总行

当前实现方案

以下方案可实现需求,但处理大型数据集时,全表union再过滤的操作会带来额外CPU和内存开销:

let DataSource = datatable(Name:string, value1:real, value2:real)
[
    'Section 1', 2211.47, 3564.05,
    'Transfer 1', 3075.44, 3717.51,
    'Transfer 2', 3460.66, 4194.16,
    'Transfer 3', 4819.36, 482.02,
    'Section 2', 1742.02, 11971.05
];
DataSource
| as t1 
| union (t1 | summarize Name = "Transfer", value1 = sum(value1), value2 = sum(value2))
| where Name !in ("Transfer 1", "Transfer 2", "Transfer 3") 

优化方案

通过拆分数据处理分支,减少冗余扫描和计算,提升大数据量下的性能:

let DataSource = datatable(Name:string, value1:real, value2:real)
[
    'Section 1', 2211.47, 3564.05,
    'Transfer 1', 3075.44, 3717.51,
    'Transfer 2', 3460.66, 4194.16,
    'Transfer 3', 4819.36, 482.02,
    'Section 2', 1742.02, 11971.05
];
// 直接保留非Transfer开头的原始行
DataSource | where not(Name startswith "Transfer")
// 合并仅针对Transfer行计算出的汇总结果
| union (
    DataSource 
    | where Name startswith "Transfer" 
    | summarize Name = "Transfer", value1 = sum(value1), value2 = avg(value2)
)

优化点说明

  1. 减少数据扫描量:仅对原始数据集扫描一次,拆分出两个处理分支,避免原方案中全表union的冗余操作
  2. 精准过滤:用startswith(若命名规则为Transfer开头)或contains(若名称任意位置包含Transfer)精准定位需要汇总的行,减少不必要的计算
  3. 避免重复过滤:直接保留目标原始行,不需要先union再过滤掉Transfer N行,节省内存开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:11:04