ClickHouse

clickhouse数据模型之session分析

2020-09-10  本文已影响0人  响指_郭彦超

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

前言

image.png

Session 是具备时间属性的,根据不同的切割规则,可以生成不同长度的 Session; 可见,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
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
image.png

最后附上一篇易观OLAP算法大赛,对session分析感兴趣的可以看下:OLAP Session分析

【相关文章】

clickhouse数据模型之留存分析

clickhouse数据模型之用户路径分析

clickhouse数据模型之有序漏斗分析

clickhouse数据模型之session分析

上一篇 下一篇

猜你喜欢

热点阅读