2022年6月1日记录,这又干了3年的数仓,感慨很多吧,觉得做好确实不容易,技术要精细的话,从底层代码到上层架构都要认真思考。
一、数据仓库是什么
引用百度百科:数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。
个人理解:存取公司历史数据,并按照一定规则清洗、加工为稳定的结构和形式,为公司发展提供更加高效的服务
二、为什么需要数据仓库
和公司的发展息息相关,公司发展到一定规模,业务系统趋于完善,分析类需求增加,业务库的处理能力有限,需要有一个统一的数据出口保证数据的统一性和数据产出的高效性
三、数据仓库和数据库的区别联系
数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,是所有操作环境和外部数据源的快照集合,用于支持管理决策。
(1) 面向主题:指数据仓库中的数据是按照一定的主题域进行组织。
(2)集成:指对原有分散的数据库数据经过系统加工, 整理得到的消除源数据中的不一致性。
(3)相对稳定:指一旦某个数据进入数据仓库以后只需要定期的加载、刷新。
(4)反映历史变化:指通过这些信息,对企业的发展历程和未来趋势做出定量分析预测。
主要区别在于:
(1)数据库是面向事务的设计,数据仓库是面向主题设计的。
(2)数据库一般存储在线交易数据,数据仓库存储的一般是历史数据。
(3)数据库设计是尽量避免冗余,数据仓库在设计是有意引入冗余。
(4)数据库是为捕获数据而设计,数据仓库是为分析数据而设计。
四、数据仓库分层
1、为什么要分层
空间换时间。通过建设多层次的数据模型供用户使用,避免用户直接使用操作型数据,可以更高效的访问数据。
把复杂问题简单化。讲一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
便于处理业务的变化。随着业务的变化,只需要调整底层的数据,对应用层对业务的调整零感知.
2、怎么分层
ODS【-MID】-DW-DM-OLAP/OLAM/app
1.ODS(临时存储层)-Operational Data Store
为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。一般来说ODS层的数据和源系统的数据是同构的,主要目的是简化后续数据加工处理的工作。从数据粒度上来说ODS层的数据粒度是最细的。ODS层的表通常包括两类,一个用于存储当前需要加载的数据,一个用于存储处理完后的历史数据。历史数据一般保存3-6个月后需要清除,以节省空间。但不同的项目要区别对待,如果源系统的数据量不大,可以保留更长的时间,甚至全量保存.
2.DW(数据仓库层)-Data Warehouse
为数据仓库层,PDW层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。这一层的数据一般是遵循数据库第三范式的,其数据粒度通常和ODS的粒度相同。在PDW层会保存BI系统中所有的历史数据,例如保存10年的数据.
3.DM(数据集市层)-Data Market
为数据集市层,这层数据是面向主题来组织数据的,通常是星形或雪花结构的数据。从数据粒度来说,这层的数据是轻度汇总级的数据,已经不存在明细数据了。从数据的时间跨度来说,通常是PDW层的一部分,主要的目的是为了满足用户分析的需求,而从分析的角度来说,用户通常只需要分析近几年(如近三年的数据)的即可。从数据的广度来说,仍然覆盖了所有业务数据.
4.APP(应用层)
为应用层,这层数据是完全为了满足具体的分析需求而构建的数据,也是星形或雪花结构的数据。从数据粒度来说是高度汇总的数据。从数据的广度来说,则并不一定会覆盖所有业务数据,而是MID层数据的一个真子集,从某种意义上来说是MID层数据的一个重复。从极端情况来说,可以为每一张报表在APP层构建一个模型来支持,达到以空间换时间的目的数据仓库的标准分层只是一个建议性质的标准,实际实施时需要根据实际情况确定数据仓库的分层,不同类型的数据也可能采取不同的分层方法.
五、数据仓库的主要模型
实际的应用中,业务型公司主要都是维度建模,结构简单,且做数值计算比较容易,和大数据计算场景契合
维度建模-星形模型示意图:
1、维度建模概念:维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。
--维度表是由一个规范化的事实表和反规划的一些维度表组成的
--以良好的理解性和方便产生报表来进行组织数据,很少考虑修改的性能
这里的维度基本可以对应数据分析的多个角度
2、事实表包含了所关心的度量值,大多数时候是订单表
事实表更新的三种更新方式:<1>每次取最新的值代替原来的值(最为常用)
<2>把最新的值插入表中,原来的值也保留,两个值给不同的状态,按需读取
<3>时间拉链表,每次读取的数据都写进表中,记录好时间,安装需求指定时间读取
3、维度建模的主要步骤
六、大数据环境下数仓建设
数据仓库的思想和建模方法在大数据环境下同样适用,和传统数仓相比,主要是工具不同,内核类似。