相同用户如果一个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 |