一、窗口函数与分析函数
通常在聚合函数后面加over函数限制窗口统计的规则及行数
语法:
over(partition by xxx order by xxx rows between xxx** and **xxx)
- partition by :分组统计字段
- order by:排序字典
- window子句 :rows between 起点(默认是首行) and 终点(默认当前行)
起点选择:
n preceding:往前n条
unbounded:起点
unbounded preceding:从前面的起点开始
终点选择:
n following:往后n条
current row:当前行
unbounded following:表示到后面的终点结束
1、窗口排序函数
row_number() over():按顺序生成排序值,当排序 相同时,按表中记录值排序,不存在相同的排序值。
rank() over():排名相等会在名次中留下空位
dense_rank() over():排名相等会在名次中不会留下空位
2、窗口取上下值函数
lag (col,n,DEFAULT) over() :用于统计窗口内往上第n行值
lead (col,n,DEFAULT) over() : 用于统计窗口内往下第n行值
第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)
3、窗口内取第一个和最后一个值
first_value(col) over() : 取分组内排序后,截止到当前行,第一个值
last_value(col) over() : 取分组内排序后,截止到当前行,最后一个值
4、窗口聚合函数
sum(col) over()
max(col) over()
min(col) over()
avg(col) over()
二、lateral view 与 explode函数结合用法
explode就是将hive一行中复杂的array或者map结构拆分成多行。
lateral view与explode结合使用把结果组合,产生一个支持别名表的虚拟表。
select
tdbank_imp_date