数仓主流架构
数据仓库在不同企业,它的架构也会有所差异。但分层和基本功能上大同小异,可能命名上有所不同,或者根据企业的业务特点做了一定的定制。
现在国内主流的架构还是以阿里为参考,整体架构如图所示:
从图中色块的不同,也能大体看到架构整体上分为四部分:ETL、ODS、CDM、ADS。
按照数据流动的方向,从下而上依次进行讲解。
ETL
ETL 是数据同步模块,表示将数据从来源端经过抽取(extract)、交互转换(transform)、加载(load)至目的端的过程。
数据仓库因为要定期从业务数据库中同步数据,整个过程就是通过 ETL 来实现的。
ETL 一般会采用现成的工具,如 Sqoop、Kattle 等直接完成数据从数据库到数据仓库的加载工作。
有些企业除了需要收集业务数据库的数据,还会采集日志等文件数据,需要使用 Flume、Logstash 等工具,可能也会构建定制化的 ETL 系统。
对数据库数据的抽取,工作量较少,因为本身数据库中的数据就很规范。但对于非数据库中的数据,比如日志,数据较为杂乱,可能在抽取过程中要进行相当繁杂的数据清洗工作。
ODS(操作数据源层)
数据通过 ETL 流程抽取到数据仓库中后,会进入到 ODS 层。这一层与原始数据保持一致,不进行任何的修改,目的就是为了原始数据的保存。为业务数据库减负后,业务数据库会将历史数据删除,之后如果需要用到这部分数据,就只能从数据仓库的 ODS 层中进行寻找。
这里体现了数据仓库的非易失性,即不允许修改的特性。
CDM(公共维度模型层)
公共维度模型层主要是为了数据分析提供服务的。它又包含 DWD(数据明细层)、DWS(数据汇总层)。
DWD(数据明细层)
因为 ODS 层保留着原始数据,而来自不同数据源的原始数据格式不统一,无法进行直接的数据分析任务。所以要对这些数据进行清洗、标准化,剔除异常数据,统一编码、单位、字段描述等。处理之后的数据,存储到数据明细层 DWD 中进行保存。
DWS(数据汇总层)
数据仓库中的数据主要是满足数据分析的需要,所以要对数据按照主题进行汇总、聚合,满足对特定主题以及不同维度的分析。
但 DWD 层存储的数据依然是满足三范式的数据,且比较零散,所以要按照分析主题对数据汇总、聚合后,存储到 DWS(数据汇总层)中进行存储。DWS 层的数据已经脱离了三范式,大多以大宽表的形式存在。
因为数据分析会进行多维度的探索,所以这一层的数据为了提升数据分析的性能,会对数据进行建模,以模型的方式进行保存。数据仓库的模型设计也出现在这一层中。
ADS(数据应用层)
数据分析人员对 DWS(数据汇总层)的数据进行分析运算后,会将最终的结果表存储到 ADS 层中,这些数据需要提供以报表的形式提供给上层进行决策,或者直接提供给业务系统进行展示,所以一般 ADS 层直接对接报表系统、业务系统。
ADS 层是必要的,它可以进行单独的权限管控,是外部系统的数据结构,更加注重于其他系统的交互速度。但数据仓库一般更注重聚合、分析,所以 ADS 层一般会选择其他注重交互速度的系统,甚至传统数据库来搭建。
小结
本节主要讲解了数据仓库的整体架构,包括 ETL、ODS、DWD、DWS、ADS。其中 ETL 完成了数据接入的功能,ODS 完成了历史数据积存功能,DWD、DWS、ADS 完成了数据分析功能。而 DWD、DWS 为数据分析提供服务,归在 CDM(公共维度模型层)中,ADS 用于存储结果数据,且对外部系统开发查询接口。接下来会对每个部分进行详细讲解。