数仓架构
1. 数据仓库
特点:
- 面向主题
电商,流量,交易。。。
- 集成
各个数据源:数据库,日志,爬虫。。。
- 相对稳定
主要用来查询,不是用来删除和修改
- 反映历史变化
N年的记录,每个月、每个季度、每年的汇总记录
- 管理决策
分析数据 -> 指标
数据湖指的是所有的原始数据,数据仓库指经过处理的原始数据(四层)
2. 数据库和数据仓库的区别
数据库: 联机事务处理和查询处理 OLTP
传统的数据仓库:主要是查询,用结果来支撑决策。联机分析处理 OLAP
大数据数据仓库:基于Hadoop的海量 分布式数据仓库
实时仓库:Flink + Kafka/Redis/HBase
3. 架构
lambda:实时+ 数仓
kappa:实时
批流一体
4. 数仓分层
4.1 分层
- ODS(Operation Data Store):原始数据
- DWD(Data Warehouse Detail):对原始数据进行清洗(去除空值、脏数据、超过极限范围的数据)、脱敏等,保存明细数据
- 选择业务过程 -> 声明粒度 -> 确认维度 —> 确认事实
- DWS(Data Warehouse Service):按天进行轻度汇总,比如一个用户一天下单次数
- DWT(Data Warehouse Topic):对数据进行累计汇总,比如一个用户从注册那天开始至今一共下了多少次单
- ADS(Application Data Store):为各种统计报表提供数据
第3、4层不一定都有,甚至都没有,直接从第2层经过操作到第5层,中间没有保留中间表
并不能保证一定按照这个分层来进行。如果说过滤条件也比较少,甚至可以直接从ODS进行过滤后直接返回给用户。
4.2 为什么要分层
- 把复杂问题简单化:拆解每一个需求,方便定位问题
- 减少重复开发:提供模型的复用性
- 隔离原始数据:使真实数据和汇总数据解耦
5. 数据集市和数据仓库的区别
数据集市是一个微型的数据仓库,通常有更少的数据,更少的主题区域,以及更少的历史数据,是部门级的。
数据仓库是企业级的。
6. 数据理论
6.1 范式
- 定义:范式可以理解为设计一张数据表的表结构
- 优点:降低数据的冗余性;数据保存多份,一次修改,需要修改多个表,很难保证数据的一致性
- 缺点:获取数据的时候,需要通过Join连接来获取最后的数据
- 分类:
- 第一范式:属性不可分割
- 第二范式:不能存在非主键字段部分函数依赖主键字段,可以消除部分数据冗余
- 第三范式:不能存在非主键字段传递函数依赖主键字段
- BCNF、第四范式、第五范式。。。
满足的范式越多,数据冗余性越低,但是表会越散,影响查询效率
- 函数依赖:完全函数依赖、部分函数依赖、传递函数依赖
6.2 OLTP 和 OLAP
- OLTP:传统数据库的主要应用,主要是基本的、日常的事务处理,比如银行交易
- OLAP:数据仓库的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观的查询结果
OLTP 一般是关系建模方式,OLAP 一般是维度建模方式
6.3 关系建模和维度建模
关系建模符合3NF,表松散,表的数据量多,但是数据冗余性低。由于数据分布在很多的表中,这些数据可以更为灵活地被应用,功能性更强。
维度建模:基于维度和度量。维度就是事实,相当于用户进行的业务操作
6.4 维度表和事实表
维度表:一般是对事实的描述信息,例如:用户、商品、日期、地区等
特征:维度表的范围很宽(具有多个属性,列比较多);跟事实表相比,行数较小;内容比较固定,比如编码表
事实表:对应着业务事件,每一个业务都应该有一个事实表。事实对应了业务事件中的度量值。
特征:行数很多;内容相对的窄,列数较少(维度外键 + 度量值);经常发生变化
事实表又分为如下三种:
- 事务型事实表
- 以每个事务或事件为单位,一旦插入就不会再作修改,更新方式就只能是增量方式
- 周期型快照事实表
- 不会保留所有数据,只保留固定时间间隔的数据
- 事务型事实表用来保存所有的数据。比如购物车数据,不需要记录每一次加减,只要汇总每一天最后的那个状态就行。
- 累积型快照事实表
- 用于跟踪业务事实的变化。
这三种像是针对关系型数据库如何设计表来说的,根据表类型的不同,来决定每天同步数据到数仓的方式是全量还是增量。
比如第一种因为只会新增数据,所以每天增量同步到数仓即可;第二种需要全量同步;第三种将新增变化数据同步之后,还需要再做一步整合。
事实表一般是动词,维度表一般是名词。
7. 星型模型、雪花模型、星座模型
雪花模型和星型模型的区别主要是在维度的层级,标准的星型模型维度只有一层,雪花模型可能会涉及多层。
多个事实表可能会使用相同的维度表,组合起来就是星座模型。
Q&A
数仓最重要的是什么?
数据的准确性。数仓最终是为了支撑决策,决策的前提要保证数据的准确性。
如何保证数据的准确性?
元数据的建设与管理是其中重要的一个环节。元数据建设的目标是打通数据接入到加工 ,再到数据消费整个链路,规范元数据体系与模型,提供统一的元数据服务出口,保障元数据产出的稳定性和质量。首先梳理清楚元仓底层数据,对元数据做分类,如计算元数据、存储元数据、质量元数据等,减少数据重复建设,保障数据的唯一性。
另外, 要丰富表和字段使用说明,方便使用和理解。根据元仓底层数据构建元仓中间层,建设元数据基础宽表,也就是元数据中间层,打通从数据产生到消费整个链路。
也可在粒度、规范等方面展开,见仁见智。
如何做数据治理?数据资产管理呢?
在明确数据治理是数据管理的一部分之后,下一个问题就是定义数据管理。治理相对容易界定,它是用来明确相关角色、工作责任和工作流程的,确保数据资产能长期有序地、可持续地得到管理。
而数据管理则是一个更为广泛的定义,它与任何时间采集和应用数据的可重复流程的方方面面都紧密相关。
其实在数仓的整个链路中数据治理的理念是渗入其中的,在ETL过程中开发人员会对数据清洗这其实就是治理的一部分,再加上后期数据资产的管理和落定都有数据治理的渗入。
如何控制数据质量?
1.数据质量保证原则:完整性,准确性,数据质量,及时性,一致性
2.数据质量方法:数据资产等级的划定
3.数据加工过程卡点校验
4.风险点监控:针对在线或者离线数据的监控
5.质量衡量:故障等级的划定以及数据质量的事件的记录
元数据的理解?元数据管理系统?
元数据主要记录数据仓库中模型的定义、各层级间的映射关系、监控数据仓库的数据状态及 ETL 的任务运行状态。
元数据有重要的应用价值,是数据管理、数据内容、数据应用的基础,在数据管理方面为集团数据提供在计算、存储、成本、质量、安全、模型等治理领域上的数据支持。
元数据管理系统: 首先梳理清楚元仓底层数据,对元数据做分类,如计算元数据、存储元数据、质量元数据等,减少数据重复建设,保障数据的唯一性。
另外, 要丰富表和字段使用说明,方便使用和理解。根据元仓底层数据构建元仓中间层,建设元数据基础宽表,也就是元数据中间层,打通从数据产生到消费整个链路