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

Hive窗口函数unbounded preceding搭配current row与unbounded following的差异

Hive两类窗口边界定义的执行差异

代码示例

场景1:边界到当前行

from groceries
select id, revenue, day, sum(revenue)
over ( order by id rows between unbounded preceding and current row)

场景2:边界到全分区首尾

from groceries
select id, revenue, day, sum(revenue)
over ( order by id rows between unbounded preceding and unbounded following)

核心执行逻辑差异

两者的本质区别是窗口计算的生效范围不同:

  • 场景1的rows between unbounded preceding and current row:窗口范围为当前分区的第一行数据到当前正在计算的行,每一行执行sum计算时,仅统计当前行及之前所有行的revenue值。语句中的order by id会先将数据集按id升序排序,再逐行执行累计计算。
  • 场景2的rows between unbounded preceding and unbounded following:窗口范围覆盖当前分区的所有行,无论计算到哪一行,sum统计的都是整个分区内所有revenue的总和。这里的order by id仅会影响最终结果的排序,不会改变求和的统计范围。

如果over子句中额外添加了partition by分组字段,上述逻辑会在每个分组内部独立生效。

返回结果差异

我们用3行示例数据做对比:

idrevenueday
1101
2202
3303
  • 场景1返回的是累计求和结果:三行对应的sum值分别为10、30、60,数值随id增大逐步递增,最后一行的sum值等于全表revenue总和。
  • 场景2返回的是全分区求和结果:三行对应的sum值均为60,所有行的计算结果完全相同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:54:03