ETL 中的数据清洗设计
1 前言
ETL 即 数 据 抽 取 ( Extract ) 、 转 换
(Transform)、装载( Load)的过程。它是构建数据
仓库的重要环节。数据仓库是面向主题的、集成的、稳
定的且随时间不断变化的数据集合,用以支持经营管理
中的决策制定过程
[1]
。数据仓库主要用于决策分析,为
领导者提供决策支持信息。数据仓库系统中有可能存在
着大量的脏数据,引起的主要原因有:滥用缩写词、惯
用语、数据输入错误、重复记录、丢失值、拼写变化、
不同的计量单位和过时的编码等。即便是一个设计和规
划良好的数据仓库系统,如果其中存在着大量的脏数据,
那么这个系统也是没有任何意义的,因为“垃圾进,垃
圾出”(garbage in, garbage out),系统根本就不可能为
决策分析系统提供任何支持。为了清除脏数据,必须在
数据仓库系统中进行数据清洗。
数 据 清 洗 ( data cleansing/data cleaning/data
scrubing)是一个减少错误和不一致性、解决对象识别
的过程
[2]
。目前有很多数据清洗研究
[2][3][4][6]
和 ETL 研究
[8][9][10]
,但是如何在 ETL 过程中进行有效的数据清洗,
此方面研究不多 。 笔 者认为这包括三方 面的内容:
(1)ETL 处理方式的选择(2)数据清洗的原理及在
ETL 中的应用模型(3)数据清洗的具体实现过程。
2 ETL 处理方式
数据抽取负责完成从数据源找到并取出当前主题
所需的那部分数据,由于数据仓库中各个主题中的数据
是按照前端应用的需求存放的,因此需要对抽取出的数
据进行转换以适应前端应用的需要。转换后的数据就可
以装入数据仓库了,数据加载过程定时进行,并且不同
主题的数据加载任务有各自不同的执行时间表。
常见的 ETL 处理方式可分为以下三种:
(1) 数据库外部的ETL处理
数据库外部的ETL处理方式指的是大多数转换工作都
在数据库之外、在独立的ETL过程中进行。这些独立的
ETL过程与多种数据源协同工作,并将这些数据源集成。
数据库外部ETL处理的优点是执行速度比较快。但缺点
是大多数ETL步骤中的可扩展性必须由数据库的外部机
制提供,如果外部机制不具备扩展性,那么此ETL处理
就不能扩展。
(2) 数据库段区域中的ETL处理
数据库段区域中的 ETL 处理方式不使用外部引擎
而是使用数据库作为唯一的控制点。多种数据源的所有
原始数据大部分未作修改就被载入中立的段结构中。如
果源系统是关系数据库,段表将是典型的关系型表。如
果源系统是非关系型的,数据将被分段置于包含列
VARCHAR2(4000)的表中,以便于在数据库内作进一步
转换。成功地将外部未修改数据载入数据库后,再在数
据库内部进行转换。这就是系列方法载入然后转换。数
据库段区域中的 ETL 处理方式执行的步骤是提取、装
载、转换,即通常所说的 ELT。在实际数据仓库系统中
经常使用这种方式。这种方式的优点是为抽取出的数据
首先提供一个缓冲以便于进行复杂的转换,减轻了
ETL 进程的复杂度。但是这种 ETL 处理的缺点有:(a)
在段表中存贮中间结果和来自数据库中源系统的原始数
据时,转换过程将被中断。(b)大多数转换可以使用类
SQL 的
数据库功能来解决,但它们可能不是处理所有的 ETL
问题的最优语言。
(3)数据库中的ETL处理
数据库中的ETL处理方式使用数据库作为完整的数
据转换引擎,在转换过程中也不使用段。数据库中的
ETL处理具有数据库段区域中的ETL处理的优点,同时
又充分利用了数据库的数据转换引擎功能,但是这要求
数据库必须完全具有这种转换引擎功能。目前的主流数
据库产品Oracle 9i
[5]
等可以提供这种功能。
综上分析三种ETL处理方式,数据库外部的ETL处
理可扩展性差,不适合复杂的数据清洗处理,数据库段
区域中的ETL处理可以进行复杂的数据清洗,而数据库
中的ETL处理具有数据库段区域ETL处理的优点,又利
用了数据库的转换引擎功能。所以为了进行有效的数据
清洗,应该使用数据库中的ETL处理。
3 数据清洗的原理及在ETL中的应用模型
数据清洗的目的是保证数据仓库数据质量。
3.1 数据质量
对于什么是数据质量,文献[3]将其定义为数据的
一致性(consistency)、正确性 (correctness)、完整性
(completeness)和最小性(minimality)这4个指标在信息系
统中得到满足的程度。根据处理的是单数据源还是多数
据源以及问题是模式层的还是实例层的,文献[4]将数
据质量问题分为4类:单数据源模式层问题(如缺少完
整性约束、糟糕的模式设计等)、单数据源实例层问题
评论0