2.数仓建模理论
建模理论:关系建模(ER建模)、纬度建模(DIM建模)
关系建模严格遵守三范式(3NF)理论 ,也因为三范式的特性,使关系模型较为松散、零碎、物理表数量多,数据冗余低,数据一致性容易得到保证,但是在大数据场景查询效率较低。
1. 属性不可分割:单表一个字段的数据不可分割成多个字段,即数据原子性要求。如商品字段值为 2台手机,可以分割为 商品、数量两个字段。
2. 不能存在部分函数依赖:单表不能存在非主键字段数据,只依赖主键的一部分。例分数表的 主键(学号,课程),有一个字段为学院,学院只依赖学号,不依赖课程。
3. 不能存在传递依赖:单表中不能存在 A --> B(B ! --> A) -->C,A映射到B,再通过B映射到C,且要求B不能映射到A。
三范式
目的:降低数据的冗余,因为数据冗余会增加存储成本,和修改数据时维护数据一致性的成本(只要存在一个字段的数据有重复,都称之为冗余)
缺点:数据查询时候需要join多表,影响性能。
纬度建模以数据分析作为出发点,不遵循3NF,故数据存在一定冗余。纬度模型面向业务,将业务用事实表和维度表呈现出来。表结构简单,查询效率较高(join的表较少)。
事实表和纬度表区别:
事实表分类:事务型事实表(发生后不再改变)、周期性快照事实表(类似于周期统计表)、累积型快照事实表(工单流转记录表,会随时间和操作而发生变更)
纬度模型分类:星型模型、雪花模型、星座模型
雪花模型和星型模型的区别:雪花模型会对维度表进一步细分和规范化。
雪花模型和星座模型区别:星座模型有多个事实表,而雪花模型只有一个事实表。
如何选择建模类型:
首先星座是跟设计无关,跟需求和数据有关,且并不与前两者冲突,不用选择。
星型还是雪花取决于性能有限还是灵活优先,实际企业开发中不会绝对选一种,根据实际情况灵活组合,甚至并存。但整体而言,倾向于维度更少的星型,尤其是Hadopp生态,
减少Join即可减少MR的shuffle,性能差距大。关系型数据库则依靠强大的主键索引。
维度建模步骤:
选择业务过程:告警业务、工单业务...一条业务对应一张事实表
声明粒度:一条记录的最小粒度,告警事实表的一条记录是一个已发生的告警。
确认维度:维度的作用是用于描述业务事实。
确认事实:业务中的度量值。
DWD层时候以业务驱动,DWS、DWT、ADS以需求驱动,和维度建模已经没有关系。
DWS、DWT都是面向主题建宽表,主题是观察问题的角度,对应维度。