数据仓库工具箱阅读学习

根据目前工作内容,专注且系统化的学习下数仓方面知识

数仓是什么

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
数仓:
接入多种数据源,对各种数据源的数据进行统一分析.
从数据层面可以反向对业务层面提出改进需求,减少企业成本,控制输出质量.

数仓的特点:
主题性:数据库更多的对应着项目,数仓更多对应某个主题进行组织,像电商行业一般都围绕着店铺,客服,客户,产品等主题来分析各种行为.
集成性:数仓数据来源于不同的数据源,之所以需要数仓也是因为这样可以解决不同数据源无法相互访问的问题.
稳定性:数仓中的数据一定是不允许修改的,不像业务库中的数据可能会随着业务逻辑的要求,会进行删除操作,会导致需要溯源时无法进行.
时变性:数仓会定时获取新的数据,与稳定性并不冲突,像订单数据,订单的历史状态与最新的状态在数仓都会存在.

数仓分层
分层是一个抽象行为.
方便:像我们的钱包,百元钞和百元钞放在一起,十元钞和十元钞放在一起;
解耦:不同的任务逐层执行,降低出现问题的风险
优化:给一堆的ODS层数据表,也可以出具最终结果数据,没有分层设计会导致最终任务数上来,项目难以维护,而且有大量无用的IO操作

范式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
NF:
符合某一级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度
1NF:
冗余情况最严重
符合1NF的关系中的每个属性都不可再分
像进货字段,还可以分为进货数量,进货单价,那么就不符合1NF的要求
2NF:
对1NF表进行拆分,对重复冗余的数据进行分表
例如将学生院系科目成绩表,拆分为学生表+成绩表,通过学号进行关联
但,如果涉及到删除操作,院系信息会丢失
3NF:
数据库中强调的3NF主要是为了消除冗余
针对2NF,进行进一步拆分,学生院系科目成绩表,拆分为学生表+成绩表+院系表
这样,对于删除学生操作,对于院系是没有影响的

BCNF(巴斯范式)&4NF&5NF:
这一块具体还不太理解多值依赖具体意义

星型模式&雪花模式

1
2
3
4
星型模式:
在关系数据库管理系统中实现的维度模型
雪花模式:
多重维度表层次,建立的多级层次结构被称为雪花模式

维度表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
维度表是事实表不可或缺的组成部分
退化维度:
维度除了主键外没有其他内容,但是数量仍然是合法维度键,常见于交易和累计快照事实表
多层次维度:
多数维度包含不止一个自然层次,天,周,月,年之类
扮演角色的维度:
单个物理维度可以被事实表多次引用,例如日期维度,可以有不同的角色(下单,支付等)
处理缓慢变化维度属性:
类型0-原样保留:
维度属性值不会发生变化,适用于日期维度的大多数属性
类型1-重写:
维度行中原来的属性值被新值覆盖,会破坏历史情况
类型2-增加新行:
在维度表中增加新行,新行中采用修改的属性值,像拉链表
类型3-增加新属性:
类似保留原列,新开一列,不常用
类型4-增加微型维度:
用于维度中一组属性快速变化并划分为微型维度时采用,也叫快速变换魔鬼维度

事实表

1
2
3
4
5
6
7
8
事实这一术语表示某个业务度量
事实表的粒度可划分为三类:
事务,周期性快照,累计快照
事务事实表的一行对应空间或时间上某点的度量事件
周期性快照事实表的每行汇总了发生在某一标准周期,某天,某周,某月的多个度量事件
累计快照事实表的行汇总了发生在过程开始和结束之间可预测步骤内的度量事件
事实表数字度量划分为三类:
可加,半可加,不可加

不常用的事实表模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
事实表代理键
作为事实表唯一主键列,事实表行的直接标识符,允许更新操作分解为插入和删除操作
蜈蚣事实表
表示包含与维度相关的多个维度,常见于日期,月份,季度,年度维度
属性或事实的数字值
类似产品的标准价格,如果数字值用于计算目的,则属于事实表;如果数字值用于确定分组或过滤,应定义为维度属性
日志/持续时间事实
累计快照事实表获取多个过程里程牌,每个都包含日期外键并可能包含日期/时间戳
头/行事实表
操作型交易系统通常包括事务头指针行,头指针行与多个事务行关联
分配的事实
分配头指针事实,使其基于业务所提供的规则划分行级别
利用分配建立利润与损失事实表
理想的实现利润方程的事实表应为收入事务粒度并包含许多开销项
收入-开销=利润
多种货币事实
以多种货币单位记录财务事实的事实表行应该包含一对列
其中一列包含以真实币种表示的事实,另一列包含同样的,但以整个事实表统一的单一标准币种表示的事实
多种度量事实单位
需要事实同时以多种度量单位表示,可以统一标准度量,然后存储其他度量的转换系数
年-日事实
商业用户在事实表中需要年-日(YTD)值
多遍SQL以避免事实表间的连接
不应该跨事实表的外键处理两个事实表的连接操作
针对事实表的时间跟踪
类似缓慢变化维度处理,增加行有效时期,行截止日期以及当前行标识
迟到的事实
新事实行的多数当前维度内容无法匹配输入行的情况
通常发生在事实行延迟产生的时候

数仓总线

1
2
总线矩阵
行表示业务过程,列表示维度,点表示维度与给定的业务过程是否存在关联关系

维度建模涉及过程

1
2
3
4
a.选择业务过程
b.声明粒度
c.确定维度
d.确定事实