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

如何在Kusto中定义任意大小窗口实现通用聚合查询

实现方法

不需要重复调用prev()函数,直接使用Kusto原生支持的窗口聚合语法即可实现任意大小的滑动行窗口计算,性能远高于堆叠prev()的写法,且调整窗口大小只需要修改单个参数。
对应计算按时间升序排列后,当前行前100行Value字段最大值的查询写法如下:

mytable
| sort by Time asc
| extend prev_100_max = max(Value) over (rows between 100 preceding and 1 preceding)

语法说明

  • 窗口范围通过rows between 起始边界 and 结束边界定义:
    • 100 preceding代表窗口起始位置是当前行往前数第100行
    • 1 preceding代表窗口结束位置是当前行的前1行,完全匹配“取当前行之前100行数据”的需求
  • 数据集开头不足100行的边界场景会被自动处理:比如当前行是第20行,窗口会自动取第1行到第19行的所有数据计算最大值,不需要额外写边界判断逻辑。
  • 如果要调整窗口大小,只需要修改preceding前的数字即可,比如要对齐你原来示例里取前3行最大值的逻辑,只需要把范围改成rows between 3 preceding and 1 preceding,和原来写3次prev()的计算结果完全一致。

如果需要按指定维度分组计算滑动窗口(比如按设备ID分组,单独统计每个设备自身的前100行最大值),只需要在over子句中增加partition by分组字段即可,示例:

| extend prev_100_max = max(Value) over (partition by DeviceId rows between 100 preceding and 1 preceding)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:51:22