数仓分层理解
数仓为什么要分层?
1)把复杂问题简单化:将复杂的任务分解成多层来完成,每一层只处理简单的任务,方便定位问题。
2)减少重复开发:规范数据分层,通过的中间层数据,能够减少极大的重复计算,增加一次计算结果的复用性。
3)隔离原始数据:不论是数据的异常还是数据的敏感性,使真实数据与统计数据解耦开。
ODS层(原始数据层)
1>保持数据原貌,不做任何修改
2>创建分区表,防止后续的全表扫描
3>采用压缩,防止后续全表的扫描
DIM层(公共维度层)
1>用于缓慢变化的场景 拉链表,用户表
2>维度整合,如商品维度,地区维度,活动维度
.维度表 对数仓的取值非常少,甚至只有一个,对我们的数仓没有太大需求和帮助,
.量级非常的大,没有必要用一张维表来进行存储,但是有时候进行数据查询和过滤有非常重要,所以这种冗余在事实表中,叫做> 维度退化
我们会考虑把退化相关的数据迁移到事实表中,删除退化维度
DWD层(明细层)
1>进行数据线ETL清洗
2>把一些不符合要求的或者规定的数据进行过滤进行去重,比如说:金额必须都是数字,[0-9]、手机号、身份证、匹配网址 URL 解析数据、核心字段不能为空、过期数据删除、重复数据过滤
3>脱敏:对手机号、身份证号等敏感数据脱敏,HQL、MR、SparkSQL、Kettle、Python(项目中采用 SQL 进行清除)
DWS层(轻度汇总层)
1>避免重复计算,将计数频率比较高的保存到dws层,提高数据复用性,一行数据一个维度对象的当日汇总行为
2>用户行为宽表,用户购买商品明细行为宽表,商品宽表,购物车宽表,物流宽表、登录注册、售后等
ADS层(应用层)
-
事务事实表(Transaction Fact Table)
定义:事务事实表记录了在特定时间点发生的离散事件,保存的是最原子级别的数据。
特点:每行数据代表一个具体的业务事件(如一次销售、一次订单提交)。数据粒度最细,通常不可再分。一旦记录生成,通常不会被修改。
应用场景:适用于需要详细记录每个业务事件的场景,如销售记录、用户登录记录等。 -
周期快照事实表(Periodic Snapshot Fact Table)
定义:周期快照事实表记录了在固定时间间隔内(如每天、每周、每月)的业务状态。
特点:每行数据代表一个时间周期内的汇总或快照数据。数据粒度较事务事实表粗,通常用于分析趋势。数据不会被更新,只会在每个周期生成新的记录。
应用场景:适用于需要分析业务周期性变化的场景,如每日销售额、每月库存水平等。 -
累积快照事实表(Accumulating Snapshot Fact Table)
定义:累积快照事实表记录了业务过程从开始到结束的整个生命周期中的关键事件。
特点:每行数据代表一个业务对象(如订单)的生命周期,包含多个时间字段(如订单创建时间、发货时间、确认收货时间)。数据会随着业务过程的变化而更新,直到业务过程完成。
应用场景:适用于需要跟踪业务过程状态变化的场景,如订单状态跟踪、客户服务流程跟踪等