场景
传统的SQL语句并不能支持诸如分组排名、滑动平均值等计算,GROUP BY语句只能为每个分组的数据返回一行结果,而非每条数据一行。新版的SQL标准引入了窗口查询功能,使用WINDOW语句我们可以基于分区和窗口为每条数据都生成一行结果记录,这一标准也已得到了Hive的支持。窗口查询可应用在以下但不限于以下场景:
- 计算分组内TOP k
- 计算分组内排序
- 滑动窗口相关计算(滑动平均数等)
- 计算累计分布
- …
窗口定义
基本结构
从一个实际的sql入手
SELECT
`date`, `stock`, `close`
,AVG(`close`) OVER `w` AS `mavg`
FROM `t_stock`
WINDOW `w` AS (PARTITION BY `stock` ORDER BY `date` ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)
-- 或者
SELECT
`date`, `stock`, `close`
,AVG(`close`) OVER (PARTITION BY `stock` ORDER BY `date` ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS `mavg`
FROM `t_stock`
其中(PARTITION BY `stock` ORDER BY `date` ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)是窗口的定义子句。
概念
窗口定义涉及了三个概念:窗口分区、窗口帧、以及窗口函数。


本文介绍了Hive中的窗口查询功能,用于解决传统SQL无法处理的分组排名、滑动平均值等问题。文章详细讲解了窗口定义,包括窗口分区、窗口帧及其类型,并通过实例展示了窗口函数的应用,如计算分组内TOP k、滑动平均数和累计分布。此外,还提到了Hive的窗口函数,如聚合和分析函数。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



