hive窗口函数使用

今天遇到一个问题, 对用户操作信息表,搜索出每个用户的最近10条操作信息,注意:1、最近,也就是按照时间倒排,取出前2条;2、每个用户。

左思右想,实在找不到好办法,后来请教大师,天空飘来五个字儿---使用窗函数。

select * from ( select user_id , time , rank() over ( PARTITION by user_id order by time desc) as rank_num from wfp_topn_test ) a where a.rank_num <= 2;;

首先这里几个概念,我也第一次用到,窗函数 和 PARTITION,  PARTITION by field_name,会把表 按照 field_name字段划分成好几张小表,每个表 field_name的字段值相同,类似于group by,但不同的是,group by是将 field字段相同的记录,变成一条记录。

distribute by 和 partition by的区别: distribute by field,是按照field字段值,进行分区,给reduce,个人认为,纯粹是一种mr优化手段,distribute by field 会保证 : field字段值相同的记录在同一个 reduce。

rank 和 DENSE_RANK()的区别, rank 不留空位, DENSE_RANK 反之。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值