大话数仓,数据仓库,数仓分层详解
数据仓库如何分层、为什么要分层?前文已经提到,这里再简单回顾一下。
数仓分层的目的?
- 清晰的数据结构与依赖关系
- 减少数据的重复开发
- 统一数据口径
- 保证数据一致性
- 分配管理数据权限
数仓如何分层,一般划分为四层或五层!
- ODS(原始数据层)
- DWD(明细数据层)
- DWS(汇总数据层)
- DIM(公共维度层)
- ADS(数据应用层
数据仓库分层虽然整体上有一定的规范,但是每个公司都有自己的一套规则,细节上可能存在差异。数据仓库内部的划分不是为了分层而分层,分层的目的是为了解决数据、任务和工作流程的组织、数据流向、数据血缘、读写权限控制、不同业务需求的满足等各类问题。
数据仓库的分层可能有有四层,也可能有五层或者六层。虽然你已经知道了每层的具体含义与作用,但是有时候并不是很清楚这些层级之间的分割层次是什么,出现复杂的业务往往让我们无从下手,所以层级的划分一定要结合公司的具体业务来做。
宽表
我们经常听到拉一张宽表,出一张宽表这种说法。通常宽表是由很多维度、事实表关联后形成的一张涵盖多种业务、字段非常多的大表。可能刚开始维度数据比较少,但是随着业务的增长,数据维度越来越多。
我们所建的宽表越来越大,带来的影响就是没有清晰的表结构和随意增长的宽度。这时我们可能要根据主题来划分宽表,按照某一主题事实去扩展维度,宽表不再依赖具体的业务过程,而是根据整体业务线进行匹配。
事实表
根据数据的生命周期和特点,在数据仓库中,事实表可以分为不同类型,主要包括:事务事实表、周期快照事实表和累积快照事实表。
1、事务事实表
事务事实表用来记录各业务过程,跟踪时间上某点的度量事件,它保存的是各业务过程的原子操作事件,即是最基本的事实。例如交易流水、操作日志等,这些数据在创建后就不会再变化,因此事务事实表的每条记录表示一个瞬时的事件。在数据仓库中,这类数据通常包含与业务对象相关的度量、日期、事实类型等字段信息。
事务型事实表可用于分析与各业务过程相关的各项统计指标,由于其保存了最细粒度的数据,可以提供最大限度的灵活性。
2、周期型快照事实表
周期快照事实表以具有规律性的、可预见的时间间隔来记录事实,主要用于记录与业务对象相关的周期性变化数据,一般周期可以是每天、每周、每月等。
周期快照事实表特点:随着业务周期性的推进而变化,记录某个时间段内的业务数据度量和状态度量的变化。常用于统计与业务对象相关的周期性数据,例如年度销售额、商品库存、账户余额这些存量型指标,业务系统中通常会计算并保存最新结果。在数据仓库中,这类数据通常包含与业务对象相关的度量、日期、周期、状态度量等字段信息。
3、累积型快照事实表
用来描述过程开始和结束之间的关键步骤事件,覆盖过程的整个生命周期,通常具有多个时间字段来记录关键时间点,当过程随着生命周期不断变化时,记录也会随着过程的变化而被修改,通常用来统计不确定周期的数据。
与周期快照事实表不同,累积快照事实表没有确定的周期,而是针对一个业务对象完全覆盖一个事实的生命周期进行记录。如,订单状态表就是一个典型的累积快照事实表,该表记录了订单的所有状态变化,如下单、出库、发货等,同时该表中的数据不断更新,需要进行随时修改。
为了记录一个事实的生命周期中的关键时间点,累积快照事实表通常会包含多个时间字段,例如订单状态表中的订单创建时间、订单更新时间、订单完成时间等。
事务型事实表 | 周期型事实表 | 累积型快照事实表 | |
时间 | 离散事务时间 | 每天、每周、每月、每年 | 多个时间字段来记录关键时间点 |
粒度 | 每行代表实体的一个事务 | 每行代表某时间周期的一个实体 | 每行代表一个实体的生命周期 |