数仓理论-汇总

1. 数仓分层和规范

1.1 分层

分层在不同的公司会有不同的形式,命名也有不同。但是大体上是差不多。 据说,阿里是分了4层,美团分了5层,京东分了9层。一般情况下分为下面的几层。

数仓理论-汇总

ODS: Operation Data Store 原始数据层,存放原始数据,不做任何处理。
DWD: data warehouse detail 对ods层数据清洗,去除脏数据,空值等,维度退化,脱敏等。
DWS: data warehouse service 按天进行轻度汇总。
DWT: data warehouse topic 按主题进行汇总。
ADS: application data store 为各种报表提供数据。

而我所在的公司是这么分的:

模型分层 名称
缓存层 ods 原始日志,不可直接使用
基础层 fact 将ods层全量解析,统一字段命名和时间格式
dim 微信信息,衍生维度表
attr 需要完成清洗、命名一致性、逻辑关系合并即按照主题做成宽表
聚合层 aggr 轻度聚合计算:基于业务事实衍生出标签、状态等所需辅助指标,去重类计算、逻辑赛选计算、预cube计算。
累计聚合计算:累计周期类标签计算、排序累计、复杂过滤逻辑计算。
应用层 app 面向定制化报表、邮件、数据产品服务类数据源表。
对外接口 export 数据外供接口、数据服务接口

分层的好处:
1)复杂的问题简单化;每一层只处理简单的任务,方便定位问题
2)减少重复开发;通过中间层,将一次的计算结果复用
3)隔离原始数据;将统计数据和原始数据隔离开
4)统一数据的口径,即按照一个标准出数据

1.2 数据集市

各个公司,书上对集市的定义也有点差异。一般可以认为, 是微型的数据仓库,更少的数据,更少的主题,是部门级别的,只为局部的人服务。
数据仓库是面向全公司的,企业级的,为各个部门运行提供决策。

1.3 命名规范

这点也是根据自家公司的规范来的。通常的做法是:是什么层,表名就以该层缩写开头。
ods层: ods_表名
dwd层:dwd_dim/fact_表名

  • ods_原库名_原表名(_时间后缀day|week|month)–原始数据层
  • 中间表:fact_主题_大意_mid_时间后缀(day|week|month) --快照层(清洗)
  • fact_主题_大意_时间后缀(day|week|month) --快照层(清洗)
  • attr_主题_大意_时间后缀(day|week|month) --宽表层(标签)
  • 中间表:aggr_主题_统计维度_mid_时间后缀(day|week|month) --聚合层
  • aggr_主题_统计维度_时间后缀(day|week|month) --聚合层
  • app_项目_统计维度_时间后缀(day|week|month) --应用层
  • mail_项目_统计维度_时间后缀(day|week|month) --邮件 DB每日全量表:后缀
  • full(day|week|month)’ 视图表:后缀 ‘view_full(day|week|month)’ 或者
  • 'view

(day|week|month)’

2. 数仓理论

2.1 范式理论

范式可以理解为在设计一张表的结构的规范和要求。
在关系数据库设计的时,目的是为了降低数据的冗余性。随之导致的问题是在查询数据的时候需要join关联出最后的数据。join时会降低执行效率。

2.2 范式分类

业界现在存在, 第一范式,第二范式,第三范式,巴斯-科德范式,第四范式,第五范式。企业中主要满足的时前三个范式。

2.3 函数依赖

1)完全函数依赖
举例:知道学号和课程才能知道这人的某学科的分数,缺一不可。即,同时知道A和B,才能推出C,则C完全依赖A和B。

2)部分函数依赖
通过A能得出C,或者B也能得出C, 则C是部分依赖A和B。

3)传递函数依赖
A能得出B,B能得出C,但是C得不出A,不能反着推出来。则C是传递依赖于A。

2.4 三范式的区分

三范式就是不停的拆字段,尽可能的拆出最细的。

2.4.1 第一范式

第一范式核心原则:属性不可切分
数仓理论-汇总
图中的商品, 是明显可以再切分为数量和商品名 。

2.4.2 第二范式

原则:不能存在部分函数依赖

2.4.3 第三范式

原则: 不能存在传递函数依赖

2.5

N. Notes

ETL工具:hive hql, mr , spark sql, python, kettle