- 1 -
中国科技论文在线
基于过程依赖关系的 ETL 流程监控研究和
应用
蒋常春,邹仕洪**
作者简介:蒋常春,(1987-),男,硕士研究生,主要研究方向:数据库,数据挖掘。
通信联系人:邹仕洪,男,副教授,主要研究方向:移动计算与移动信息安全. E-mail: zoush@
(北京邮电大学网络技术研究院,北京 100876) 5
摘要:数据集成是商业智能中的关键环节,数据集成 ETL 的质量和效率直接影响着数据仓库
的正确性。完善的流程监控系统能及时发现 ETL 出现的问题并纠正,大大减少监控成本,提
供 ETL 整体效率。本文研究和利用 ETL 具体过程和数据之间的依赖关系,设计出基于依赖关
系的流程控制,实现了 ETL过程自动序列化执行和层次化监控效果,在实际项目中起到了明
显优化效果 10
关键词:数据仓库;ETL;监控
中图分类号:TP392
Procedure Reliance Based Research and Application of
Monitoring System in ETL 15
JIANG Changchun, ZOU Shihong
(Institute of Network Technology, Beijing University of Posts and Telecommunications,
Beijing 100876)
Abstract: Data Integration is a very important step in enterprise BI system, while the quality and
efficiency of ETL impact directly on the correctness of Data Warehouse. Good monitoring system 20
is able to find out immediatly the the problem occured and make possible remediation, thus
rapidly reduce the cost of monitoring, and improve efficiency of the whole ETL system. In this
paper, research is done on the reliance of the procedures and data in ETL processing, based on
which a monitoring system is designed, with achievement of sequential processing and
hierarchical monitor. 25
Keywords: Data Warehouse; ETL; Monitor
0 引言
近半个世纪,科学技术取得迅猛的发展,信息化进程也不断推进,尤其是互联网和移动
互联网的突飞猛进,让社会产生的数据量出现飙升,而且数据来源也更加多样化。面对海量30
的数据,越来越多的企业认识到数据不再是负担,充分利用和挖掘海量数据蕴含的价值,在
理解用户、发掘市场、节约成本等等方面能取得巨大的效益。发掘和利用数据的价值,基本
任务是要有海量数据的集成解决方案。
针对数据集成,当前已有成熟的商用系统如 Informatica、Oracle Warehouse Builder、
DataStage 等,也有免费的开源工具如 Kettle 和 Talend 等,更有灵活性高的自开发 ETL 工具。35
商业数据集成产品功能强大、效率高、服务支持完善,但是投资大、部署维护复杂;开源工
具免费使用、功能完善,但可能不够灵活;而自开发 ETL 工具灵活,能最贴切适用企业内
部数据集成系统,只是要求一定的技术开发能力[1]。对于中小型技术型企业,尤其是互联网
企业而言,基本技术一般不是难题,特别的是大型技术型企业有强大的技术背景,能够开发
完善的最适合自己的数据集成系统。 40
ETL 的工作是集成数据,为后续数据仓库提供数据来源。ETL 的质量直接影响数据仓
库中数据的准确性,完善的监控系统能保证 ETL 的数据质量。当 ETL 系统变得庞大和复杂
- 2 -
中国科技论文在线
时,对 ETL 过程的监控和管理显得尤为重要。本文针对自开发 ETL 过程中,ETL 各个流程
步骤的监控进行了研究,提出了以元数据为中心利用过程之间的依赖关系来设计 ETL 监控
系统的思路,以求实现序列化层次化的 ETL 监控办法。 45
1 数据仓库和 ETL
数据仓库
数据仓库是一种以统计分析为目的关系数据库,区别于以在线交易为目的的关系数据
库。按照“数据仓库之父”William Inmon 的描述,数据仓库具有四个特征:面向主题的、
集成的、非易失的和时变的[2]。 50
面向主题 数据仓库设计的目标是分析数据,分析的需求是针对某个主题的,比如针
对软件产品使用情况的分析需求有新增用户数、累计用户数、用户流失量、用户活跃度等,
需求的主题性决定了数据仓库面向主题的特征。
集成 集成特性跟面向主题密切相关。为了构建面向主题的数据仓库,需要从多样化
的数据源中抽取、整理、转换和规范化数据,再集中到数据仓库中。 55
非易失 非易失指一旦数据进入数据仓库,就不能变更。因为数据仓库是要分析数据
的变化,所以数据源中数据可以变更,而在数据仓库中数据不会修改,数据变更以变更历史
的形式作为新数据添加进数据仓库。
时变 时变指数据仓库反映了数据在不同时间的变化。数据是时间上的一个快照,数
据仓库需要累积这些快照。为了发掘数据的变化趋势和事物之间的关联规律,数据仓库需要60
积累大量的历史数据。
ETL
ETL 是一个将数据从源系统抽取并集中到数据仓库中的自动化过程。ETL 的概念并不
局限于数据仓库中,应用中广泛存在数据搜集整合的过程,这也是 ETL,更通用的说法是
数据集成。在数据仓库系统建设中,ETL 是最核心的环节之一,也是最费时的环节。ETL65
过程的质量直接影响着数据仓库中数据的准确性和可用性,ETL 的效率也影响着数据分析
处理的进度和用户使用。
ETL 代表数据抽取(extract)、数据传输(transform)、数据加载(load),在实际中
ETL 包含更广泛的过程。
数据抽取 70
数据抽取的目标是从数据源抽取出需要的数据。数据来源多种多样,一般包含交易数据
库、应用系统数据、文本文件等。不同类型的数据源需要要开发不同的抽取方式,这就决定
了抽取过程是异常复杂的。抽取过程要考虑的因素也很多,比如对源系统的嵌入程度,对源
数据的变更要求,对源环境的负载压力,以及抽取过程的执行频度,等等。不考虑多样化数
据源抽取方法实现的差异,总体上抽取办法有 2 类:全量抽取和增量抽取[3]。全量抽取指抽75
取源系统所有数据,这类办法优点是逻辑简单,缺点很明显----数据量大、时间长。增量抽
取指抽取有变化的数据,这类办法优点是最小化抽取数据的量,速度快,缺点是逻辑比较复
杂,具体实施有难度。增量抽取的难点在于如何识别数据变化,即 CDC(Change Data Capture)。
常见 CDC 方法有全表对比、基于时间戳、基于日志、基于触发器等[3]。ETL 一般会结合这
两类抽取办法,以较大周期实施全量抽取(至少一次做初始化),以较小周期做增量抽取。 80
- 3 -
中国科技论文在线
数据转换
数据清洗和转换也是 ETL 中非常重要的过程,同时也非常复杂耗时,跟业务逻辑紧密
相关。抽取的源数据一般存在大量的不一致情况,比如数据噪音、数据遗漏、编码差异、数
据定义不一致,还会有业务逻辑的异常等。数据仓库是一个一致性的数据集成环境,所以要
对源数据进行数据清洗、修正、集成、转换和归约操作,保证数据的质量[4]。数据清洗和转85
换工作可以独立成一个中间阶段进行,也可以在 ETL 的其他环节中实施部分。
数据传输
数据传输值将抽取出的数据转移到数据仓库环境或者一个中间阶段环境。数据传输概念
简单,常见办法有采用文件传输和利用应用系统接口。
数据加载 90
数据加载指加载数据到数据仓库环境,常见办法有采用数据库驱动接口和批量加载工
具。
元数据
数据仓库的另一个组成部分是元数据,元数据(Metadata)是描述数据的数据,它在数
据仓库中扮演着极为重要的作用,没有元数据我们将无法理解数据仓库。不同人对元数据的95
理解不完全一样,但元数据一般包含数据结构定义、数据模型定义、数据转换规则、数据流
程结构、数据源和数据模型的关系、数据接口等等方面。元数据可以放在数据仓库中,也可
以独立出来,可以放在数据库中,也可以直接保存在文件系统中。不管元数据以何种方式实
现,都应该有良好的管理办法。
数据仓库结构 100
一个较完整的数据仓库系统架构图如图表 1,包含了数据抽取、临时存储和清理、数据
仓库、数据集市、用户分析接口、元数据等组成部分[3]。其中临时存储区有时会直接放在数
据仓库中,而用户分析也会有直接访问数据仓库明细数据的接口。其中 ETL 包含数据源到
数据仓库这半部分。
105
- 4 -
中国科技论文在线
图 1 数据仓库系统架构
ETL 监控系统
ETL 监控需要从多方面考虑,包括时间、I/O、网络等。主要的性能指标,装载过程包110
含耗时、每秒处理记录数、每秒读取写入记录数、吞吐量,数据转换过程有 CPU 利用率、
内存使用情况、服务争夺等[1]。性能指标的获取方式一般是日志记录,应该在关键环节尽量
详细地记录日志,为性能分析提供素材。
2 ETL 过程依赖关系
过程和数据的依赖关系 115
ETL 是以数据为核心的过程流。一般地,对于其中的每个处理过程,都有一个或多个
数据来源作为过程的数据输入,也有一个或多个数据集作为过程数据输出。而该过程的输出
数据集又会是下一个过程的数据输入。因此不同过程在执行先后顺序上有依赖关系,依赖的
对象是数据集。为了简化描述,下文中将作为输入或者输出的数据统称为“表”,这里的表
为泛指,存在形式包括数据库中的表和文件等数据集合。 120
如此,上述依赖关系可用图 2 表示。图 2 中,过程 I 以表 A 作为输入,输出表 B,表 B
和表 C 又是过程 II 的输入,表 B 是过程 III 的输入。在真实的 ETL 过程中,将会形成庞大
且复杂的依赖关系,这个关系网是一个有向图。如果把“过程”简化为带权的有向连线,这
个图就变成一个 AOE 网,可以利用相关算法做关键路径分析。
数据库
系统
软件系
统
文件
数据源
临时数据集结
区
数据仓库
模型数据
原始数据
集结区 数据仓库
主 题
1
主 题
2
主 题
3
数
据
分
析
数
据
挖
掘
数
据
报
表
元 数 据
数据集市 用户
- 5 -
中国科技论文在线
125
利用依赖关系实现过程序列化执行
如何安排 ETL 中各个过程执行时机是一个重要的问题。可以预估前续过程总执行时间
来决定每个过程的实际执行点。但实际中会出现预估时间和实际执行时间不一致的情况,特
别是实际执行时间长的话,后续过程执行将在输入数据产生之前开始,导致数据异常。最好
的办法就是由输入表触发该过程的执行。 130
具体办法:
A,保存过程和表的依赖关系。由图 2 可见,过程和表的依赖方式有 2 类,过程依赖表
作为输入和作为输出。则图 2 中的依赖关系表如表 1:
表 1 依赖关系配置 135
过程名 表名 方式
过程 I 表 A IN
过程 I 表 B OUT
过程 II 表 B IN
过程 II 表 C IN
过程 II 表 D OUT
过程 II 表 E OUT
过程 III 表 B IN
B,周期维护表的状态。ETL 是周期过程,以最细粒度周期为单位维护表的准备状态。
准备状态包含该表是否准备好可被使用。比如可以定义 3 个状态:INFO、WARNING、
ERROR,分别表示正常、警告、错误,正常表示没有任何问题可以使用,警告表示有一警
告发生,但不影响使用,ERROR 表示错误发生,数据不可靠。举例,以天为最小周期,当140
过程 I 执行完后,各表的状态如表 2:
表 2 表状态示例
时间 表名 状态
表 A INFO
表 B INFO
表 C
表 D
表 E
C,序列化自动调用。当表 A 更新状态后,通过查询表 1 配置的依赖关系,找到以表 A145
为输入的过程,然后启动它们。可以看到过程 II 和过程 III 都将被触发启动。然而过程 II 还
依赖表 C 输入,所以即使被表 A 触发启动了,它检查到表 C 尚未准备好,过程 II 会退出而
不会继续执行,过程 III 会继续执行。当过程 II 或者 III 完整执行以后,会更新表 2 中的各
个数据表的状态,继而触发更后续的过程。如此循环,所有过程将在最早可执行的时间被触
输
出 输
出
输
入
输
入
输
入
输
出
输
入 表 A 过程 I 表 B
表 C 过程 II
表 D
过程 III
表 E
图 2 过程依赖示例
- 6 -
中国科技论文在线
发启动执行,即实现 ETL 所有过程的紧密衔接和序列化调用。 150
上述方法的优点是,相比与预估时间的过程调用,能紧密衔接不同过程的执行,ETL
的各个子过程可以最大可能并行执行,争取整个 ETL 过程的最小时间开销,降低人工参与
度。上述数据可以作为元数据保存在元数据库中,方便统一管理维护。
然而一个可能的缺点是拥塞。ETL 中各个过程之间的执行时间差异可能很大,会出现
大量缓慢的过程在同一段时间内同时执行,发生拥塞,结果是所有过程执行效率降低。一个155
改进办法是,当一个过程确认可执行时,查看 ETL 系统的负载,如果低于阈值,则直接执
行,如果高于阈值,则进入等待队列中。由一个监控进程来负责启动等待队列中的过程。
ETL 层次化的监控
层次化监控指分层次地观察 ETL 过程的执行。比如要知道某天 ETL 是否正常完成,首
先看 ETL 这个总体抽象级别的执行结果,如果正常,就不需要查看具体过程执行的明细;160
如果不正常,则查看 ETL 之下次级模块的执行结果,比如数据抽取模块、数据加载模块、
数据清洗和转换模块,寻找异常的模块,再向下分析,直到找到具体失败的过程。层次化的
监控能减少日常监控的困难程度,监控结果层次清晰、直观易懂,能自动寻找错误,更进一
步,还可以定义自动恢复办法。
扩展图 2,可以设计如图 3 的层次化 ETL 结构。其中过程 I 和过程 VI 都为数据抽取子165
过程,过程 II 和过程 III 都是数据清洗子过程,过程 IV 和过程 V 都为数据加载转换子过程。
图中定义了 3 个抽象过程:数据抽取、数据清洗、数据加载和转换,它们分别代表 ETL 中
3 个大模块,也分别产生抽象数据表:表 X、表 Y、表 Z。最后再一次抽象为 ETL 本身。
170
在 ETL 明细过程的序列化讨论部分,我们利用了各个过程和表的依赖关系,这种依赖
关系依然可以在层次化中体现并加以利用。如数据抽取是一个虚拟过程,产生表为 X 也是
虚拟的表,数据清洗和数据加载同理。这样我们可以在表 1 和表 2 中配置数据,利用序列化
表A 过程 I 表 B
表 C 过程 II
表 D 过 程
表 E
过 程
过程 V
数据抽取 数据清洗 数据加载和转换
ETL
表 F 过程 VI
表 X 表 Y 表 Z
图 3 ETL层次化结构
- 7 -
中国科技论文在线
调用来产生层次结构中上级虚拟过程的执行结果。比如表 B 和表 C 完成以后,会触发数据175
抽取这个虚拟过程的执行,产生数据抽取表 X 这样一个虚拟表。当虚拟表 X、Y、Z 都完成
以后将触发 ETL 这个虚拟过程,最终产生一个 ETL 级别的运行状态,这就是 ETL 最宏观的
执行情况描述。图 3 的层次设计了 3 层,依据具体业务逻辑的复杂度,可以设计层次更多、
结构更复杂的层次关系,满足层次化监控的需要。
ETL 流程结果分析 180
有了 ETL 的序列化和层次化结构,便可实现结构化的分析。分析办法是自顶向下、自
后往前。自顶向下办法是首先查看 ETL 虚拟表的结果状态,如果有异常则,在其输入表 X、
Y、Z 中查找异常,定位以后再到对应的子模块中查找出错的过程,分析具体执行报告。自
后往前办法是,如果过程 V 执行结果有异常,则分析异常来源,如果是表 E,则分析过程
II,依次类推,直到最前端的过程。分析结果报告呈现可以采用格式化文本,也可以采用直185
观的图表方式。
3 项目中的应用
笔者在数据仓库建设项目中,对上述监控方法加以实现。项目中 ETL 包含了的大模块
有:数据抽取、数据入库、数据清洗转换、维表计算、事实表计算。其中数据抽取和数据入
库涉及近 100 张表和日志文件,2 个重要逻辑的数据清洗过程,10 个维表的刷新过程,和 7190
个事实表的刷新过程。每个具体过程执行都会产生详细的日志,在日志记录时隐式调用序列
化脚本,减少对过程逻辑的改动。在每个过程执行完毕后,还会有专门针对该过程的数据进
行业务级的质量验证,以发现潜在的问题,继而反映到输出表的状态中,最终在报告邮件中
体现出来。该监控功能添加以后,简化了每日 ETL 的监控工作,能及时发现 ETL 出现的问
题并定位,方便 ETL 开发和维护人员介入并修正数据。 195
4 总结
ETL 是数据仓库中最复杂最重要的一环,ETL 的质量直接影响数据仓库的数据正确性
和可用性,对数据仓库系统改进的一个重要方面就是对 ETL 监控系统的改进。完善的 ETL
监控系统应当能及时发觉异常的出现,准确的定位问题所在,以及更进一步的自我修复。系
统中的过程依赖是一种简单易懂且广泛存在的关系。本文在实际数据仓库项目中,对 ETL200
监控环节做了认真分析,对过程的依赖关系加以研究,并利用这种依赖关系,设计和实现了
ETL 流程的序列化和层次化控制和监督机制。该机制明显降低了维护人员的工作成本,提
高工作效率。笔者是在自开发 ETL 过程中设计开发的监控机制,然而利用依赖关系这种思
想对专业 ETL 工具开发也能起到有益的指导。
205
参考文献:
[1] Ralph Kimball, Joe Caserta. The Data Warehouse ETL ToolKit[M]. Wiley Publishing,Inc. 2004
[2] William H. Inmon. Building the Data Warehouse[M]. Wiley, 2005
[3] Oracle. Oracle Database Data Warehousing Guide, 11g Release 2.[OL].[2011].
210
[4] and . Data Minig:Concepts and Techniques[M]. Morgan Kaufman,2006