0 参考列表
CSDN:数据仓库全流程https://blog.csdn.net/huang66666666/article/details/102556874
CSDN:耗时n年,38页《数据仓库知识体系.pdf》(数据岗位必备)https://notomato.blog.csdn.net/article/details/120306023
1 维度建模
1.1 多维体系结构
1.1.1 总线矩阵(业务矩阵)
总线矩阵是指导维度模型建设的规划性文件,包含业务过程、公共一致性维度.每行代表一个业务过程,每列表示一个公共维度;还包括业务过程与维度间的联系,即业务过程与维度的关联外键.另外可加入主题划分和业务过程包含的度量值.
1.1.2 一致性维度
(1) 总线架构中,多个数据集市中的相同维度需保持一致.在后台建立好的维度同步复制到各个数据集市,这样所有数据集市的这部分维度都是完全相同的.建立新的数据集市时,需要在后台进行一致性维度处理,根据情况来决定是否新增和修改一致性维度,然后同步复制到各个数据集市.
(2 ) 同一数据集市中,两个维度如果有关系,要么就是完全一样的,要么就是一个维度在数学意义上是另一个维度的子集.例如建立月维度的话,月维度的各种描述必须与日期维度中的完全一致.
1.1.3 一致性事实
不同集市的同一事实,需保证口径一致,单位统一.
1.2 建模模式
(1) 星形模式:是以一张事实表为中心,所有的维度表直接连接在事实表上.数据有冗余,很多统计不需要做外部的关联查询,一般情况下效率比雪花模型高.
(2) 雪花模式以一张事实表为中心,部分维度表没有直接连接到事实表上,而是通过其他维度表连接到事实表上.数据冗余少,但统计时一般需要关联多层维表,效率比星型模型低.
(3) 星座模式是基于多张事实表的,而且共享维度信息.
1.3 分层模型
1.3.1 作用
①用空间换时间,通过大量的预处理来提升应用系统的用户体验;
②复杂问题简单化,将复杂的任务分解成多层来完成,每一层只处理简单任务,方便定位问题;
③减少重复开发,通过中间层数据能够减少极大重复计算,增加一次计算结果的复用性;
④对敏感数据脱敏,保证数据安全.
1.3.2 层级说明
层级 | 数据来源及建模方式 | 服务领域 | 数据ETL过程描述 |
操作数据层(ODS): Operational Data Store | 数据来源于各业务系统,物理模型和业务系统模型一致 | 为其他逻辑层提供数据,为统一数据视图子系统提供实时查询 | 从业务系统全量或增量抽取,不做清洗转换,直接装载到ODS层 |
公共维度层(DIM) | 由ODS层数据加工生成 | 建立整个企业的一致性维度,与DW层及ADS层组合使用,对事实数据进行聚合与分类 | 从ODS层抽象业务公用的维度及维度属性,生成维度表,视情况决定是否使用维度代理键,确定唯一主键 |
明细数据层(DWD): Data Warehouse Detail | 由ODS层数据加工生成,一般与ODS层保持一样的数据粒度,过滤一些与统计和分析无关的数据 | 为DW层提供各主题业务的明细数据,提供业务系统细节数据的长期沉淀,为未来分析需求的扩展提供历史数据支撑 | 对ODS层进行轻度清洗、转换,如字段合并、数据转换、脏数据处理、异常值处理、维度转代理键等.对相同主题的数据进行适当的聚合. 为支持数据重跑,可额外增加数据业务日期字段,可按年月日进行分表. |
汇总数据层(DWS): Data Warehouse Summary | 由DWD层、ODS层数据加工生成,基于维度建模 | 为DW层及ADS层提供公共指标及汇总数据 | 按照通用的核心维度对数据做粗粒度的聚合汇总,根据业务需求对事实表进行拉宽形成汇总事实表和合并事实表 |
应用数据层(ADS): Application Data Service | 由DW层加工生成,基于维度建模 | 提供给数据产品和数据分析使用的数据 | 基于应用,从DW层对指标进行个性化加工、数据汇总、数据集市组装 |
临时表(TMP) | 存放各分层数据处理过程中产生的临时表 |
2 维度表
2.1 概念
(1) 维度:表示对数据进行分析时所用的一个量,例如要分析产品销售情况, 可以选择按类别来进行分析,或按区域来分析.维度表信息比较固定,且数据量小.
(2) 代理关键字:一般是指维度表中使用顺序(序列)分配的整数值作为主键,用于维度表和事实表的连接.使用代理关键字,而不应该使用自然关键字或者智能关键字.
(3) 退化维度:一般都是事务的编号,如订单编号、发票编号等.这类编号需要保存到事实表中,但是不需要对应的维度表.退化维度经常会和其他一些维度一起组合成事实表的主键,在分析中可以用来做分组使用.
2.2 分类
2.2.1 根据维度值变化情况分
①缓慢变化维:与时间等因素无关的,变化相对较慢的维度.
②快速变化维:受时间或输入数据影响,变化相对较快的维度.一般通过增加列来更新数据.
2.2.2 根据维度表大小分
①大维度:维度表的字段很多、记录数很大,例如客户表维度表.由于数据量大,导致查询效率很低,需要进行优化.
②迷你维:将大维度中的使用频率较高的字段提取出来,形成一个字段少的迷你维度表,在查询时改为查迷你维度表,能明显提高查询效率.
2.2.3 按维度层次分
①普通维:基于一个维表的维度,由维表中的不同列来表示维度中的不同级别.
②父子维:基于两个维表列的维度,由维表中的两列来共同定义各个成员的隶属关系,一列称为成员键列来标识每个成员,另一列称为父键列来标识每个成员的父代.
③雪花维:基于多个维表的维度,各个维表间以外键关联,分别存储在同一维度中不同级别的成员列值.
3 事实表
3.1 概念
(1) 事实:业务流程中的一条业务.
(2) 粒度:数据仓库的数据单位中保存数据的细化或综合程度的级别.
(3) 事实表:每行数据代表一个业务事件,存放用来描述业务的大量数据,也包含了与各维度表相关联的外键.
3.2 分类
3.2.1 根据粒度划分
(1) 事务事实表(原子事实表):描述业务过程,数据的粒度通常是每个事务一条记录,保存的是最原子的数据.
(2) 周期快照事实表:统计一个实体在一段时间周期内的累积事实数据.例如卖家累计快照事实表,包含了历史截至当日的下单金额、历史截当日的支付金额等字段.
(3) 累计快照事实表:描述整个业务生命周期中的关键事件,通常具有多个日期字段来记录关键时间点;当过程随着生命周期不断变化时,记录也会随着过程的变化而被修改.例如订单累计快照事实表,粒度是订单,同时包含订单创建时间、付款时间、发货时间、收货时间等关键时间点字段,便于计算不同业务过程的时间间隔.
3.2.2 根据用途划分
(1) 原子事实表.
(2) 聚集事实表(汇总事实表):原子事实表上的汇总数据.
(3) 合并事实表:是指将位于不同事实表中处于相同粒度的事实进行组合建模而成的一种事实表,它的维度是两个或多个事实表的相同维度的集合.合并事实表的粒度可以是原子粒度也可以是聚集粒度.
4 建模流程
建立总线矩阵->选择业务过程→声明粒度→确定维度→确定事实.
4.1 建立总线矩阵
4.2 选择业务过程
①分析业务的生命周期,业务过程通常使用行为动词表示业务执行的活动;
②明确关键的业务步骤:该订单流转的业务过程有4个,创建订单→买家付款→卖家发货→买家确认收货;
③根据业务需求,选择与维度建模有关的业务过程;
④根据所选的业务过程确定事实表类型.
4.3 声明粒度
①尽量选择最细级别的原子粒度,以确保事实表的应用具有最大的灵活性.
②保证粒度能精确定义事实表的每一行所表示的业务含义.
4.4 确定维度
应该选择能够描述清楚业务过程所处的环境的维度信息.
4.5 确定事实
选择与业务过程有关的所有事实,且事实的粒度要与所声明的事实表的粒度一致.
5 数据更新
5.1 更新方式
①覆盖更新:直接覆盖已存在的值,不维护记录的历史.一般用于修改错误的数据.
②增加行:在源数据发生变化时,给记录建立一个新的"版本"记录,从而维护历史.一般通过拉链表来实现.
③增加列:给表增加新列,来存储新值,同时保留原来的值不变.通常用作保持记录的几个版本.
5.2 拉链表
5.2.1 作用
需要查看数据历史状态,同时考虑到存储空间.
5.2.2 实现方法
①维度表和ODS全量表根据代理主键做左关联,在维度表中找出有变化的数据,修改数据状态为'无效',修改对应的结束日期为当前日期;找出不存在于ODS全量表的数据,修改对应的结束日期为当前日期,作为临时表1;
②ODS全量表和维度表根据代理主键做左关联,在ODS全量表全量表中找出找出有变化的数据和存在与维度表的数据,修改开始日期为当前日期,结束日期为'2099-12-31',作为临时表2;
③将临时表1和临时表2 union all 后覆盖写入维度表.
5.2.3 查询优化
①给开始日期和结束日期加索引
②添加数据状态字段
③查询时只提供只包含最近几个月的拉链表