更新时间:2026-05-18 GMT+08:00
分享

网站用户行为实时分析案例

场景描述

某网站需要对用户行为数据进行实时统计。

业务需求

实时分析浏览网站的用户的行为数据,分析数据包括:按小时/天统计UV(独立访客数)、PV(页面浏览量)、访问时长、留存率等。

解决方案

使用物化视图的增量刷新及分区物化视图功能。

应用示例

  1. 用户行为日志表。

    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE user_behavior_log (
    user_id BIGINT,
    event_type VARCHAR(50),
    page_url VARCHAR(200),
    duration INT,  -- 停留时长(秒)
    event_time TIMESTAMP
    ) WITH (orientation = COLUMN);
    

  2. 小时级统计物化视图,利用分区物化视图进行分区上卷计算。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    CREATE MATERIALIZED VIEW mv_user_stats_hourly
    REFRESH FAST EVERY (interval '10 min')
    ENABLE QUERY REWRITE
    WITH (orientation = COLUMN)
    PARTITION BY date_trunc('hour', event_time)
    AS
    SELECT
    DATE_TRUNC('hour', event_time) as stat_hour,
    event_type,
    page_url,
    COUNT(*) as pv,  -- 页面访问次数
    COUNT(DISTINCT user_id) as uv,  -- 独立访客数
    AVG(duration) as avg_duration,  -- 平均停留时长
    COUNT(CASE WHEN duration > 60 THEN 1 END) as long_stay_count  -- 停留>1分钟
    FROM user_behavior_log
    GROUP BY DATE_TRUNC('hour', event_time), event_type, page_url;
    

  3. 留存率统计。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    CREATE TABLE user_behavior_log (
    CREATE MATERIALIZED VIEW mv_user_retention
    REFRESH FAST EVERY (interval '1 hour')
    ENABLE QUERY REWRITE
    AS
    SELECT
    first_date,
    days_diff,
    user_count,
    ROUND(100.0 * user_count / (SELECT COUNT(*) FROM first_visit WHERE first_date = retention_calc.first_date), 2) as retention_rate
    FROM retention_calc;
    

相关文档