Hive窗口函数

business表如下图所示:
Hive窗口函数
(1)查询在2017年4月份购买过的顾客及总人数

1)不用窗口函数
Hive窗口函数
Hive窗口函数
结果为1和4,并不是正确的答案。因为只有jack,mart两个人,所以正确的答案应该是2和2。

.2)使用窗口函数(注:over()函数要加在聚合函数的后面)
Hive窗口函数Hive窗口函数
3)若不分组使用窗口函数结果如下:
Hive窗口函数
Hive窗口函数
(2)查询顾客的购买明细及购买总额
Hive窗口函数
Hive窗口函数
(3)查询顾客的购买明细及月购买总额
Hive窗口函数
Hive窗口函数
(4)上述的场景,要将cost按照日期进行累加

1)不用窗口函数
Hive窗口函数
Hive窗口函数
发现只是当日的cost,并未进行累加

2)使用窗口函数
Hive窗口函数
Hive窗口函数
(5)上述的场景,要将cost按照每个人分类进行累加
Hive窗口函数
思路正确,但语法上不支持,group不能用在over()中。可以用distribute by
Hive窗口函数Hive窗口函数
(6)上述的场景,要将cost按照每个人和日期进行累加(distribute by与sort by连用而不是order by)
Hive窗口函数
Hive窗口函数
(7)查看顾客上次的购买时间
Hive窗口函数
Hive窗口函数
LAG(col,n):往前第n行数据
LEAD(col,n):往后第n行数据

(8)查询前20%时间的订单信息
Hive窗口函数
Hive窗口函数
NTILE(n):把有序分区中的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,NTILE返回此行所属的组的编号。注意:n必须为int类型。