本文部分参考自:https://blog.csdn.net/qq_23897391/article/details/100558433
Hive第六天——Hive函数
自己的话:千里之行,始于足下。
每天都要保持前进,我势必要有强劲的实力,再跟明天的自己问好。
开窗函数:累计统计
这类函数叫法很多,包括分析函数、窗口函数、开窗函数、分析窗口函数,其实说的都是一类函数
一、开窗函数简介
开窗函数用于为行定义一个窗口(这里的窗口是指运算将要操作的行的集合),它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。
二、开窗函数语法
1.开窗函数的语法为:
-
over(partition by 列名1,列名2 …… order by 列名3,列名4 …… [desc])
-
括号中的两个关键词partition by 和order by 可以只出现一个。
-
partition by 和order by 后面的列名可以根据需求设定任意数量个列名。
-
order by后面可以选择是否跟desc,加上为倒序排序(从大到小),不加则默认为从小到大排序。
-
over() 前面是一个函数。
2.分段解析:
sum(columns) over (partition by col1 order by col2 rows between n/unbounded preceding and m following/current row )
如果不指定rows between,默认为从起点到当前行;
如果不指定order by,则将分组内所有值累加;
关键是理解rows between含义,也叫做window子句:
- preceding:往前
- following:往后
- current rows:当前行
- unbounded:起点
- unbounded preceding:表示从前面的起点
- unbounded following:表示到后面的终点
三、开窗函数分类
在Hive中开窗函数按功能主要分为以下四类:
- 组内累计统计
- 组内排序
- 组内层次查询
- 组内偏移关联
四、组内累计统计开窗函数
Hive中提供了很多分析函数,用于完成负责的统计分析。先看看基础的sum,avg,min,max,用于实现分组内所有和连续累计的统计。
数据准备:
新建test.txt文件,输入如下的三列数据,以空格分隔。第一列是月份,第二列代表商铺名称,第三列代表该商铺该月营业额(万元)。
[root@hadoop ~]# vim test.txt
2019-01 a 10
2019-02 a 20
2019-03 a 30
2019-01 b 10
2019-02 b 20
2019