ETL讲解(很详细!!!)

ETL讲解(很详细!!!)数据库

 

ETL是将业务系统的数据通过抽取、清洗转换以后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一块儿,为企业的决策提供分析依据。 ETL是BI项目重要的一个环节。 一般状况下,在BI项目中ETL会花掉整个项目至少1/3的时间,ETL设计的好坏直接关接到BI项目的成败。       编程

  ETL的设计分三部分:数据抽取、数据的清洗转换、数据的加载。在设计ETL的时候咱们也是从这三部分出发。数据的抽取是从各个不一样的数据源抽取到ODS(Operational Data Store,操做型数据存储)中——这个过程也能够作一些数据的清洗和转换),在抽取的过程当中须要挑选不一样的抽取方法,尽量的提升ETL的运行效率。ETL三个部分中,花费时间最长的是“T”(Transform,清洗、转换)的部分,通常状况下这部分工做量是整个ETL的2/3。数据的加载通常在数据清洗完了以后直接写入DW(Data Warehousing,数据仓库)中去。服务器

  ETL的实现有多种方法,经常使用的有三种。一种是借助ETL工具(如Oracle的OWB、SQL Server 2000的DTS、SQL Server2005的SSIS服务、Informatic等)实现,一种是SQL方式实现,另一种是ETL工具和SQL相结合。前两种方法各有各的优缺点,借助工具能够快速的创建起ETL工程,屏蔽了复杂的编码任务,提升了速度,下降了难度,可是缺乏灵活性。SQL的方法优势是灵活,提升ETL运行效率,可是编码复杂,对技术要求比较高。第三种是综合了前面二种的优势,会极大地提升ETL的开发速度和效率。工具

  1、 数据的抽取(Extract)编码

  这一部分须要在调研阶段作大量的工做,首先要搞清楚数据是从几个业务系统中来,各个业务系统的数据库服务器运行什么DBMS,是否存在手工数据,手工数据量有多大,是否存在非结构化的数据等等,当收集完这些信息以后才能够进行数据抽取的设计。spa

  一、对于与存放DW的数据库系统相同的数据源处理方法设计

  这一类数据源在设计上比较容易。通常状况下,DBMS(SQLServer、Oracle)都会提供数据库连接功能,在DW数据库服务器和原业务系统之间创建直接的连接关系就能够写Select 语句直接访问。日志

  二、对于与DW数据库系统不一样的数据源的处理方法orm

  对于这一类数据源,通常状况下也能够经过ODBC的方式创建数据库连接——如SQL Server和Oracle之间。若是不能创建数据库连接,能够有两种方式完成,一种是经过工具将源数据导出成.txt或者是.xls文件,而后再将这些源系统文件导入到ODS中。另一种方法是经过程序接口来完成。接口

  三、对于文件类型数据源(.txt,.xls),能够培训业务人员利用数据库工具将这些数据导入到指定的数据库,而后从指定的数据库中抽取。或者还能够借助工具实现。

  四、增量更新的问题

  对于数据量大的系统,必须考虑增量抽取。通常状况下,业务系统会记录业务发生的时间,咱们能够用来作增量的标志,每次抽取以前首先判断ODS中记录最大的时间,而后根据这个时间去业务系统取大于这个时间全部的记录。利用业务系统的时间戳,通常状况下,业务系统没有或者部分有时间戳。

2、数据的清洗转换(Cleaning、Transform)

  通常状况下,数据仓库分为ODS、DW两部分。一般的作法是从业务系统到ODS作清洗,将脏数据和不完整数据过滤掉,在从ODS到DW的过程当中转换,进行一些业务规则的计算和聚合。

  一、 数据清洗

  数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉仍是由业务单位修正以后再进行抽取。

不符合要求的数据主要是有不完整的数据、错误的数据、重复的数据三大类。

  (1)不完整的数据:这一类数据主要是一些应该有的信息缺失,如供应商的名称、分公司的名称、客户的区域信息缺失、业务系统中主表与明细表不能匹配等。对于这一类数据过滤出来,按缺失的内容分别写入不一样Excel文件向客户提交,要求在规定的时间内补全。补全后才写入数据仓库。

  (2)错误的数据:这一类错误产生的缘由是业务系统不够健全,在接收输入后没有进行判断直接写入后台数据库形成的,好比数值数据输成全角数字字符、字符串数据后面有一个回车操做、日期格式不正确、日期越界等。这一类数据也要分类,对于相似于全角字符、数据先后有不可见字符的问题,只能经过写SQL语句的方式找出来,而后要求客户在业务系统修正以后抽取。日期格式不正确的或者是日期越界的这一类错误会致使ETL运行失败这一类错误须要去业务系统数据库用SQL的方式挑出来,交给业务主管部门要求限期修正,修正以后再抽取。

  (3)重复的数据:对于这一类数据——特别是维表中会出现这种状况——将重复数据记录的全部字段导出来,让客户确认并整理。

  数据清洗是一个反复的过程,不可能在几天内完成,只有不断的发现问题,解决问题。对因而否过滤,是否修正通常要求客户确认,对于过滤掉的数据,写入Excel文件或者将过滤数据写入数据表,在ETL开发的初期能够天天向业务单位发送过滤数据的邮件,促使他们尽快地修正错误,同时也能够作为未来验证数据的依据。数据清洗须要注意的是不要将有用的数据过滤掉,对于每一个过滤规则认真进行验证,并要用户确认。

  二、 数据转换

  数据转换的任务主要进行不一致的数据转换、数据粒度的转换,以及一些商务规则的计算。

  (1)不一致数据转换:这个过程是一个整合的过程,将不一样业务系统的相同类型的数据统一,好比同一个供应商在结算系统的编码是XX0001,而在CRM中编码是YY0001,这样在抽取过来以后统一转换成一个编码。

  (2)数据粒度的转换:业务系统通常存储很是明细的数据,而数据仓库中数据是用来分析的,不须要很是明细的数据。通常状况下,会将业务系统数据按照数据仓库粒度进行聚合。

  (3)商务规则的计算不一样的企业有不一样的业务规则、不一样的数据指标,这些指标有的时候不是简单的加加减减就能完成,这个时候须要在ETL中将这些数据指标计算好了以后存储在数据仓库中,以供分析使用。

3、ETL日志、警告发送

  一、 ETL日志

  ETL日志分为三类。

一类是执行过程日志,这一部分日志是在ETL执行过程当中每执行一步的记录,记录每次运行每一步骤的起始时间,影响了多少行数据,流水帐形式。

一类是错误日志,当某个模块出错的时候写错误日志,记录每次出错的时间、出错的模块以及出错的信息等。

第三类日志是整体日志,只记录ETL开始时间、结束时间是否成功信息。若是使用ETL工具,ETL工具会自动产生一些日志,这一类日志也能够做为ETL日志的一部分。

记录日志的目的是随时能够知道ETL运行状况,若是出错了,能够知道哪里出错。

  二、 警告发送

  若是ETL出错了,不只要造成ETL出错日志,并且要向系统管理员发送警告。发送警告的方式多种,通常经常使用的就是给系统管理员发送邮件,并附上出错的信息,方便管理员排查错误。

  ETL是BI项目的关键部分,也是一个长期的过程只有不断的发现问题并解决问题,才能使ETL运行效率更高,为BI项目后期开发提供准确与高效的数据。

后记

     作数据仓库系统,ETL是关键的一环。说大了,ETL是数据整合解决方案,说小了,就是倒数据的工具回忆一下工做这么长时间以来,处理数据迁移、转换的工做倒还真的很多。可是那些工做基本上是一次性工做或者很小数据量。但是在数据仓库系统中,ETL上升到了必定的理论高度,和原来小打小闹的工具使用不一样了。究竟什么不一样,从名字上就能够看到,人家已经将倒数据的过程分红3个步骤,E、T、L分别表明抽取、转换和装载。

其实ETL过程就是数据流动的过程,从不一样的数据源流向不一样的目标数据。但在数据仓库中,

ETL有几个特色,

一是数据同步,它不是一次性倒完数据就拉到,它是常常性的活动,按照固定周期运行的,甚至如今还有人提出了实时ETL的概念。

二是数据量,通常都是巨大的,值得你将数据流动的过程拆分红E、T和L。

    如今有不少成熟的工具提供ETL功能,且不说他们的好坏。从应用角度来讲,ETL的过程其实不是很是复杂,这些工具给数据仓库工程带来和很大的便利性,特别是开发的便利和维护的便利。但另外一方面,开发人员容易迷失在这些工具中。举个例子,VB是一种很是简单的语言而且也是很是易用的编程工具,上手特别快,可是真正VB的高手有多少?微软设计的产品一般有个原则是“将使用者看成傻瓜”,在这个原则下,微软的东西确实很是好用,可是对于开发者,若是你本身也将本身看成傻瓜,那就真的傻了。ETL工具也是同样,这些工具为咱们提供图形化界面,让咱们将主要的精力放在规则上,以期提升开发效率。从使用效果来讲,确实使用这些工具可以很是快速地构建一个job来处理某个数据,不过从总体来看,并不见得他的总体效率会高多少。问题主要不是出在工具上,而是在设计、开发人员上。他们迷失在工具中,没有去探求ETL的本质。能够说这些工具应用了这么长时间,在这么多项目、环境中应用,它必然有它成功之处,它一定体现了ETL的本质。若是咱们不透过表面这些工具的简单使用去看它背后蕴涵的思想,最终咱们做出来的东西也就是一个个独立的job,将他们整合起来仍然有巨大的工做量。你们都知道“理论与实践相结合”,若是在一个领域有所超越,必需要在理论水平上达到必定的高度.