本文主要是介绍Hive SQL必刷练习题:同一个会话划分问题(*****),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题描述:
判断同一个用户,如果连续访问的时间间隔小于60s,就认为是同一个会话,或者说划分到同一个组。
解决思路:
关键在于,找到开始不属于上一个会话,或者说不属于上一个组的那个时间点,所以就需要对每一行进行判断,如果他和上一个时间点还是属于同一组的,那就标记一个值,如果不是同一个组了,就需要标记一个明显可以区分开的值。其实这个思路类似于解决间断连续问题的思路。
如果这个时间差值小于60,我给标记一个1,大于60标记一个0
关键的地方来了!!之后我如果把这个标记累加起来【从最早之前到现在】,你可以发现是一个会话的,就是1,之后就会累加成2
这里需要学习的事情:
自己的思路只想到开窗然后多增加一列,但是不知道怎么处理如果大于60s的
这就用到增加一个标记1或者0,然后累加的思路
代码:
select user_id,page_id,view_timestamp,sum(session_start_point) over (partition by user_id order by view_timestamp) session_idfrom (select user_id,page_id,view_timestamp,if(view_timestamp-lagts>=60,1,0) session_start_pointfrom (select user_id,page_id,view_timestamp,lag(view_timestamp, 1, 0) over (partition by user_id order by view_timestamp) lagtsfrom page_view_events) t1) t2;
这篇关于Hive SQL必刷练习题:同一个会话划分问题(*****)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!