1.数据仓库
1.1 什么是数据仓库
数据仓库,英文名为Data Warehouse,简写为DW或DWH。数据仓库,是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,用于对管理决策过程的支持1。它是单个数据存储,出于分析性报告和决策支持目的而创建。 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制2。
1.2 数据仓库的四个特点
- 面向主题:数据仓库是按照一定的主题来组织,仅存储与主题相关的数据。主题是指用户在构建数仓时考虑决策时所关注的重点方面,方便以后的数据分析。
- 集成:数仓的数据来源是任意的,可以是操作型数据库,也可以是网络爬虫,这些数据经过加工与集成,统一成新的数据源。
- 随时间变化:数仓每天都会从不同数据渠道获取大量数据,关键数据会隐式或显式的基于时间变化。
- 数据相对稳定:数据进入后一般只进行查询操作,不会进行删改。
1.3 数仓分层
1.4 数仓为什么要分层
- 把复杂问题简单化:将复杂的任务分解成多层来完成,每一层只处理简单的任务,方便定位问题。
- 减少重复开发:规范数据分层,通过中间层数据,能够减少重复的数据计算,增加计算结果的重用性;
- **隔离原始数据:**使真实数据与统计数据隔离开。
1.5 数据仓库与数据库的区别
功能 | 数据仓库 | 数据库 |
---|---|---|
数据范围 | 存储历史的、完整的、反应历史变化的数据 | 当前状态数据 |
数据变化 | 可添加、无删除、无变更、反应历史变化 | 支持频繁的增删改查 |
应用场景 | 面向分析、支持战略决策 | 面向业务流程 |
设计理论 | 伪范式、适当冗余 | 遵照范式(一、二、三范式),避免冗余 |
处理量 | 非频繁、大批量、高吞吐、有延迟 | 频繁、小批次、高并发、低延迟 |
2.关系建模与维度建模
2.1 关系建模
关系模型如图所示,严格遵循第三范式(3NF),从图中可以看出,较为松散、零碎,物理表数量多,而数据冗余程度低。由于数据分布于众多的表中,这些数据可以更为灵活地被应用,功能性较强。关系模型主要应用与OLTP系统中,为了保证数据的一致性以及避免冗余,所以大部分业务系统的表都是遵循第三范式的。
2.2 维度建模
维度模型如图所示,主要应用于OLAP系统中,通常以某一个事实表为中心进行表的组织,主要面向业务,特征是可能存在数据的冗余,但是能方便的得到数据。
**关系模型虽然冗余少,但是在大规模数据,跨表分析统计查询过程中,会造成多表关联,这会大大降低执行效率。**所以通常我们采用维度模型建模,把相关各种表整理成两种:事实表和维度表两种。
在维度建模的基础上还可以分为三种模型:星型模型、雪花模型、星座模型。
2.2.1星型模型
标准的星型模型周围只有一层,即一个事实表周围只有一层维度表与之对应。
2.2.2雪花模型
雪花模型的维度层级比星型模型多,雪花模型比较靠近3NF,但无法完全遵守,因为遵守3NF的性能成本太高。
2.2.3 星座模型
星座模型与前两个模型的区别在于事实表的数量,星座模型中的事实表要多。而且事实表之间也有可能会共享维度表。
2.2.4 模型的选择
首先星座与否与数据和需求有关系,与设计无关,不用抉择。
星型还是雪花,取决于性能优先,还是灵活优先。
实际开发中,不会只选择一种,根据情况灵活组合,甚至并存。但是整体来看,更倾向于维度更少的星型模型。尤其是Hadoop体系,减少join就是减少shuffle,性能差别很大。
3.数仓建模
3.1 数仓建模的目的
为什么要进行数据仓库建模?大数据的数仓建模是通过建模的方法更好的组织、存储数据,以便在 性能、成本、效率和数据质量之间找到最佳平衡点。一般主要从下面四点考虑
- 访问性能:能够快速查询所需的数据,减少数据I/O
- 数据成本:减少不必要的数据冗余,实现计算结果数据复用,降低大数 据系统中的存储成本和计算成本
- 使用效率:改善用户应用体验,提高使用数据的效率
- 数据质量:改善数据统计口径的不一致性,减少数据计算错误 的可能性,提供高质量的、一致的数据访问平台3。
3.2 ODS层
- 保持数据原貌不做任何修改,起到备份数据的作用;
- 数据采用压缩存储,减少磁盘空间;
- 创建分区表,防止全盘扫描
3.3 DWD层
DWD层需构建维度模型,一般采用星型模型,呈现的状态一般为星座模型。
维度建模一般按照以下四个步骤:
3.4 DWS层
统计各个主题对象的当天行为,服务于DWT层的主题宽表,以及一些业务明细数据,应对特殊需求(例如,购买行为,统计商品复购率)。
3.5 DWT层
以分析的主题对象为建模驱动,基于上层的应用和产品的指标需求,构建主题对象的全量宽表。
3.6 ADS层
对电商系统各大主题指标分别进行分析。