主流数仓分层数据介绍
一、数仓概念
什么是数仓?
数据仓库是为企业所有决策制定过程,提供所有系统数据支持的战略集合。通过对数据仓库中数据的分析,可以帮助企业改进业务流程、控制成本、提高产品质量等。数据仓库并不是数据的最终目的地,而是为数据最终的目的地做好准备。这些准备包括对数据的清洗、转义、分类、重组、合并、拆分、统计等等
数仓的输入系统?
埋点产生的用户行为数据、后台产生的业务数据、日志等数据
输出系统?
报表系统、用户画像系统、风控系统、推荐系统、机器学习等
二、数仓分层
ODS(Operation Data Store)原始数据层
原始数据层,存放原始数据,直接加载原始日志、数据,数据保持原貌不做处理。
DWD(Data Warehouse Detail)明细数据层
结构和粒度与原始表保持一致,对 ODS 层数据进行清洗(去除空值,脏数据,超过极限范围的数据)、维度退化、数据脱敏等
DWS(Data Warehouse Service)服务数据层
以 DWD 为基础,进行轻度汇总
DWT(Data Warehouse Topic)主题数据层
以 DWS 为基础,按照主题进行汇总
ADS(Application Data Store)数据应用层
为各种统计报表提供数据
三、数仓建模
ODS 做了哪些事?负责备份数据工作
1)保持数据原貌,不做任何修改,起到备份数据的作用
2)数据压缩存储。如采用 LZO,并创建索引减少磁盘存储空间(切片)
3)创建分区表,防止后续的全表扫描
4)创建外部表(多人共用),内部表(仅自己使用)
DWD 做了哪些事?负责准备数据工作
1)维度退化
数仓维度建模(星型模型)
对业务数据传过来的表进行维度退化和降维,减少后续大量 join 操作。(商品一级二级三级、省市县、年月日)
2)数据清洗(ETL)
①空值去除
②过滤核心字段无意义的数据,比如用户表年龄 age 大于100,支付表中支付金额 pay_money 为空
③将用户行为宽表和业务表进行数据一致性处理
清洗的手段:Sql、Spark RDD、Flink、Kettle、编程手段 Python 等等
3)脱敏
对手机号、身份证号、用户详细地址等敏感数据脱敏
4)列式存储
如:ClickHouse、Doris、Parquet
DWD 层需构建维度模型,一般采用星型模型,呈现的状态一般为星座模型。维度建模一般按照以下四个步骤:
选择业务过程 → 声明粒度 → 确认维度 → 构建事实
1)选择业务过程
在业务系统中,如果业务表过多,挑选我们感兴趣的业务线。比如下单业务,支付业务,退款业务,物流业务,一条业务线对应一张事实表。如果小公司业务表比较少,建议选择所有业务线。
2)声明粒度
数据粒度指数据仓库的数据中保存数据的细化程度或综合程度的级别。
声明粒度意味着精确定义事实表中的一行数据表示什么,应该尽可能选择最小粒度,以此来应对各种各样的需求。
典型的粒度声明如下:
①订单当中的每个商品项作为下单事实表中的一行,粒度为每次;
②每周的订单次数作为一行,粒度为每周;
③每月的订单次数作为一行,粒度为每月。
注意:如果在 DWD 层粒度就是每周或者每月,那么后续就没有办法统计更细粒度的指标了。所以建议采用最小粒度。
3)确定维度
维度的主要作用是描述业务事实,主要表示的是“谁,何处,何时”等信息。例如:
时间维度、用户维度、地区维度等常见维度。
4)构建事实
此处的“事实”一词,指的是业务中的度量值,例如订单金额、下单次数等。
在 DWD 层,以业务过程为建模驱动,基于每个具体业务过程的特点,构建最细粒度的明细层事实表。事实表可做适当的宽表化处理。
根据维度建模中的星型模型思想,将维度进行退化。例如:地区表和省份表退化为地区维度表,商品表、品类表、spu 表、商品三级分类、商品二级分类、商品一级分类表退化为商品维度表,活动信息表和活动规则表退化为活动维度表。至此,数仓的维度建模已经完毕,DWS、DWT 和 ADS 和维度建模已经没有关系了。DWS 和 DWT 都是建宽表,宽表都是按照主题去建。主题相当于观察问题的角度,对应着维度表。
DWS 做了哪些事?各个主题一天发生的行为数据
DWS 层统计各个主题对象的当天行为,服务于 DWT 上层的主题宽表以及一些业务明细数据, 应对特殊需求(例如:购买行为,统计商品复购率)。
DWS 层的宽表字段,是站在不同维度的视角去看事实表,重点关注事实表的度量值,通过与之关联的事实表,获得不同的事实表的度量值。
DWS 层有 3-5 张宽表(处理 100-200 个指标 70%以上的需求)
具体宽表名称:如用户行为宽表,用户购买商品明细行为宽表,商品宽表,购物车宽表,物流宽表、登录注册、售后等。
哪个宽表最宽?大概有多少个字段?
最宽的是用户行为宽表。大概有 60-100 个字段
具体用户行为宽表字段名称
评论、打赏、收藏、关注–商品、关注–人、点赞、分享、好价爆料、文章发布、活跃、签到、补签卡、幸运屋、礼品、金币、电商点击、gmv
DWT 做了哪些事?从用户或商品产生到当前时刻累积的数据
以分析的主题对象为建模驱动,基于上层的应用和产品的指标需求,构建主题对象的全量宽表。
DWT 层主题宽表都记录什么字段?
每个维度关联的不同事实表度量值以及首次、末次时间、累积至今的度量值、累积某个时间段的度量值。
分析的指标
日活、月活、周活、留存、留存率、新增(日、周、年)、转化率、流失、回流、七天内连续 3 天登录(点赞、收藏、评价、购买、加购、下单、活动)、连续 3 周(月)登录、GMV、复购率、复购率排行、点赞、评论、收藏、领优惠价人数、使用优惠价、沉默、值不值得买、退款人数、退款率 topn 热门商品
留转、复活指标
1)活跃
日活:100 万 ;月活:是日活的 2-3 倍 300 万
总注册的用户多少?1000 万-3000 万之间
2)GMV
GMV:每天 10 万订单 (50 – 100 元) 500 万-1000 万
10%-20% 100 万-200 万
3)复购率
某日常商品复购(手纸、面膜、牙膏)10%-20%
电脑、显示器、手表 1%
4)转化率
商品详情 => 加购物车 => 下单 => 支付
5% – 10%, 60-70%, 90%-95%
5)留存率
1/2/3、周留存、月留存
搞活动: 10-20%
ADS 做了哪些事?分析具体报表,直观数据
对系统各大主题指标分别进行分析。
分别对设备主题、会员主题、商品主题和营销主题进行指标分析,其中营销主题是用户主题和商品主题的跨主题分析案例
如何分析用户活跃?
在启动日志中统计不同设备 id 出现次数。
如何分析用户新增?
用活跃用户表 left join 用户新增表,用户新增表中 mid 为空的即为用户新增。
如何分析用户 1 天留存?
留存用户=前一天新增 join 今天活跃
用户留存率=留存用户/前一天新增
如何分析沉默用户?
(登录时间为 7 天前,且只出现过一次)
按照设备 id 对日活表分组,登录次数为 1,且是在一周前登录。
如何分析本周回流用户?
本周活跃 left join 本周新增 left join 上周活跃,且本周新增 id 和上周活跃 id 都为 null。
如何分析流失用户?
(登录时间为 7 天前)
按照设备 id 对日活表分组,且七天内没有登录过。
如何分析最近连续 3 周活跃用户数?
按照设备 id 对周活进行分组,统计次数大于 3 次。
如何分析最近七天内连续三天活跃用户数?
1)查询出最近 7 天的活跃用户,并对用户活跃日期进行排名
2)计算用户活跃日期及排名之间的差值
3)对同用户及差值分组,统计差值个数
4)将差值相同个数大于等于 3 的数据取出,然后去重,即为连续 3 天及以上活跃的用户
7 天连续收藏、点赞、购买、加购、付款、浏览、商品点击、退货
1 个月连续 7 天
连续两周
数仓命名规范
- ODS 层命名为 ods_ 前缀
- DWD 层命名为 dwd_ 前缀
- DWS 层命名为 dws_ 前缀
- ADS 层命名为 ads_ 前缀
- 临时表数据库命名为 _tmp 后缀
- 备份数据数据库命名为 _bak 后缀
文章节选自:
https://blog.csdn.net/weixin_42273782/article/details/107553601
https://blog.csdn.net/wjt199866/article/details/115184169