session分割

相同用户如果一个sessionid的连续访问记录前一条与后一条的时间超过30分钟,那么我们要分成两条

step1:group by guiid,sessionid

guid  用户id sessionid  会话id time 访问时间
u1 s1 t1
u1 s1 t2
u1 s1 t3
u1 s1 t4
u1 s1 t5
u1 s1 t6
u1 s1 t7

step1:lag_over,下移一行求时间差,打上标记

为什么不lead_over呢,因为lag_over 会导致第一个会话无法求差,lead_over会导致最后一个会话无法求差,而第一个session肯定是不许要分割的,但最后一个不一定,所以lag_over

guid

用户id

sessionid

会话id

time

时间

last_time

上次时间

interval_time

间隔时间(假设)

flag

超时标加

u1 s1 t1 0

0

u1 s1 t2 t1 10 0
u1 s1 t3 t2 20 0
u1 s1 t4 t3 35 1
u1 s1 t5 t4 10 0
u1 s1 t6 t5 50 1
u1 s1 t7 t6 10 0

step2: sum_over 累计求和flag,sum_flag就是我们新的session分割区间

guid

用户id

sessionid

会话id

time

时间

last_time

上次时间

interval_time

间隔时间(假设)

flag

超时标记

sum_
flag
u1 s1 t1 0

0

0
u1 s1 t2 t1 10 0 0
u1 s1 t3 t2 20 0 0
u1 s1 t4 t3 35 1 1
u1 s1 t5 t4 10 0 1
u1 s1 t6 t5 50 1 2
u1 s1 t7 t6 10 0 2

spark版本

session分割_第1张图片

你可能感兴趣的:(spark,hive,hive)