hive开窗函数,排名函数的坑

今天碰到一个小bug,虽然说不是非常严重,但是也花了一点时间来排查。当我们用hive的rank()或者row_number()函数的时候,一般会根据里面的某个唯一列(例如user_id)进行分区,然后order by他的某个时间字段(例如update_time),比如我们需要求某个用户每天登陆的最后登录时间,登录表里面用户可能有多条登录信息,那么我们可能要把数据清洗去重,得到登录时间最晚的那一条记录,此时可以用到开窗函数,整体的写法为:row_number() over(partition by user_id order by update_time desc) as rn,然后子查询 where rn=1,这样一来我们就得到了用户某一天的最后一条登录信息,但是有这么一种情况,当用户为新用户,他的这个update_time可能在有些逻辑下被设为null,对应的就没有这个修改时间,当我们用order by排序的时候,这行数据默认就会跑到第一行,所以就取不到他的最晚登录时间,那么我们可以用 nvl()函数,写法为,nvl(update_time,"1"),这个1可以为任意不大于最晚登录时间的字符串。

当然还有对应的可以用 group by user_id,max(update_time)这种方法取到最晚时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值