求某段时间内用户的连续活跃区间

文章展示了对Hive和Spark用户活跃数据的处理过程,包括创建表、加载数据、使用row_number()窗口函数计算连续活跃天数,并通过date_sub计算活跃开始区间。最终确定了用户的活跃周期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

drop table user_active ;
create table user_active(uid String,dt String)
row format delimited fields terminated by ',' stored as textfile;

``--原始数据
spark,2021-01-01
spark,2021-01-02
spark,2021-01-03
spark,2021-01-06
spark,2021-01-07
spark,2021-01-09
hive,2021-01-01
hive,2021-01-03
hive,2021-01-10
hive,2021-01-11
hive,2021-01-12
hive,2021-01-13

load data local inpath '/root/user_active.txt' overwrite into table user_active;

select 
t.uid,
date_sub(t.dt,t.rn) as sub,
min(t.dt),
count(1),
max(t.dt) 
from
    ( 
     select
       uid,
       dt,
       row_number() over(partition by uid order by dt) as rn
     from 
       user_active 
     where  dt>='2021-01-01' and dt<'2021-01-30' 
    )  t
group by uid,date_sub(t.dt,t.rn);

--子查询结果
uid     dt             rn
hive    2021-01-01      1
hive    2021-01-03      2
hive    2021-01-10      3
hive    2021-01-11      4
hive    2021-01-12      5
hive    2021-01-13      6
spark   2021-01-01      1
spark   2021-01-02      2
spark   2021-01-03      3
spark   2021-01-06      4
spark   2021-01-07      5
spark   2021-01-09      6


select 
t.uid,
date_sub(t.dt,t.rn) as sub
from
    (select
       uid,
       dt,
       row_number() over(partition by uid order by dt) as rn
     from 
       user_active 
     where  dt>='2021-01-01' and dt<'2021-01-30' 
    )  t
;

t.uid   sub
hive    2020-12-31
hive    2021-01-01
hive    2021-01-07
hive    2021-01-07
hive    2021-01-07
hive    2021-01-07

spark   2020-12-31
spark   2020-12-31
spark   2020-12-31
spark   2021-01-02
spark   2021-01-02
spark   2021-01-03

--最终结果
--uid    --sub         --活跃开始区间   --活跃天数   -- 区间截止时间
hive    2020-12-31      2021-01-01      1       2021-01-01
hive    2021-01-01      2021-01-03      1       2021-01-03
hive    2021-01-07      2021-01-10      4       2021-01-13

spark   2020-12-31      2021-01-01      3       2021-01-03
spark   2021-01-02      2021-01-06      2       2021-01-07
spark   2021-01-03      2021-01-09      1       2021-01-09`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值