当前位置: 首页 > article >正文

Doris 游戏数据分析实战,计算留存

基于Doris BitMap函数计算留存率,Doris拥有丰富的BitMap函数,计算留存使用到的有:bitmap_union、intersect_count、bitmap_intersect等;

其中核心思路就是:第一天与第二天的交集就是第二天的留存;第一天与第三天的交集就是第三天留存;以此类推,采用BitMap函数交集可以快速计算留存

例如:

1、已有埋点数据表

CREATE TABLE rt_dwd_app_event (
    user_uid varchar(40) NOT NULL COMMENT '用户id',
    create_time DATETIMEV2 NOT NULL COMMENT '时间',
    event varchar(40) NOT NULL COMMENT '事件名称'
)

2、定义用户埋点BitMap表

CREATE TABLE `rt_ads_app_event_1105_union` (
   event VARCHAR(50),
    create_time DATETIME,
    user_id BITMAP BITMAP_UNION
) ENGINE=OLAP
AGGREGATE KEY(`event`, `create_time`)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`create_time`) BUCKETS 2;

3、将埋点数据表导入BitMap表

INSERT INTO rt_ads_app_event_bigmap (event, create_time, user_id)
SELECT
    event,
    create_time,
    bitmap_union(BITMAP_HASH(user_uid))
FROM
    rt_dwd_app_event
group by event, create_time

4、假如初始事件是A,回访事件是A, 计算目标留存

select
'2024-11-01' actday,
intersect_count(user_id,DATE_FORMAT(create_time,'%Y-%m-%d'),'2024-11-01') as login_num,
intersect_count(user_id,DATE_FORMAT(create_time,'%Y-%m-%d'),'2024-11-01','2024-11-02') as retention_1101_1,
intersect_count(user_id,DATE_FORMAT(create_time,'%Y-%m-%d'),'2024-11-01','2024-11-03') as retention_1101_2,
intersect_count(user_id,DATE_FORMAT(create_time,'%Y-%m-%d'),'2024-11-01','2024-11-04') as retention_1101_3
from rt_ads_app_event_bigmap where event='login'

5、假如初始事件是A,回访事件是B, 计算目标留存

SELECT
    a.event AS a_start_event,
    a.create_time AS a_start_time,
    b.event AS b_start_event,
    b.create_time AS b_start_time,
    bitmap_count(bitmap_and(a.user_id, b.user_id)) AS retention
FROM 
    (SELECT *
     FROM rt_ads_app_event_1105_union
     WHERE event = 'login'
       AND DATE_FORMAT(create_time, '%Y-%m-%d') = '2024-11-01') AS a
CROSS JOIN 
    (SELECT *
     FROM rt_ads_app_event_1105_union
     WHERE event = 'logout') AS b
ORDER BY
    a.create_time, 
    b.create_time;

小结:自此完成哈!3000w的埋点数据,形成68个bigmap列;留存计算耗时在70~100ms左右


http://www.kler.cn/a/386883.html

相关文章:

  • 时序数据库TimescaleDB安装部署以及常见使用
  • python实战(八)——情感识别(多分类)
  • 《EasyQuotation 与MongoDB在股市信息的奇妙融合》
  • 如何提高自动驾驶中惯性和卫星组合导航pbox的精度?
  • aws(学习笔记第十二课) 使用AWS的RDS-MySQL
  • 场景解决之mybatis当中resultType= map时,因某个字段为null导致返回的map的key不存在怎么处理
  • 寻找存在的路径/寻找图中是否存在路径 C# 并查集
  • 亲测有效:Maven3.8.1使用Tomcat8插件启动项目
  • 《数据治理精选案例集2.0(2024版)》592页PDF(已授权分享)
  • AI大模型如何重塑软件开发流程
  • PostgreSQL 删除数据库
  • 蓝桥杯2022年第十三届省赛真题-求和
  • 《Python编程实训快速上手》第四天--字符串操作
  • 【嵌入式开发——Linux操作系统】7进程管理
  • ROS移动机器人自动导航系统架构与rosbag 工具
  • 多元正态分布
  • Serverless架构与自动化运维
  • 数据结构——二叉树(续集)
  • vue3入门知识(一)
  • docker安装低版本的jenkins-2.346.3,在线安装对应版本插件失败的解决方法
  • udp为什么会比tcp 有更低的延迟
  • Linux 下 mysql 9.1 安装设置初始密码 【附脚本】
  • Docker 容器网络模式详解
  • 【猜数字】C语言小游戏
  • 快速开发工具 Vite
  • 实现 Nuxt3 预览PDF文件