离线数仓——(新增用户业务指标,每日新增用户明细表,留存用户业务指标,用户留存明细表)
文章目录
- 新增用户业务指标
- 每日新增用户明细表
- 留存用户业务指标
- 用户留存明细表
新增用户业务指标
- 留存用户:指某段时间的新增用户,经过一段时间后,仍继续使用应用认为是留存用户
- 新增会员:第一次使用应用的用户,定义为新增会员;卸载再次安装的设备,不会被算作一次新增。
- 计算关系:先计算新增会员 => 再计算留存用户
- 在DWD用户每日启动明细表中,新增用户数+旧的所有用户信息=新的所有用户信息,此时的计算关系是,先计算新增用户,然后更新所有用户信息。
- 计算每日新增用户数:在所有的用户信息中增加时间列,表示这个用户是那一天成为新增用户的,此时,只需要一张表,所有用户信息(id,dt),然后将新增用户插入所有用户表中
每日新增用户明细表
创建DWS层每日新增用户明细表:【dws_load_member_add_day.sh】
create table dws.dws_member_add_day
(
`device_id` string,
`uid` string,
`app_v` string,
`os_type` string,
`language` string,
`channel` string,
`area` string,
`brand` string,
`dt` string
) COMMENT '每日新增用户明细'
stored as parquet;
从DWS层的用户启动日志明细表【dws_member_start_day】中加载DWS层数据到【dws_load_member_add_day】表中,dws_load_member_add_day.sh脚本如下:
#!/bin/bash
source /etc/profile
if [ -n "$1" ]
thendo_date=$1
elsedo_date=`date -d "-1 day" +%F`
fisql="
insert into table dws.dws_member_add_day
select t1.device_id,
t1.uid,
t1.app_v,
t1.os_type,
t1.language,
t1.channel,
t1.area,
t1.brand,
'$do_date'from dws.dws_member_start_day t1 left join
dws.dws_member_add_day t2on t1.device_id=t2.device_idwhere t1.dt='$do_date'and t2.device_id is null;
"
hive -e "$sql"
此时,每日新增用户明细表中的数据如下:
hive (dws)> select * from dws_member_add_day limit 5;
OK
dws_member_add_day.device_id dws_member_add_day.uid dws_member_add_day.app_v dws_member_add_day.os_type dws_member_add_day.language dws_member_add_day.channel dws_member_add_day.area dws_member_add_day.brand dws_member_add_day.dt
1FB872-9A100100001 2F10092A100001 1.1.18 4.30 chinese AQ 营口 iphone-5 2020-07-31
1FB872-9A100100002 2F10092A100002 1.1.1 0.08 chinese NN 淮安 iphone-2 2020-07-31
1FB872-9A100100003 2F10092A100003 1.1.1 0.07 chinese OV 阳江 iphone-2 2020-07-31
1FB872-9A100100004 2F10092A100004 1.1.4 0.0.1 chinese YF 杭州 Huawei-2 2020-07-31
1FB872-9A100100005 2F10092A100005 1.1.19 8.02 chinese XY 拉萨 xiaomi-0 2020-07-31
留存用户业务指标
- 留存用户与留存率:某段时间的新增用户,经过一段时间后,仍继续使用应用认为是留存用户;这部分用户占当时新增用户的比例为留存率。
- 留存用户需求:可计算1日,2日,3日的用户留存数和用户留存率
1号的10W新会员,在2号留存3W,这3W在2号的启动日志明细表中【dws_member_start_day】
用户留存明细表
创建DWS层用户留存明细表:【dws_member_retention_day】
create table dws.dws_member_retention_day
(
`device_id` string,
`uid` string,
`app_v` string,
`os_type` string,
`language` string,
`channel` string,
`area` string,
`brand` string,
`add_date` string comment '用户新增时间',
`retention_date` int comment '留存天数'
)COMMENT '每日用户留存明细'
PARTITIONED BY (`dt` string)
stored as parquet;
从DWS层dws_member_start_day以及dws_member_add_day中加载数据,脚本如下:
#!/bin/bashsource /etc/profileif [ -n "$1" ] ;thendo_date=$1
elsedo_date=`date -d "-1 day" +%F`
fisql="
drop table if exists tmp.tmp_member_retention;
create table tmp.tmp_member_retention as
(select t2.device_id,t2.uid,t2.app_v,t2.os_type,t2.language,t2.channel,t2.area,t2.brand,t2.dt add_date,1from dws.dws_member_start_day t1 join dws.dws_member_add_day t2 on t1.device_id=t2.device_idwhere t2.dt=date_add('$do_date', -1)and t1.dt='$do_date'union allselect t2.device_id,t2.uid,t2.app_v,t2.os_type,t2.language,t2.channel,t2.area,t2.brand,t2.dt add_date,2from dws.dws_member_start_day t1 join dws.dws_member_add_day t2 on t1.device_id=t2.device_idwhere t2.dt=date_add('$do_date', -2)and t1.dt='$do_date'
union allselect t2.device_id,t2.uid,t2.app_v,t2.os_type,t2.language,t2.channel,t2.area,t2.brand,t2.dt add_date,3from dws.dws_member_start_day t1 join dws.dws_member_add_day
t2 on t1.device_id=t2.device_idwhere t2.dt=date_add('$do_date', -3)and t1.dt='$do_date'
);insert overwrite table dws.dws_member_retention_day partition(dt='$do_date') select * from tmp.tmp_member_retention;
" hive -e "$sql"
创建ADS层用户留存数明细表【ads_member_retention_count】,用户留存率明细表【ads_member_retention_rate】
create table ads.ads_member_retention_count
(
`add_date` string comment '新增日期',
`retention_day` int comment '截止当前日期留存天数',
`retention_count` bigint comment '留存数'
) COMMENT '用户留存数'
partitioned by(dt string)
row format delimited fields terminated by ',';create table ads.ads_member_retention_rate
(
`add_date` string comment '新增日期',
`retention_day` int comment '截止当前日期留存天数',
`retention_count` bigint comment '留存数',
`new_mid_count` bigint comment '当日用户新增数',
`retention_ratio` decimal(10,2) comment '留存率'
) COMMENT '用户留存率'
partitioned by(dt string)
row format delimited fields terminated by ',';
加载ADS层用户留存数明细表【ads_member_retention_count】,用户留存率明细表【ads_member_retention_rate】数据
#!/bin/bashsource /etc/profileif [ -n "$1" ] ;thendo_date=$1
elsedo_date=`date -d "-1 day" +%F`
fisql="
insert overwrite table ads.ads_member_retention_count
partition (dt='$do_date')
select add_date, retention_date,count(*) retention_countfrom dws.dws_member_retention_daywhere dt='$do_date'
group by add_date, retention_date;insert overwrite table ads.ads_member_retention_rate
partition (dt='$do_date')
select t1.add_date,t1.retention_day,t1.retention_count,t2.cnt,t1.retention_count/t2.cnt*100from ads.ads_member_retention_count t1 join
ads.ads_new_member_cnt t2 on t1.dt=t2.dtwhere t1.dt='$do_date';
"
hive -e "$sql"
离线数仓——(新增用户业务指标,每日新增用户明细表,留存用户业务指标,用户留存明细表)相关推荐
- 离线数仓搭建_11_DWD层用户行为日志创建
文章目录 13.0 数仓搭建-DWD层 13.1 DWD层(用户行为日志) 13.1.1 日志解析思路 13.1.2 get_json_object函数使用 13.1.3 启动日志表 13.1.4 页 ...
- 大数据架构师——音乐数据中心平台离线数仓综合项目(四)
文章目录 音乐数据中心平台离线数仓综合项目 第四个业务:商户营收统计 需求 模型设计 数据处理流程 1. 将数据导入MySQL业务库 2. 执行第二.三个业务 3. 使用Sqoop抽取mysql数据到 ...
- 【离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计】
离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计 离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计 一.DWS层设计要点 二.DWS层设计分析 - 1d/nd 1. ...
- 【离线数仓-2-数据采集】
离线数仓-2-数据采集 离线数仓-2-数据采集 1.用户行为日志数据模拟 1.用户行为日志的介绍 2.埋点有哪些 3.用户行为日志内容 4.用户行为日志格式 5.用户行为日志数据采集 1.节点之间配置 ...
- 电商离线数仓项目实战(下)
电商离线数仓项目实战(下) 电商分析--核心交易 文章目录 电商离线数仓项目实战(下) 电商分析--核心交易 一.业务需求 二.业务数据库表结构 1. 数据库表之间的联系 img 2. 业务数据库-- ...
- 大数据-案例-离线数仓-在线教育:MySQL(业务数据)-ETL(Sqoop)->Hive数仓【ODS层-数据清洗->DW层(DWD-统计分析->DWS)】-导出(Sqoop)->MySQL->可视化
一.商业BI系统概述 商业智能系统,通常简称为商业智能系统,是商业智能软件的简称,是为提高企业经营绩效而采用的一系列方法.技术和软件的总和.通常被理解为将企业中的现有数据转换为知识并帮助企业做出明智的 ...
- 电商离线数仓-业务数仓指标(GMV主题/转化率主题)
GMV和转化率 GMV主题 GMV的概念 GMV表的创建 GMV表里导入数据 转化率 转化率概念 转化率表的创建 转化率表里导入数据 ADS层用户行为漏斗分析 GMV主题 GMV的概念 什么是GMV? ...
- 大数据架构师——音乐数据中心平台离线数仓综合项目(一)
文章目录 音乐数据中心平台离线数仓综合项目 数据库与ER建模 数据库 数据库三范式 第一范式(1NF):原子性,字段不可分 第二范式(2NF):唯一性,一个表只能说明一个事物,有主键,非主键字段依赖主 ...
- 离线数仓建设及技术选型
离线数仓架构设计 1.建设数仓的目的 主要是增加数据计算的复用性.每次新增加统计需求时,不至于从原始数据进行计算,而是从半成品继续加工而成. 2. 数据仓库作用 整合企业业务数据,建立统一的数据中心: ...
最新文章
- Mysql 数据库命令行导出导入sql脚本
- 如何在Bash脚本中将DOS / Windows换行符(CRLF)转换为Unix换行符(LF)?
- Qt Creator指定文本编辑器设置
- 聚宽macd底背离_许多散户不知道:MACD月线金叉,MACD月金叉都会带来一波牛市!...
- Decision Tree学习笔记(基础篇)
- Unix/Linux 目录结构的来历
- Python基础语法案例(Fibonacci):选择结构、循环结构、异常处理结构、代码优化
- Hibernate--Criteria Query and DetachedCriteria
- html5中点击后不发生变化_魔道祖师中资深粉一看就明白的梗,路人见到后都反应不过来...
- ubuntu安装rpm的方法
- 浅析天际网、IT260、微人脉等中国职业社交网站
- XidianOJ 1024 简单逆序对
- 研发管理系统选型必读
- html系统网页代码大全,html网页的代码大全
- 计算机毕业设计asp.net学院网站系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目
- rdkitpython | 通过反应获得断键位点与类型
- 欢迎使用CSDN-markdown编辑器231
- 旋转变换(二)欧拉角
- 如何实现博客的评论和回复功能
- 解决svn报错 : The pristine text with checksum 'e006b124faa4ddf60d8773d1855e6bfa56145874' was not fou
热门文章
- 世界八个著名游戏工作室
- 修改IDEA提交到git的昵称
- editable type支持function实现不同行type分别为select、text
- js字符串处理—是否包含某个字符串以及截取字符串
- mysql80版本连接 1251_解决Navicat Premium 连接 MySQL 8.0 报错1251的问题分析
- webgl——VAO
- 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java泰兴市公交信息系统f504u
- chatgpt对接微信公众号
- 南昌计算机网络期末考试,南昌大学计算机网络试卷2008A
- 王牌技能网站架构服务 Nginx