hivesql离线统计连续N次周期内发生的问题

HiveSQL使用窗口函数检测连续登录
本文介绍了如何利用HiveSQL的窗口函数lead,结合日期和时间函数,来检测用户连续两天或连续N天的登录情况。通过预处理数据并创建滑动时间窗口,可以分析用户在特定时间间隔内的连续登录行为,例如5秒或2小时。对于更复杂的连续登录需求,建议使用Flink的滚动或滑动窗口功能。

窗口函数lead
功能:用于从当前数据中基于当前行的数据向后偏移取值
语法:lead(colName,N,defautValue)
colName:取哪一列的值
N:向后偏移N行
defaultValue:如果取不到返回的默认值

我们可以基于用户的登陆信息,找到如下规律:
连续两天登陆 : 用户下次登陆时间 = 本次登陆以后的第二天
连续三天登陆 : 用户下下次登陆时间 = 本次登陆以后的第三天
……
我们可以对用户ID进行分区,按照登陆时间进行排序,通过lead函数计算出用户下次登陆时间
通过日期函数计算出登陆以后第二天的日期,如果相等即为连续两天登录。

with t1 as (
select userid,
logintime, --本次登陆日期的第三天
date_add(logintime,2) as nextday, --按照用户id分区,按照登陆日期排序,取下下一次登陆时间,取不到就为0
lead(logintime,2,0) over (partition by userid order by logintime) as nextlogin
from tb_login )

select distinct userid from t1 where nextday = nextlogin;

–连续N天
select
userid,
logintime,–本次登陆日期的第N天
date_add(logintime,N-1) as nextday,–按照用户id分区,按照登陆日期排序,取下下一次登陆时间,取不到就为0
lead(logintim

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科学的N次方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值