ETL是数据仓库的第一步,指的是数据的EXTRACT、TRANSFER、LOAD三个步骤,解释分别是从操作系统中抽取,数据转化,入库。
数据抽取:
1. 抽取的数据文件格式要接近源系统的数据结构(这一点为了稳定、易于理解)。
2. 抽取过程中需要过滤掉数据仓库不需要的数据记录以及字段,这样会减少文件抽取、后续入库、转换的压力。对于记录数可以使用增量、全量的抽取方式,字段可以预先定义(这样做会有一些弊端,比如数据仓库中用户的分析需求是变化的,可能后续会需要增加某些字段或者记录的导出)。
3. 一般来讲,数据抽取需要减少对源系统的影响,和其他团队的依赖,并减少网络依赖;为了减少对源系统的影响,如果对数据的时效性要求不高的话,可以一定时间段比如每小时、每天抽取一次数据文件;抽取文件的时间选择系统不被使用、或者低频的时间;对于某些 系统,由于抽取文件时间较长、不同系统之间有着不同的监管需求,可以采用建立备库,使得对数据抽取工作集中在备库上进行,减少对核心系统的访问与修改,规避源系统风险。
数据转换:
数据转换一般来讲,包含数据清洗、与转换,是将源系统抽取出来的文件进行过滤,格式转换生成可以直接加载到数据仓库的文本文件,进行入库(数据结构与数据仓库中的表定义一致)。
数据清洗: 过滤掉不符合条件或者错误的数据(这种 情况一般发生在 源系统尚不稳定、数据仓库建立初期),不过对于比较成熟的数据仓库 ,会建立一定的监测机制进行一些特殊校验,例如数据是否符合业务规则,比如两张报表的数据金额无法对的上,需要告知业务人员进行确认等等。
数据转换:对于不一致的数据进行转化:来自不同源系统的数据进行统一(客户号的统一等),字段类型,空值转换。
数据入库:
数据入库是在数据仓库中进行的,将原有数据使用insert/load等方式进行入库。
ETL过程的实现:
ETL这个过程的目标是完成从不同系统将数据抽取 、清洗、导入数据仓库 以便于后续的分析使用。目前的ETL过程实现主要有下面几种方式:
1. 数据库外部的ETL处理
顾名思义,指的是大多数据的转换工作都在数据库之外处理。这些ETL过程独立,可以与多种数据源协同工作,将数据源进行集成。这种操作的优点是 执行速度比较快。缺点是大多数ETL步骤中的可扩展性必须由数据库的外部机制提供,如果外部机制不具有可扩展性,那ETL处理就不能扩展。
2. 数据库段区域中的ETL处理。
这种ETL过程使用数据库作为唯一的控制点。多种数据源的原始数据大部分未做修改就被载入到中立的段结构中。如果源系统是关系数据库,段表将是典型的关系数据库;否则数据将被分段置于包含列VARCHAR(4000)的表中,以便在数据库中进行转换。数据库段区域的处理方式是ELT。在实际数据仓库中经常采用 这种方式。优点是抽取的数据首先是提供一个缓冲以便于进行复杂的转换,减轻了ETL进程的复杂度。 缺点是:在段表中存贮中间结果和来自数据库中源系统的原始数据时,转换过程将中断; 大多数转换可以使用类SQL的数据库功能来解决,但是不是处理所有的ETL问题的最优语言。
3. 数据库中的ETL处理
数据库中的ETL处理方式 使用数据库作为完整的数据转换引擎,在转换过程中不使用段。数据库中的ETL处理具有数据库段区域中的ETL处理的优点,同时充分利用而数据库的数据转换引擎功能,但是这要求数据库必须完全具有这种转换引擎功能。目前的主流数据库产品Oracle9i[5]等可以提供这种功能
综上分析三种ETL处理方式,数据库外部的ETL处理可扩展性差,不适合复杂的数据清洗处理,数据库段区域中的ETL处理可以进行复杂的数据清洗,而数据库中的ETL处理具有数据库段区域ETL处理的优点,又利用了数据库的转换引擎功能。所以为了进行有效的数据清洗,应该使用数据库中的ETL处理。