如何进行clickhouse数据模型的session分析

如何进行clickhouse数据模型的session分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

什么是session,Session即会话,是指在指定的时间段内在您的网站/H5/小程序/APP上发生的一系列用户行为的集合。例如,一次会话可以包含多个页面浏览、交互事件等。

前言

Session 是具备时间属性的,根据不同的切割规则,可以生成不同长度的 Session; 可见,Session统计与上述智能路径检测的场景有相似之处,都需要寻找用户行为链的边界进行处理;session分析主要包含两部分:

  • session切割;例如,用户访问您的网站,打开了一个网页,有事离开了电脑。几个小时候回来后继续访问,用户的session访问次数应该算作几次? 又比如,用户在pc端添加了购物车,在手机端完成了支付,又应该算作几次。

  • session指标统计;session分析常见的分析指标有,session访问次数,访问深度、访问时长、跳出率等等。

模型

  • 案例一
    以30分钟为超时时间,按天统计所有用户的Session总数(跨天的Session也会被切割)

SELECT   ts_date,  sum(length(session_gaps)) AS session_cnt  #计算会话次数FROM (  WITH    arraySort(groupArray(toUnixTimestamp(time))) AS times,    arrayDifference(times) AS times_diff   #求解相邻事件的时间差  SELECT    toDate(time) as ts_date,    arrayFilter(x -> x > 1800, times_diff) AS session_gaps   #设置切割点  FROM app.scene_tracker  WHERE toDate(time) >= '2020-09-06' AND toDate(time) <= '2020-09-07'    GROUP BY ts_date,user_id)GROUP BY ts_date

案例二
以30分钟或指定事件为【会员支付成功】做为切割点,统计每天session平均访问深度(相邻相同事件只计算一次)

SELECT   ts_date,  count(1) session_cnt,  sum(length(event_chain)) AS event_cnt,  round(event_cnt/session_cnt)FROM (  WITH    arraySort(groupArray(( toUnixTimestamp(time), act ))) AS sorted_events,    arrayEnumerate(sorted_events) AS event_idxs,    arrayFilter(        (x,y,z) -> y>1800 or z.2='会员支付成功',        event_idxs,        arrayDifference(sorted_events.1),        sorted_events    ) as gap_index ,    arrayMap(x->x+1, gap_index) as gap_index_ ,    arrayMap(x -> if(has(gap_index_, x), 1, 0), event_idxs) as gap_marks ,    arraySplit((x,y) -> y, sorted_events, gap_marks) as session_chain   SELECT    toDate(time) as ts_date,    u_i as user_id,    arrayJoin(session_chain) event_chain_,    arrayCompact(x->x.2, event_chain_) event_chain  FROM app.scene_tracker  WHERE toDate(time) >= '2020-09-06' AND toDate(time) <= '2020-09-07'    GROUP BY ts_date,user_id)GROUP BY ts_date

关于如何进行clickhouse数据模型的session分析问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。