ETL简介及开发流程概述
[TOC]
前言
ETL是BI项目最重要的一个环节
ETL将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。
ETL通常情况下会花掉整个项目的1/3的时间,ETL设计的好坏直接关接到BI项目的成败。
名词简介
数据仓库
英文全称为Data Warehouse,简称为DW。
数据仓库之父比尔·恩门(Bill Inmon)在1991年出版的《Building the Data Warehouse》(《建立数据仓库》)一书中所提出的定义被广泛接受——数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策(Decision Making Support)。
换句话说,数据仓库是一个以实现特定分析决策为目的,能够随时间的变化,稳定地、持续地为这个需求提供所需要的数据的集合。
业务库与数据仓库的不同:
业务库通常是面向事务来设计的,而数据仓库则是面向主题来设计的。
业务库尽量避免冗余,而数据仓库则会有意引入冗余,以便于快速分析。
业务库为捕获数据而设计,数据仓库是为分析数据而设计。
操作型数据存储
英文全称为Operational Data Store,简称ODS。
是数据仓库体系结构中的一个可选部分,也被称为贴源层。
ODS具备数据仓库的部分特征和OLTP( On-Line Transaction Processing 联机事务处理过程, 前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果) 系统的部分特征。
它是“面向主题的、集成的、当前或接近当前的、不断变化的”数据。
ODS的特征如下:
- 支持大量并发用户定期添加和修改数据。
- 反映随时变化的单位状态,但不保存其历史记录。
- 包含大量数据。
- 可以进行优化以对事务活动做出响应。
- ……
ODS的作用如下:
在业务系统和数据仓库之间形成一个隔离层
降低数据来源复杂性
转移一部分业务系统细节查询的功能
降低业务系统查询压力
完成数据仓库中不能完成的一些功能
数据仓库中存储的数据粒度是根据需要而确定的,有时DW并不存储过于细节的数据,但ODS可以。
数据集市
数据集市(Data Mart),也叫数据市场,为满足特定的部门或者用户需求,按照多维的方式进行存储,包括定义维度、需要计算的指标、维度的层次等,生成面向决策分析需求的数据立方体。
数据集市,是企业级数据仓库的一个子集,主要面向部门级业务,只面向某个特定的主题。
数据集市数据来源于企业范围的数据库、专业的数据仓库。
ETL简介
抽取(Extract)
一般抽取过程需要连接到不同的数据源,在业务库与ODS之间建立同步机制,将不同数据源的数据统一放至ODS中,共清洗转换使用。
转换(Transform)
任何对数据的处理过程都是转换。通常包括且不限于以下操作:
- 移动数据
- 根据规则验证数据
- 数据内容和数据结构的修改
- 将多个数据源的数据集成
- 根据处理后的数据计算派生值和聚合值
此部分最为繁琐,通常会占用ETL开发时间的2/3左右
加载(Load)
将清洗、转换完的数据加载到数据仓库中。
ETL开发流程
graph LR; 业务库-- "抽取[E]、清洗" -->ODS; ODS-- "转换[T]、加载[L]" -->DW; DW-- "转换[T]、加载[L]" -->DW; DW-- "转换[T]、加载[L]" -->DM; DM-- "转换[T]、加载[L]" -->DM; DM-->BI前端工具;
抽取数据源中的数据
对于不同数据源
通常我们需要将多个不同的数据源中的数据整合到统一的BI数据仓库中。
ODBC
可以通过ODBC的方式创建DBLink——如SQL Server和Oracle之间。如果不能建立数据库链接,可以有两种方式完成,一种是通过工具将源数据导出成.txt或者是.xls文件,然后再将这些源系统文件导入到ODS中。
使用程序接口
常用的ETL工具为**Spoon(Kettle)**。使用Spoon定义输入输出,两端可为文件、数据库、流等。文件包括规范的日志文件以及Excel等。
以及一些其他带有类似功能的数据库工具,也可以完成此类操作。
对于相同数据源
对于相同的数据源,如同在Oracle中,可在DBMS自带的dblink基础上访问自身数据,使用Oracle procedure(存储过程)通过进行抽取,存放至DW中。亦或者是类似于SQL Server间可使用SSIS服务等等。
选择数据更新方式
全量加载:全表删除后再进行数据加载的方式。
如果每次更新的数据量占总量1/4以上,则可以考虑全量更新。
增量加载:目标表仅更新源表变化的数据。
- 数据量巨大的目标表。
- 源表变化数据比较规律,例如按时间序列增长或减少。
- 源表变化数据相对数据总量较小。
- 目标表需要记录过期信息或者冗余信息
- 业务系统能直接提供增量(delta)数据
一般情况下,业务系统会记录业务发生的时间。
我们可以用来做增量的标志,每次抽取之前首先判断ODS中记录最大的时间,然后根据这个时间去业务系统取大于这个时间所有的记录。利用业务系统的时间戳,一般情况下,业务系统没有或者部分有时间戳。
处理不合格数据
首先加载来自ODS中的数据,在加载的过程中,通常有三类不合格数据需要我们去处理:
在加载的过程中,通常有三类不合格数据需要我们去处理:
不完整数据
包括客户名称缺失、联系方式确实、地址缺失等。通常需要将这类数据过滤出来,写入Excel向数据产生者确认补全。
错误数据
包括字符集错误、日期格式错误、长度过长等等。这类问题会导致ETL流程执行失败,需要在ETL相关操作中添加操作日志,记录这些错误。事先也需要通过写SQL的方式去排查问题数据,交给业务部门处理,保证数据可靠。
重复数据
如相同维度下出现多条数据,如果重复量过多则需要制定过滤规则,并需要向业务部门确认。
对数据进行整合计算
这块需要更具具体的BI分析规则来定。通常包括以下部分:
数据整理
将不同数据规则的数据统一成相同格式,便于聚合操作。
数据聚合
ODS中的数据粒度过细,需要将数据以数据仓库的规则进行聚合,以便于分析使用。
以Oracle为例,通常转换步骤使用存储过程(procedure)来完成。
首先使用存储过程将ODS中的数据加载到DW中,此时的数据字段较为冗余,相对的DW表数据符合某种业务主题,比如“用户的录单信息”,需要整合多张ODS中的表,存放到同一张DW表中,便于计算。此处也会过滤一些不必要的字段,以及添加一些冗余字段等。
数据计算
整合完成后可以按照BI需求,对数据进行分组计算,加载到DM层中,以供BI工具直接调用展示。如根据部门BI业务规则,计算KPI数据,通常会将事实表与维度表相关联,形成符合业务模型的多维数据集。
一个简单的流程示例
使用Kettle将MySQL的数据加载入Oracle
对数据进行整合计算
示例:
ETL_DM_SHOPPING_INFO.prc
1 | CREATE OR REPLACE PROCEDURE ETL_DM_SHOPPING_INFO(START_TIME DATE, |
加载展示
加载的展现形式有很多种,比如使用QlikView作为前端报表工具。