数仓-累计快照表应用

背景

随着数据量的增大,如何更好的管理和使用数据,并保证数据质量成为新的挑战,同时为了不浪费机器的计算资源,通过合理的数据建模,更快更方便的出业务所需要的统计数据成为数据治理的有效手段;其中累计快照表是常用的建模结果表。

系统中的数据都是有实体和实体之间的一系列事件产生的,比如,用户登陆APP,产生用户登陆数据表,用户下单购买商品,产生订单数据表,用户浏览页面参数,产生浏览事件表,用户点击页面,产生点击页面数据表等,根据 kibal 维度建模方法,将用户的这一系列原子的事件建立事件流水表,这些事件流水表有两部分数据组成, 即维度数据和事实数据。

维度表

-- 用户信息表
create table t_user{
Findex bigint  comment '主键',
Fuser_id int comment '用户ID',
Fname string comment '用户名称' ,
Fsex  int comment '性别' ,
....
}

-- 手机APP
create table t_app{
Findex bigint  comment '主键',
Fapp_id  int comment 'appID',
Fapp_namestring comment 'app名称' ,
....
}
-- 商品信息
create table t_app{
Findex bigint  comment '主键',
Fgoods_id string    comment '商品ID',
Fgoods_name string  comment '商品名称' ,
....
}

用户登陆手机APP 产生事件, 并产生事实数据,用户登陆事实表(Fuser_id,Fapp_id,Flogin_time)
用户下单参数订单事实数据表(Forder_id,Fuser_id,Fgoods_id,Foder_amount,Forder_time)
。。。。

create table t_user_login_detail{
Findex bigint comment '主键',
Fuser_id   int  comment '用户ID',   -- 维度数据
Fapp_id    string  comment 'appId' ,  -- 维度数据
Flogin_time timestamp  comment '登陆时间' , --  事实数据
....
}

这样系统中的数据是有一系列 维度表和事件事实表组成,同时为了数据统计方便,还需要建立一张累计快照表,一用户的累计事件快照表,就是记录用户在系统中的事件集,将每个事件类型的首次发生时间和最后一次发生时间记录在同一张表,并取每天快照;比如用户行为快照表,取每天用户的快照,记录用户的首次登陆时间,最后一次登陆时间

create table t_user_action_snap{
Fdate  bigint comment '主键',
Fuser_id   int  comment '用户ID',   
Fregist_time timestamp    comment '注册时间', 
Ffirst_login_time   timestamp   comment '首次登陆时间' ,   
Flast_login_time   timestamp  comment '最后一次登陆时间' , 
Ffirst_order_time timestamp comment '首次下单时间',
Ffirst_order_id string '首次下单ID',
Flast_order_time timestamp comment '最后一次下单时间',
Flast_order_time timestamp comment '最后一次下单ID'
....
} partitioned by (dt string comment '快照产生的时间') stored as orc

\color{red}{ 这里并不需要把所有事件都放到同一种快照表,统计数据关联关系比较强的可以放到同一个快照表,事实数据比较少的可以放到同一个快指标,如果事实数据比较多,可以但是放一个快照表}

有了这张快照表,我们统计运营指标就很方便

比如常用的运营指标 日新增用户(Fnu_d),日活跃用户(Fau_d),次日留存,2日留存,3日留存,七日留存,14日留存等。回流用户,留存率,转化用户

新增用户,首次登陆用户,最后一次登陆用户,日活用户(au)

-- 简单指标直接出数
select 
,count(if(Fregist_time=dt,Fuid,null) as Fnu_d -- 新用户
,count(if(Ffirst_login_time=dt,Fuid,null) as Flu_d_first -- 首次登陆用户
,count(if(Flast_login_time=dt,Fuid,null) as Fau_d  -- 最后一次登陆用户,也就是dt 日的日活用户,假设业务指标是登陆了算活跃用户
from t_user_action_snap where dt='2020-04-22' 

留存率的计算

--’2020-04-22‘ 为最新的一天的时间
create table t_user_ur_base_data{
Fcurrent date comment ’当前日期‘,
Ftarget  date comment ’目标日期‘,
Fdiff     int    comment ’当前日期距离目标日期的天数’,
Fur  date comment ’留存用户数‘,
}

---  取数逻辑
select s1.dt  as Fcurrent
,          s2.dt as Ftarget
,          datediff(s1.dt,s2.dt) as Fdiff
,          count(s1.Fuid) as Fur  
t_user_action_snap  s1 inner join t_user_action_snap s2 on s1.Fuser_id=s2.Fuser_id
and s1.dt='2020-04-22' ans s2.dt between date_sub('2020-04-22',90) and '2020-04-22'
and date(s1.Flast_login_time )=s1.dt and date(s2.Flast_login_time )=s2.dt

这样算出来Fcurrent 相对于Ftarget 时间的留存用户数


select  t1.Ftarget
,max(if(t1.Fdiff=0,Fur,0) as Fau  -- Ftarget 的活跃用户
,max(if(t1.Fdiff=1,t1.Fur,0) as Fur_1d -- Ftarget  天的次日留存率
,max(if(t1.Fdiff=2,t1.Fur,0) as Fur_2d -- Ftarget  天的2日留存率
,max(if(t1.Fdiff=3,t1.Fur,0) as Fur_3d -- Ftarget  天的3日留存率
,max(if(t1.Fdiff=4,t1.Fur,0) as Fur_4d -- Ftarget  天的4日留存率
,max(if(t1.Fdiff=5,t1.Fur,0) as Fur_5d -- Ftarget  天的5日留存率
,max(if(t1.Fdiff=7,t1.Fur,0) as Fur_w -- Ftarget  天的7日留存率
,max(if(t1.Fdiff=14,t1.Fur,0) as Fur_2w -- Ftarget  天的14日留存率
,max(if(t1.Fdiff=30,t1.Fur,0) as Fur_m -- Ftarget  天的30日留存率
,max(if(t1.Fdiff=60,t1.Fur,0) as Fur_2m -- Ftarget  天的60日留存率
,max(if(t1.Fdiff=90,t1.Fur,0) as Fur_3m -- Ftarget  天的90日留存率
from  t_user_ur_base_data t1 
left join t_user_ur_base_data t2 on t1.Ftarget=t2.Fcurrent
where t1.Ftarget between '2020-04-01' and '2020-04-22'
and t2.Fdiff=0
group by t1.Ftarget
order by t1.Ftarget desc

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容