ETL??
ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析的依据。 ETL是BI项目重要的一个环节,BI项目中,通常情况下ETL会花掉整个项目的1/3的时间,ETL设计的好坏直接关接到BI项目的成败。
ETL的设计分三部分:数据抽取、数据的清洗转换、数据的加载。在设计ETL的时候我们也是从这三部分出发。数据的抽取是从各个不同的数据源抽取到ODS中(这个过程也可以做一些数据的清洗和转换),在抽取的过程中需要挑选不同的抽取方法,尽可能的提高ETL的运行效率。ETL三个部分中,花费时间最长的是T(清洗、转换)的部分,一般情况下这部分工作量是整个ETL的2/3。数据的加载一般在数据清洗完了之后直接写入DW中去。
ETL的实现有多种方法,常用的有三种,一种是借助ETL工具如Oracle的OWB,SQL server 2000的DTS,SQL Server2005的SSIS服务,informatic等实现,一种是SQL方式实现,另外一种是ETL工具和SQL相结合。前两种方法各有各的优缺点,借助工具可以快速的建立起ETL工程,屏蔽了复杂的编码任务,提高的速度,降低的难度,但是缺少灵活。SQL的方法优点是灵活,提高ETL运行效率,但是编码复杂,对技术要求比较高。第三种是综合了前面二种的优点,会极大的提高ETL的开发速度和效率。
一、数据的抽取
这一部分需要在调研阶段做大量的工作,首先要搞清楚数据是从几个业务系统中来,各个业务系统的数据库服务器运行什么DBMS,是否存在手工数据,手工数据量有多大。是否存在非结构化的数据等等当收集完这些信息之后才可以进行数据抽取的设计。
1、对于与存放DW的数据库系统相同的数据源处理方法
这一类数源在设计比较容易,一般情况下,DBMS(SQLServer,Oracle)都会提供数据库链接功能,在DW数据库服务器和原业务系统之间建立直接的链接关系就可以写Select 语句直接访问。 2、对于与DW数据库系统不同的数据源的处理方法。
对于这一类数据源一般情况下也可以通过ODBC的方式建立数据库链接,如SQL Server和Oracle之间。如果不能建立数据库链接,可以有两种方式完成,一种是通过将源数据,通过工具将数据导出成.txt或者
是.xls文件,然后再将这些源系统文件导入到ODS中。另外一种方法通过程序接口来完成。
3、对于文件类型数据源(.txt,.xls),可以培训业务人员利用数据库工具将这些数据导入到指定的数据库,然后从指定的数据库抽取。或者可以借助工具实现,如SQL SERVER 2005 的SSIS服务的平面数据源和平面目标等组件导入ODS中去。
4、增量更新的问题
对于数据量大的系统,必须考虑增量抽取。一般情况,业务系统会记录业务发生的时间,我们可以用来作增量的标志,每次抽取之前首先判断ODS中记录最大的时间,然后根据这个时间去业务系统取大于这个时间所有的记录。利用业务系统的时间戳,一般情况下,业务系统没有或者部分有时间戳。
二、数据的清洗转换
一般情况下,数据仓库分为ODS、DW两部分,通常的做法是从业务系统到ODS做清洗,将脏数据和不完整数据过滤掉,在从ODS到DW的过程中转换,进行一些业务规则的计算和聚合。
1、数据清洗
数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。不符合要求的数据主要是有不完整的数据、错误的数据、重复的数据三大类。
A、不完整的数据,这一类数据主要是一些应该有的信息缺失,如供应商的名称,分公司的名称,客户的区域信息缺失、业务系统中主表与明细表不能匹配等,对于这一类数据,过滤出来,按缺失的内容分别写入不同Excel文件向客户提交,要求在规定的时间内补全。补全后才写入数据仓库。
B、错误的数据,这一类错误产生的原因是业务系统不够健全,在接收输入后没有进行判断直接写入后台数据库造成的,比如数值数据输成全角数字字符,字符串数据后面有一个回车,日期格式不正确,日期越界等,这一类数据也要分类,对于类似于全角字符、数据前后有不面见字符的问题只能写SQL的方式找出来,然后要求客户在业务系统修正之后抽取,日期格式不正确的或者是日期越界的这一类错误会导致ETL运行失败,这一类错误需要去业务系统数据库用SQL的方式挑出来,交给业务主管部门要求限期修正,修正之后再抽取。
c、重复的数据,对于这一类数据,特别是维表中会出现这种情况,将重复的数据的记录所有字段导出
来,让客户确认并整理。
数据清洗是一个反复的过程,不可能在几天内完成,只有不断的发现问题,解决问题。对于是否过滤,是否修正一般要求客户确认,对于过滤掉的数据,写入Excel文件或者将过滤数据写入数据表,在ETL开发的初期可以每天向业务单位发送过滤数据的邮件,促使他们尽快的修正错误,同时也可以作为将来验证数据的依据。数据清洗需要注意的是不要将有用的数据过滤掉了,对于每个过滤规则认真进行验证,并要用户确认。
2、数据转换
数据转换的任务主要进行不一致的数据转换、数据粒度的转换、一些商务规则的计算。
A、不一致数据转换,这个过程是一个整合的过程,将不同业务系统的相同类型的数据统一,比如同一个供应商在结算系统的编码是XX0001,而在CRM中编码是YY0001,这样在抽取过来之后统一转换成一个编码。
B、数据粒度的转换 业务系统一般存储非常明细的数据,而数据仓库中数据是用来分析的,不需要非常明细的数据,一般情况下,会将业务系统数据按照数据仓库粒度进行聚合。
C、商务规则的计算 不同的企业有不同的业务规则,不同的数据指标,这些指标有的时候不是简单的加加减减就能完成,这个时候需要在ETL中将这些数据指标计算好了之后存储在数据仓库中,供分析使用。
三、ETL日志、警告发送。 1、ETL日志
ETL日志分为三类,一类是执行过程日志,这一部分日志是在ETL执行过程中每执行一步的记录,记录每次运行每一步骤的起始时间,影响了多少行数据,流水账形式。一类是错误日志当某个模块出错的时候写错误日志,记录每次出错的时间,出错的模块以及出错的信息等。第三类日志是总体日志,只记录ETL开始时间,结束时间是否成功信息。如果
使用ETL工具,ETL工具会自动产生一些日志,这一类日志也可以作为ETL日志的一部分。记录日志的目的是随时可以知道ETL运行情况,如果出错了,出错在那里。 2、警告发送
ETL出错了,不仅要与ETL出错日志而且要向系统管理员发送警告,发送警告的方式多种,一般常用的就是给系统管理员发送邮件,并附上出错的信息,方便管理员排查错误。
ETL是BI项目的关键部分,也是一个长期的过程,只有不断的发现问题并解决问题,才能使ETL运行
效率更高,为项目后期开发提供准确的数据。
既然CloverETL没有这方面的考虑,那我目前还是持观望的态度。
ETL 是一切数据仓库应用的基础。CloverETL 是一个基于 Java 的开源的 ETL 框架。核心的算法就是一个数据流网络。
http://cloveretl.berlios.de 附件是这个框架比较简单的设计思想:
对这个ETL工具我有过初步的研究。 但我觉得这个东西离实用的ETL还差得远。
我觉得ETL一个重要的问题就是如何增量抽取数据的问题。这是从数据仓库的需求引出的。一个数据仓库是用来对大量数据进行统计分析的,需要对原始数据进行某种规则的同步。不可能每次都清空,然后把所有数据都导入吧?对真正大量的数据(百万至千万级记录),显然是不可能的。
不同领域的数据仓库的ETL区别非常大. 并且在大部分数据仓库的ETL处理过程中, 转换占绝大部分时间. ETL工具之间的竞争也都在转换上下功夫,因为在一个数据仓库的ETL的设计和实现过程中,T将占80%以上人力资源.
呵呵, 是的 “T将占80%以上人力资源”
不过,这个只是人力资源,而不是机器资源, 一旦配置好之后, 只要不是进行大批量的排序之类的操作, 转换比装载快许多, ETL的速度瓶颈绝对不在转换上 我一直在想,怎么简化ETL工具的使用,尽量让整个BI项目组成员都用起来,而不仅仅是ETL工程师。工具而已,没有必要复杂,越简单越好。转换可以分为两类: 一类是对单条记录的操作,另一类是象排序之类的操作,需要多记录关联。对于,第一类, 可以简单的通过增加线程数来提供性能,机器的裕量一般都很高,犯不着节省。对于,后一类,在实际的项目中又有多少呢?我没有见过(当然,这个与我的经历短有关)。片面倒是真的, 因为是只做过中国移动经分,转换不复杂, 在其他行业估计不适用, 据我所知,在银行的数据仓库里面, T比较复杂。 做数据仓库, 我有一个观点:
尽量避免使用ETL工具进行复杂的转换。我以前做项目之时,就是因为过分的依赖ETL工具转换功能,导致ETL这块成为整个项目组的瓶颈。后来,二期建设的时候, 在数据仓库里面加入了ODS(源数据)层,然后使用存储过程将数据导入到DW层,项目组成员都会写存储过程,转换的实现要简单很多,减轻了项目组对ETL的依赖。虽然日处理的速度延长一个小时左右,但从整个项目的角度来讲,绝对利大于弊。 当然,千万级以上的数据还是用工具来T。
个人的关观点:
1.不应把ETL和BI工具开发在一起,因为一个大的综合性的数据仓库ETL和BI往往分别建立在各自的服务器上.
2.应用ETL工具主要是用来降低人力资源和缩短ETL开发时间.然而在ETL工具中,E&L部分只不过是几个和数据库下载和装载相关的接口,可见E&L本身没什么可开发的因为E&L必须依赖于数据库.E&L执行的好坏主要取决于数据库的设计.所以ETL工具主要是用来处理T的.
3.如果一个ETL工具主要用于BI,不如把这个工具称为BI工具.ETL和BI完全是两个范畴在数据仓库系统里.
我所知道的几个大型(20-100TB)数据仓库所用的ETL工具是Ab Initio. 只有4-5个components of Ab Initio是用来做E&L,而剩下的近百个components并结合200多个functions(date, string, math, inquiry, error, ...)都是用来处理T的.
ETL(Extraction,Transformation,Loading)即数据的抽取、转换与装载。ETL工具可将业务系统中分布的、异构数据源中的数据如关系数据、平面数据文件等抽取到临时中间层后进行清洗、转换、集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础,为辅助决策、分析、查询提供统一的数据依据。
ETL是数据仓库建设的重要环节。相对于关系数据库,数据仓库技术没有严格的数学理论基础,它更面向实际工程应用。所以从工程应用的角度来考虑,按着物理数据模型的要求加载数据并对数据进行一些系列处理,处理过程与经验直接相关,同时这部分的工作直接关系数据仓库中数据的质量,从而影响到联机分析处理和数据挖掘的结果的质量。
数据仓库建设是一个独立的数据环境,需要通过抽取过程将数据从联机事务处理环境、外部数据源和脱机的数据存储介质导入到数据仓库中;在技术上,ETL主要涉及到关联、转换、增量、调度和监控等几个方面;数据仓库系统中数据不要求与联机事务处理系统中数据实时同步,所以ETL可以定时进行。但多个ETL的操作时间、顺序和成败对数据仓库中信息的有效性至关重要。
ETL作为BI/DW(Business Intelligence)的核心和灵魂,能够按照统一的规则集成并提高数据的价值,是负责完成数据从数据源向目标数据仓库转化的过程,是实施数据仓库的重要步骤。如果说数据仓库的模型设计是一座大厦的设计蓝图,数据是砖瓦的话,那么ETL就是建设大厦的过程。在整个项目中最难部分是用户需求分析和模型设计,而ETL规则设计和实施则是工作量最大的,约占整个项目的60%~80%,这是国内外从众多实践中得到的普遍共识。
ETL工具中典型的代表产品有Informatica的PowerCent、Ascential的Datastage、Oracle的OWB、Microsoft SQLServer2000的DTS、Microsoft SQLServer2005的SSIS服务等。目前在数据抽取过程中经常采用三种方法,第一种是借助专业的ETL工具实现;第二种是SQL编程方式实现;第三种是ETL工具和SQL相结合。前两种方法各有优缺点,借助工具可以快速的建立起ETL工程,屏蔽复杂的编码任务,提高速度,降低难度,但缺少灵活性。
SQL编程的优点是灵活,提高ETL运行效率,但是编码复杂,对技术要求比较高。第三种综合了前两种的优点,极大的提高ETL的开发速度和效率。
在数据环境改造和数据库工程实施中(包括统一数据中心的建设过程中),我们可根据业主方的具体情况推荐相应的ETL工具采购或进行ETL及调度软件的定制研发,在节省投入、提高效率的前提下推进数据库/数据仓库的建设,贯彻落实好规划成果。
因篇幅问题不能全部显示,请点此查看更多更全内容