数据仓库是一个合并了各种来源的数据,以便出于业务目的对数据进行统一分析的数据库。ETL 通常用于将数据移至数据仓库。
数仓分层架构
数据仓库标准上可以分为四层。但是这种划分和命名不是唯一的,一般数仓都是四层,但是不同公司可能叫法不同。但是核心的理念都是从四层数据模型而来。
- 贴源层(ODS, Operational Data Store) - 原始数据层,存放原始数据,直接加载原始日志、数据,数保持原貌不作处理
- 数据明细层(DWD, Data Warehouse Detail) - 对ODS层数据进行清洗(去除空值,脏数据,超过极限范围的数据)、维度退化、脱敏等,并基于维度建模,明细宽表,复用关联计算,减少数据扫描
- 数据服务层(DWS, Data Warehouse Service) - 以DWD为基础,进行轻度汇总,构建命名规范、口径一致的统计指标,为上层提供公共指标,建立汇总宽表
- 数据应用层(ADS, Application Data Service) - 以DWS为基础,按主题进行汇总,为各种统计报表提供个性化数据、宽表集市、趋势指标
为什么要分层
- 清晰数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。
- 方便数据血缘追踪:简单来说,我们最终给业务呈现的是一个能直接使用业务表,但是它的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。
- 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。
- 把复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
- 屏蔽原始数据的异常:屏蔽业务的影响,不必改一次业务就需要重新接入数据
ETL(Extract-Transform-Load)实施
ETL,Extract-Transform-Load的缩写,是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程。ETL是数据集成的第一步,也是构建数据仓库最重要的步骤,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。ETL一词较常用在数据仓库,但其对象并不限于数据仓库。
1.数据抽取
数据抽取指的是从不同的网络、不同的操作平台、不同的数据库和数据格式、不同的应用中抽取数据的过程。目标源可能包括ERP、CRM和其他企业系统,以及来自第三方源的数据。
不同的系统倾向于使用不同的数据格式,在这个过程中,首先需要结合业务需求确定抽取的字段,形成一张公共需求表头,并且数据库字段也应与这些需求字段形成一一映射关系。这样通过数据抽取所得到的数据都具有统一、规整的字段内容,为后续的数据转换和加载提供基础,具体步骤如下:
①确定数据源,需要确定从哪些源系统进行数据抽取
②定义数据接口,对每个源文件及系统的每个字段进行详细说明
③确定数据抽取的方法:是主动抽取还是由源系统推送?是增量抽取还是全量抽取?是按照每日抽取还是按照每月抽取?
2.数据转换
数据转换实际上还包含了数据清洗的工作,需要根据业务规则对异常数据进行清洗,主要将不完整数据、错误数据、重复数据进行处理,保证后续分析结果的准确性。
数据转换就是处理抽取上来的数据中存在的不一致的过程。数据转换一般包括两类:第一类:数据名称及格式的统一,即数据粒度转换、商务规则计算以及统一的命名、数据格式、计量单位等;第二类:数据仓库中存在源数据库中可能不存在的数据,因此需要进行字段的组合、分割或计算。主要涉及以下几个方面:
①空值处理:可捕获字段空值,进行加载或替换为其他含义数据,或数据分流问题库
②数据标准:统一元数据、统一标准字段、统一字段类型定义
③数据拆分:依据业务需求做数据拆分,如身份证号,拆分区划、出生日期、性别等
④数据验证:时间规则、业务规则、自定义规则
⑤数据替换:对于因业务因素,可实现无效数据、缺失数据的替换
⑥数据关联:关联其他数据或数学,保障数据完整性
实体解析
简说:来自不同的数据源的数据,即便他们表示的是同样的对象(实体),但是具体的数据有可能是不一样的。
实体解析(Entity resolution)后的记录合并(Merge)
找出了表示同一对象的记录以后,如何合并这些数据,仍然是一个问题。如果不同的记录,各个字段只有拼写错误或者采用了不同的同义词等情况,合并记录不是困难的事情。但是如果数据本身存在冲突,要找到哪个值是正确的,不是件容易的事。在这种情况下,我们可以把所有的结果都报告出来。
-
成本与性能平衡
适当的数据冗余可换取查询和刷新性能,不宜过度冗余与数据复制。
-
数据可回滚
处理逻辑不变,在不同时间多次运行数据的结果需确定不变。
-
一致性
相同的字段在不同表中的字段名必须相同。
-
命名清晰可理解
表命名规范需清晰、一致,表命名需易于下游的理解和使用。
3.数据加载
数据加载的主要任务是将经过清洗后的干净的数据集按照物理数据模型定义的表结构装入目标数据仓库的数据表中,如果是全量方式则采用LOAD方式,如果是增量则根据业务规则MERGE进数据库,并允许人工干预,以及提供强大的错误报告、系统日志、数据备份与恢复功能。整个操作过程往往要跨网络、跨操作平台。
在实际的工作中,数据加载需要结合使用的数据库系统(Oracle、Mysql、Spark、Impala等),确定最优的数据加载方案,节约CPU、硬盘IO和网络传输资源。
参考资料 https://cloud.google.com/learn/what-is-etl?hl=zh-cn https://blog.csdn.net/Mogeko1/article/details/129427039 https://zhuanlan.zhihu.com/p/550273838