一、数仓表的分类
1、全量表/增量表/快照表
全量表:无分区。每天凌晨流程执行完后,表中数据是截止到前一天的数据。
增量表:按天分区,partition_date = 'YYYYMMDD',每一天的分区会存放在那一天所产生的增量数据(insert, update的数据)
快照表:按天分区,partition_date = 'YYYYMMDD',每一天的数据都是截止到那一天的全量表(即每天一张全量表)(可以刻画某一个数据一段时间内的变化情况)
2、宽表/窄表
宽表:通常是指业务主题相关的指标、维度、属性关联在一起的一张数据库表。不符合数据库设计三范式,较为冗余,但是查询高效、便捷
窄表:严格按照数据库设计三范式。尽量减少数据冗余,但是缺点是修改一个数据可能需要修改多张表。
* 数据库设计三范式参考:https://www.cnblogs.com/knowledgesea/p/3667395.html
3、拉链表/流水表/中间表
拉链表:分区表,分区字段一般为start_date、end_date。拉链表和增量表的表结构基本一样。适用于表的数据量很大,表中的部分字段会被update更新操作,而我们需要查看某一个时间点或者时间段的历史快照信息,如统计账户及客户的情况。如果每天保留一份全量数据,就浪费了存储空间,有时可能业务统计也有点麻烦;如果保留一份最新的全量数据,就看不到数据的变化,所以拉链表是个很好的选择。
流水表:记录表的每一个修改,反映实际记录的变更。
* 流水表与日志的区别:日志只记录情况,但不会被修改;流水表由业务系统在代码中落地到数据库
中间表:
4、维度表/事实表
维度表:描述个体详情、提供关联维度的表
事实表:记录实际发生的事件数据的表
二、数仓模型架构分层
为什么要分层:数据仓库的分层设计是一种逻辑上的划分,目的是为了方便管理。
ODS层:数据运营层是最接近数据源中数据的一层
DW层:
① 数据明细层DWD(Data WareHouse Detail):该层一般保持和ODS层一样的数据粒度,并且提供给一定的数据质量保证。
② 数据中间层DWM(Data WareHouse Middle):该层会在DWD层的数据基础上,对数据做轻度的聚合操作,生成一系列的中间表,提升公共指标的复用性,减少重复加工。
③ 数据服务层DWS(Data WareHouse Service):该层又称为数据集市,按照主题划分,如流量、订单、用户等主题表,用于提供后续的业务查询、OLAP分析、数据分发等。一般来讲,该层的数据表会相对比较少,一张表会涵盖比较多的业务内容,由于其字段较多,因此一般也会称该层的表为宽表。
APP层:数据应用层,主要是提供给数据产品和数据分析、数据挖掘使用的数据。比如我们经常说的报表数据,一般就放在这里。
维表层:
① 高基数维度数据:一般是用户资料表、商品资料表类似的资料表。数据量可能是千万级或者上亿级别。
② 低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表。数据量可能是个位数或者几千几万。