Hive中窗口函数和侧写函数详解
愿看到这的你能收获知识和一天的好心情,斗志昂扬的继续努力!!!
1、窗口函数
在hive中窗口函数是比较重要也是比较难理解的函数,窗口函数也叫开窗函数,意思为在数据上开一个窗来达到可以从一个大表中任何部分开始查询,而且想查几行就查几行,所以学会了窗口函数是很方便的,愿你在看到这篇文章后就学会了窗口函数!
OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化。
(四个参数)CURRENT ROW:当前行,n PRECEDING:往前n行数据,n FOLLOWING:往后n行数据,UNBOUNDED:无边界
UNBOUNDED PRECEDING 前无边界,表示从前面的起点,
UNBOUNDED FOLLOWING后无边界,表示到后面的终点
LAG(col,n,default_val):往前第n行数据
LEAD(col,n, default_val):往后第n行数据
FIRST_VALUE (col,true/false):当前窗口下的第一个值,第二个参数为true,跳过空值
LAST_VALUE (col,true/false):当前窗口下的最后一个值,第二个参数为true,跳过空值
NTILE(n):把有序窗口的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,NTILE返回此行所属的组的编号。注意:n必须为int类型。
窗口函数一般写在select中的最后一行,因为窗口函数是将前面的结果进行一次操作的函数。
2、侧写函数
侧写函数比较抽象,不易理解,但是他的格式固定,且形式比较简单,所以大家只要记住在什么需求下,什么情况下进行使用侧写函数即可。
LATERAL VIEW
用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias
解释:lateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。
lateral view首先为原始表的每行调用UDTF,UTDF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。
例:
原始数据
需求
代码实现
SELECT movie,category_name
FROM movie_info
lateral VIEW
explode(split(category,",")) movie_info_tmp AS category_name ;