一、什么是数据仓库
- 数据仓库,英文名称Data Warehouse,简写为DW。数据仓库顾名思义,是一个很大的数据存储集合,出于企业的分析性报告和决策支持目的而创建,对多样的业务数据进行筛选与整合。它为企业提供一定的BI(商业智能)能力,指导业务流程改进、监视时间、成本、质量以及控制
- 数据仓库的输入方是各种各样的数据源,最终的输出用于企业的数据分析、数据挖掘、数据报表等方向
二、数据仓库存在的意义
如果没有数据仓库,我们需要直接从业务数据库中取数据来做分析。业务数据库主要是为业务操作服务,主要有以下几个问题
-
结构复杂
业务数据库通常是根据业务操作的需要进行设计的,遵循3NF范式,尽可能减少数据冗余。这就造成表与表之间关系错综复杂。多种多样的数据储存方式,也给取数带来了困难,没法简单地用一条SQL完成数据查询。如果能把这些数据都整合到一个数据库里,比如构造一张节假日表。这样就能很方便地完成数据查询,从而提高分析效率
-
数据脏乱
因为业务数据库会接受大量用户的输入,如果业务系统没有做好足够的数据校验,就会产生一些错误数据,比如不合法的身份证号,或者不应存在的Null值,空字符串等
-
理解困难
业务数据库中存在大量语义不明的操作代码,比如各种状态的代码,地理位置的代码等等,在不同业务中的同一名词可能还有不同的叫法
-
缺少历史
出于节约空间的考虑,业务数据库通常不会记录状态流变历史,这就使得某些基于流变历史的分析无法进行。比如想要分析从用户申请到最终放款整个过程中,各个环节的速度和转化率,没有流变历史就很难完成
-
大规模查询缓慢
当业务数据量较大时,查询就会变得缓慢。尤其需要同时关联好几张大表,比如还款表关联订单表再关联用户表,这个体量就非常巨大,查询速度非常慢。美好的青春都浪费在了等待查询结果上,真是令人叹息
三、数据仓库的特点
-
主题性
不同于传统数据库对应于某一个或多个项目,数据仓库根据使用者实际需求,将不同数据源的数据在一个较高的抽象层次上做整合,所有数据都围绕某一主题来组织
-
集成性
数据仓库中存储的数据是来源于多个数据源的集成,原始数据来自不同的数据源,存储方式各不相同。要整合成为最终的数据集合,需要从数据源经过一系列抽取、清洗、转换的过程
-
稳定性
数据仓库中保存的数据是一系列历史快照,不允许被修改。用户只能通过分析工具进行查询和分析
-
时变性
数据仓库会定期接收新的集成数据,反应出最新的数据变化。这和特点并不矛盾
四、什么是ETL
ETL的英文全称是 Extract-Transform-Load 的缩写,用来描述将数据从来源迁移到目标的几个过程
-
Extract,数据抽取,也就是把数据从数据源读出来
-
Transform,数据转换,把原始数据转换成期望的格式和维度。如果用在数据仓库的场景下,Transform也包含数据清洗,清洗掉噪音数据
-
Load 数据加载,把处理后的数据加载到目标处,比如数据仓库
五、数据仓库接入
六、数仓分层架构设计
- ODS贴源数据层:把来源于其他系统的增量或全量数据几乎无处理地存放在数据仓库中
- DWD明细数据层:可对数据进行编码转换、脱敏、清洗、统一格式等
- DWS:汇总层,集中建设通用维度和指标
- ADS:存放数据产品个性化的统计指标数据,根据CDM层(DWD和DWS)和ODS层加工生成
- DIM:公共维度层,存放维度表、码表、配置表
七、数据仓库分层的好处
- 清晰数据结构: 每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解
- 数据血缘追踪: 我们最终给业务呈现的是一张能直接使用的业务表,但是它的来源有很多,如果有一张来源表出问题了,我们能够快速准确地定位到问题,并清楚它的作用范围
- 增强数据复用能力: 减少重复开发,通过数据分层规范化,开发一些通用的中间层数据,能够减少重复计算,提高单张业务表的使用率,提升系统的执行效率
- 复杂问题简单化: 把一个复杂的业务分成多个步骤实现,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复
- 减少业务的影响: 业务可能会经常变化,这样做就不必改一次业务就需要重新接入数据
- 统一数据口径: 通过数据分层,提供统一的数据出口,统一对外输出的数据口径
八、数仓模型
8.1 星形模型
星型模式(Star schema): 事实表在中心,周围围绕地连接着维表(每维一个),事实表含有大量数据,没有冗余
8.2 雪花模型
雪花模式(Snowflake schema): 是星型模式的变种,其中某些维表是规范化的,因而把数据进一步分解到附加表中。结果,模式图形成类似于雪花的形状
8.3 星座模型
事实星座(Fact constellations): 多个事实表共享维表, 这种模式可以看作星型模式集,因此称为星系模式(galaxy schema),或者事实星座(fact constellation)