数仓架构设计

327 阅读4分钟

数仓主流架构

数据仓库在不同企业,它的架构也会有所差异。但分层和基本功能上大同小异,可能命名上有所不同,或者根据企业的业务特点做了一定的定制。

现在国内主流的架构还是以阿里为参考,整体架构如图所示:

从图中色块的不同,也能大体看到架构整体上分为四部分: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 用于存储结果数据,且对外部系统开发查询接口。接下来会对每个部分进行详细讲解。