Hive窗口函数
business表如下图所示:
(1)查询在2017年4月份购买过的顾客及总人数
1)不用窗口函数
结果为1和4,并不是正确的答案。因为只有jack,mart两个人,所以正确的答案应该是2和2。
.2)使用窗口函数(注:over()函数要加在聚合函数的后面)
3)若不分组使用窗口函数结果如下:
(2)查询顾客的购买明细及购买总额
(3)查询顾客的购买明细及月购买总额
(4)上述的场景,要将cost按照日期进行累加
1)不用窗口函数
发现只是当日的cost,并未进行累加
2)使用窗口函数
(5)上述的场景,要将cost按照每个人分类进行累加
思路正确,但语法上不支持,group不能用在over()中。可以用distribute by
(6)上述的场景,要将cost按照每个人和日期进行累加(distribute by与sort by连用而不是order by)
(7)查看顾客上次的购买时间
LAG(col,n):往前第n行数据
LEAD(col,n):往后第n行数据
(8)查询前20%时间的订单信息
NTILE(n):把有序分区中的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,NTILE返回此行所属的组的编号。注意:n必须为int类型。