官方文档:LanguageManual WindowingAndAnalytics - Apache Hive - Apache Software Foundation
先看看
对于窗口函数,最重要的是理解窗口是怎么被选择的,窗口的选择范围是在over内定义的的,包含三部分:
总结下来就是,partition by确定池子有多大,order by和窗口子句确定怎么在这个池子里捞鱼
1. partition by,确定窗口范围,不写的话,就是全部行,全部行作为一个分区
2. order by,有2个功能,第1个是排序;第2个是没有窗口子句的时候,指定了 ORDER BY,默认使用分区内第一行到当前值,但是操作的列出现相同值,结果就会相同,但是单独指定窗口子句的话就不会出现相同值,见sum() sample3和sample4。如果指定了窗口子句,order by的窗口子句功能就失效了
2.1.有 partition by,则分区内排序
2.2.没有 partition by,则全部数据排序
3. 窗口子句,单独定义窗口;
如果不指定窗口子句,则默认采用以下的窗口定义:
3.1. 若不指定 ORDER BY,默认使用分区内所有行
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.
3.2. 若指定了 ORDER BY,默认使用分区内第一行到当前值
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.
窗口函数执行顺序

窗口函数在group by聚合之后,因此可以将数据先去重,再使用窗口函数
1. 排序
第一个括号内参数说明:无参数

最低0.47元/天 解锁文章
4814

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



