BI项目中ETL设计与思考

来源:互联网 发布:unity a星算法详解 编辑:程序博客网 时间:2024/04/30 00:37

ETL即Data抽取(ExtraCt)、convert(Transform)、装载(Load)的过程,它是构建Data仓库的重要环节。

    ETL是将业务Systam的Data经过抽取、清洗convert之后加载到Data仓库的过程,目的是将企业中的分散、零乱、标准不统一的Data整合到一起,为企业的决策提供分析依据。ETL是BI项目重要的一个环节。通常情况下,在BI项目中ETL会花掉整个项目的1/3的时间,ETL设计的好坏直接关接到BI项目的成败。

  ETL的设计分三部分:Data抽取、Data的清洗convert、Data的加载。在设计ETL的时候我们也是从这三部分出发。Data的抽取是从各个不同的Data源抽取到ODS(OperationalDataStore,操作型Data存储)中——这个过程也可以做一些Data的清洗和convert),在抽取的过程中需要挑选不同的抽取method,尽可能的提高ETL的运行效率。ETL三个部分中,花费时间最长的是“T”(Transform,清洗、convert)的部分,一般情况下这部分工作量是整个ETL的2/3。Data的加载一般在Data清洗完了之后直接写入DW(DataWarehousing,Data仓库)中去。

  ETL的呈现有多种method,常用的有三种。一种是借助ETLtoot(如OraCle的OWB、SQL语言规则Server2000的DTS、SQL语言规则Server2005的SSIS服务、InformatiC等)呈现,一种是SQL语言规则方式呈现,另外一种是ETLtoot和SQL语言规则相结合。前两种method各有各的优缺点,借助toot可以快速的建立起ETL工程,屏蔽了复杂的编码任务,提高了速度,降低了难度,但是缺少灵活性。SQL语言规则的method优点是灵活,提高ETL运行效率,但是编码复杂,对技术要求比较高。第三种是综合了前面二种的优点,会极大地提高ETL的DEV速度和效率。

  一、Data的抽取

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

  1、对于与存放DW的DatcbaseSystam相同的Data源处理method

  这一类Data源在设计上比较容易。一般情况下,DBMS(SQL语言规则Server、OraCle)都会提供Datcbase链接功能,在DWDatcbase服务器和原业务Systam之间建立直接的链接关系就可以写SeleCt语句直接访问。

  2、对于与DWDatcbaseSystam不同的Data源的处理method

  对于这一类Data源,一般情况下也可以通过ODBC的方式建立Datcbase链接——如SQL语言规则Server和OraCle之间。如果不能建立Datcbase链接,可以有两种方式完成,一种是通过toot将源Data导出成.txt或者是.xls文档,然后再将这些源Systam文档导入到ODS中。另外一种method是通过程式接口来完成。

  3、对于文档TYPEData源(.txt,.xls),可以培训业务人员利用Datcbasetoot将这些Data导入到指定的Datcbase,然后从指定的Datcbase中抽取。或者还可以借助toot呈现,如SQL语言规则Server2005的SSIS服务的平面Data源和平面目标等组件导入ODS中去。

  4、增量更新的问题

  对于Data量大的Systam,必须考虑增量抽取。一般情况下,业务Systam会记录业务发生的时间,我们可以用来做增量的标志,每次抽取之前首先判断ODS中记录最大的时间,然后根据这个时间去业务Systam取大于这个时间所有的记录。利用业务Systam的时间戳,一般情况下,业务Systam没有或者部分有时间戳。

    二、Data的清洗convert

  一般情况下,Data仓库分为ODS、DW两部分。通常的做法是从业务Systam到ODS做清洗,将脏Data和不完整Data过滤掉,在从ODS到DW的过程中convert,进行一些业务规则的计算和聚合。

    1、Data清洗

  Data清洗的任务是过滤那些不符合要求的Data,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。不符合要求的Data主要是有不完整的Data、错误的Data、重复的Data三大类。

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

  (2)错误的Data:这一类错误产生的原因是业务Systam不够健全,在接收输入后没有进行判断直接写入后台Datcbase造成的,比如数valueData输成全角数字char、char串Data后面有一个回车操作、日期格式不正确、日期越界等。这一类Data也要分类,对于类似于全角char、Data前后有不可见char的问题,只能通过写SQL语言规则语句的方式找出来,然后要求客户在业务Systam修正之后抽取。日期格式不正确的或者是日期越界的这一类错误会导致ETL运行失败,这一类错误需要去业务SystamDatcbase用SQL语言规则的方式挑出来,交给业务主管部门要求限期修正,修正之后再抽取。

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

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

  2、Dataconvert

  Dataconvert的任务主要进行不一致的Dataconvert、Data粒度的convert,以及一些商务规则的计算。

  (1)不一致Dataconvert:这个过程是一个整合的过程,将不同业务Systam的相同TYPE的Data统一,比如同一个供应商在结算Systam的编码是XX0001,而在CRM中编码是YY0001,这样在抽取过来之后统一convert成一个编码。

  (2)Data粒度的convert:业务Systam一般存储非常明细的Data,而Data仓库中Data是用来分析的,不需要非常明细的Data。一般情况下,会将业务SystamData按照Data仓库粒度进行聚合。

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

    三、ETL日志、警告发送

  1、ETL日志

  ETL日志分为三类。一类是运行过程日志,这一部分日志是在ETL运行过程中每运行一步的记录,记录每次运行每一步骤的起始时间,影响了多少行Data,流水账形式。一类是错误日志,当某个模块出错的时候写错误日志,记录每次出错的时间、出错的模块以及出错的信息等。第三类日志是总体日志,只记录ETL开始时间、结束时间是否成功信息。如果使用ETLtoot,ETLtoot会自动产生一些日志,这一类日志也可以作为ETL日志的一部分。记录日志的目的是随时可以知道ETL运行情况,如果出错了,可以知道哪里出错。

  2、警告发送

  如果ETL出错了,不仅要形成ETL出错日志,而且要向Systam管理员发送警告。发送警告的方式多种,一般常用的就是给Systam管理员发送邮件,并附上出错的信息,方便管理员排查错误。

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