文章目录
1 关系建模与维度建模
如何规范数仓的表格,想要构建数仓,需要将数仓分层。某一层中存放哪些表,表里有哪里字段,这些事情就是通过建模来确定的。
关系建模和维度建模是两种数据仓库的建模技术。关系建模由Bill Inmon所倡导,维度建模由Ralph Kimball所倡导。
(1)关系建模
从MySQL中导出来的表格称为业务数据,都是满足三范式要求的,对这些表的规划、建模称为关系建模。
关系建模将复杂的数据抽象为两个概念——实体和关系,并使用规范化的方式表示出来。关系模型如图所示,从图中可以看出,较为松散、零碎,物理表数量多,但是冗余度很低,这就是关系型数据库的建模方式。
关系模型严格遵循第三范式(3NF),数据冗余程度低,数据的一致性容易得到保证。由于数据分布于众多的表中,查询会相对复杂,在大数据的场景下,查询效率相对较低。
(2) 维度建模
维度模型如图所示,从图中可以看出,模型相对清晰、简洁。
维度模型以数据分析作为出发点,不遵循三范式,故数据存在一定的冗余。维度模型面向业务,将业务用事实表和维度表呈现出来。表结构简单,故查询简单,查询效率较高。
维度建模一定要选定一个中心,这个中心就是需要做的业务,如电商的核心业务就是订单,那么在对电商业务进行维度建模的时候,就可以将订单放到中心的位置。描述订单的方式一般为:和人,何时,何地,下的什么订单,一个用户,一个维度;一个时间,一个维度等等,做的事情称为“下单”。
维度建模其实是通过另外一种方式来描述业务,这时每一个维度都可以被列成一个表格。中心的表格称为事实表,周围的表都是用来描述事实表的一些信息,称为维度表。数仓就采用这种建模方式,主要是为了减少join操作,增加检索效率。
数仓的第一步就是将原来的业务数据重新进行一次维度建模,将数据重新规划,目的就是为了减少查询的时间。维度建模发生在DWD(明细数据层)和DIM(维度层)。
2 维度表和事实表
(1)维度表
维度表:一般是对事实的描述信息。每一张维表对应现实世界中的一个对象或者概念。例如:用户、商品、日期、地区等。
维度表的特征:
- 维表的范围很宽(具有多个属性、列比较多)
- 跟事实表相比,行数相对较小:通常 < 10万条,用数学语言描述就是 f(a,b,c,d) = e, 其中abcd为4个维度,e为事实
- 内容相对固定:编码表
时间维度表:
日期ID | day of week | day of year | 季度 | 节假日 |
---|---|---|---|---|
01-01 | 2 | 1 | 1 | 元旦 |
01-02 | 3 | 2 | 1 | 无 |