• 1. ETL培训文档Beyond Technology2007年12月
  • 2. 内容提要 ETL概述 ETL设计 ETL案例
  • 3. ETL概述 ETL 顾名思义, 即数据抽取(Extract)、转换(Transform)、装载 (Load)的过程,它是构建数据仓库的重要环节。 ETL负责将分布的、异构数据源中的数据如关系数据、平面数据文件等抽取 到临时中间层后进行清洗、转换、集成,最后加载到数据仓库或数据集市中, 成为联机分析处理、数据挖掘的基础。
  • 4. 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,数据仓库)中去。
  • 5. ETL设计一、数据的抽取 这一部分需要在调研阶段做大量的工作,首先要搞清楚数据是从几个业务系统中来, 各个业务系统的数据库服务器运行什么DBMS,是否存在手工数据,手工数据量有多大,是 否存在非结构化的数据等等,当收集完这些信息之后才可以进行数据抽取的设计。 1、对于与存放DW的数据库系统相同的数据源处理方法 这一类数据源在设计上比较容易。一般情况下,DBMS(SQLServer、Oracle)都会提 供数据库链接功能,在DW数据库服务器和原业务系统之间建立直接的链接关系就可以写 Select语句直接访问。 2、对于与DW数据库系统不同的数据源的处理方法 对于这一类数据源,一般情况下也可以通过ODBC的方式建立数据库链接——如 SQLServer和Oracle之间。如果不能建立数据库链接,可以有两种方式完成,一种是通 过工具将源数据导出成.txt或者是.xls文件,然后再将这些源系统文件导入到ODS中。另 外一种方法是通过程序接口来完成。
  • 6. ETL设计 3、对于文件类型数据源(.txt,.xls),可以培训业务人员利用数据库工具将这 些数据导入到指定的数据库,然后从指定的数据库中抽取。或者还可以借助工 具实现,如SQLServer2005的SSIS服务的平面数据源和平面目标等组件导入ODS 中去。 4、增量更新的问题 对于数据量大的系统,必须考虑增量抽取。一般情况下,业务系统会记录 业务发生的时间,我们可以用来做增量的标志,每次抽取之前首先判断ODS中记 录最大的时间,然后根据这个时间去业务系统取大于这个时间所有的记录。利 用业务系统的时间戳,一般情况下,业务系统没有或者部分有时间戳。
  • 7. ETL设计二、数据的清洗转换 一般情况下,数据仓库分为ODS、DW两部分。通常的做法是从业务系统到 ODS做清洗,将脏数据和不完整数据过滤掉,在从ODS到DW的过程中转换,进行 一些业务规则的计算和聚合。 1、数据清洗 数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主 管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。不符合要求的 数据主要是有不完整的数据、错误的数据、重复的数据三大类。
  • 8. ETL设计 (1)不完整的数据:这一类数据主要是一些应该有的信息缺失,如供应商的 名称、分公司的名称、客户的区域信息缺失、业务系统中主表与明细表不能匹 配等。对于这一类数据过滤出来,按缺失的内容分别写入不同Excel文件向客户 提交,要求在规定的时间内补全。补全后才写入数据仓库。 (2)错误的数据:这一类错误产生的原因是业务系统不够健全,在接收输入 后没有进行判断直接写入后台数据库造成的,比如数值数据输成全角数字字 符、字符串数据后面有一个回车操作、日期格式不正确、日期越界等。这一类 数据也要分类,对于类似于全角字符、数据前后有不可见字符的问题,只能通 过写SQL语句的方式找出来,然后要求客户在业务系统修正之后抽取。日期格式 不正确的或者是日期越界的这一类错误会导致ETL运行失败,这一类错误需要去 业务系统数据库用SQL的方式挑出来,交给业务主管部门要求限期修正,修正之 后再抽取。
  • 9. ETL设计 (3)重复的数据:对于这一类数据——特别是维表中会出现这种情况——将重 复数据记录的所有字段导出来,让客户确认并整理。 数据清洗是一个反复的过程,不可能在几天内完成,只有不断的发现问 题,解决问题。对于是否过滤,是否修正一般要求客户确认,对于过滤掉的数 据,写入Excel文件或者将过滤数据写入数据表,在ETL开发的初期可以每天向 业务单位发送过滤数据的邮件,促使他们尽快地修正错误,同时也可以做为将来 验证数据的依据。 数据清洗需要注意的是不要将有用的数据过滤掉,对于每个过滤规则认真 进行验证,并要用户确认。
  • 10. ETL设计 2、数据转换 数据转换的任务主要进行不一致的数据转换、数据粒度的转换,以及一些商务规则 的计算。 (1)不一致数据转换:这个过程是一个整合的过程,将不同业务系统的相同类型的数 据统一,比如同一个供应商在结算系统的编码是XX0001,而在CRM中编码是YY0001,这样在抽取过来之后统一转换成一个编码。 (2)数据粒度的转换:业务系统一般存储非常明细的数据,而数据仓库中数据是用来 分析的,不需要非常明细的数据。一般情况下,会将业务系统数据按照数据仓库粒度进 行聚合。 (3)商务规则的计算:不同的企业有不同的业务规则、不同的数据指标,这些指标有 的时候不是简单的加加减减就能完成,这个时候需要在ETL中将这些数据指标计算好了之 后存储在数据仓库中,以供分析使用。
  • 11. ETL案例ETL的实现有多种方法,常用的有三种。 ETL工具(如Oracle的OWB、SQLServer2000的DTS、SQLServer2005的SSIS服务、Informatica等)实现, SQL方式实现(编码实现) ETL工具和SQL相结合。 前两种方法各有各的优缺点,借助工具可以快速的建立起ETL工程,屏蔽了复杂 的编码任务,提高了速度,降低了难度,但是缺少灵活性。SQL的方法优点是灵 活,提高ETL运行效率,但是编码复杂,对技术要求比较高。第三种是综合了前 面二种的优点,会极大地提高ETL的开发速度和效率。 兴业银行统一报表系统采用了第三中开发方式, 即采用了Informatica公司的 PowerCenter工具进行流程和功能设计,辅助的ETL工具采用了Unix系统的Shell 功能和DB2的存储过程。
  • 12. ETL案例兴业银行手机银行业务(编码实现)实现步骤: ftp 源数据文本到本地数据平台 导入文本到本地营业数据库 UNIX Shell、SQL方式实现ETL(Shell调用存储过程) 记录日志
  • 13. ETL案例下面以手机银行业务为例,分部讲解ETL的编码实现 1.准备阶段 此阶段我们着重于了解数据源,我们需要确定以下问题: 数据源在哪? 数据源的格式如何? 数据源给出的频度? 数据源是以增量还是以全量给出? 数据源的数据字典
  • 14. ETL案例2.分析阶段 此时我们已经将源导入数据库中,我们的精力要转移到业务范畴我们需要了解: 需要实现哪些功能? 功能实现的数据口径为何? 3.实现阶段 编码实现分析阶段的成果,通过UNIX Shell来组织整个ETL过程 4.测试阶段 验证最终进入数据仓库的数据是否正确
  • 15. ETL案例—实现第一步:FTP数据源 FTP_WAP_DATA() { { echo "user $FTP_USER $FTP_PASSWORD" echo "cd $FTP_DATA_PATH2" echo "lcd $FTP_LOCAL_PATH/$DD" echo "prompt off" echo "get twapdqb.$1.unl.Z" echo "get twapuser.$1.unl.Z" echo "get twapsignsrv.$1.unl.Z" echo "get twapsrvcode.$1.unl.Z" echo "get twaptranslog.$1.unl.Z" echo "by" }|ftp -n $FTP_SERVER 2>&1 >/dev/null } 其中$1 代表数据提取日期,如2007-09-30,则$1=20070930
  • 16. ETL案例—实现第二步:载入数据源 在数据源解压并赋予执行权限后: 对于增量数据,如twaptraslog, 直接执行装载   echo "load from $FTP_LOCAL_PATH/$DD/twaptranslog.$1.unl insert into etl.twaptranslog" | dbaccess yysjk 对于全量数据,先重建表后,执行装载 echo "drop table etl.twapdqb" | dbaccess yysjk dbaccess yysjk /ETL/app/sql/twapdqb.sql echo "load from $FTP_LOCAL_PATH/$DD/twapdqb.$1.unl insert into etl.twapdqb" | dbaccess yysjk
  • 17. ETL案例—实现第三步:执行ETL,将执行结果写如数据仓库: 存储过程在附件中可以找到,在此不讲解存储过程如何实现 调用存储过程实现ETL db2 "call odsetl.proc_ljb_sjyh(?)" if [ $? -ne 0 ];then echo "`F_Time` 执行PROC_LJB_SJYH失败!" echo "`F_Time` 执行PROC_LJB_SJYH失败!">>$LOG_FILE return 1 fi db2 "export to etl.wapbank$1.unl of del select * from etl.sjyhljb" db2 "load from etl.wapbank$1.unl of del insert into ljb.sjyhljb" * etl.sjyhljb ODS表.存放存储过程执行结果 * ljb.sjyhljb DW表.在其上建立上层应用.如报表,OLAP等
  • 18. ETL案例—实现第三步:将执行结果写入日志: echo "`F_Time` 手机银行执行成功 ">>$LOG_FILE echo "`F_Time` 手机银行程序执行的数据日期$1 ">>$LOG_FILE
  • 19. Thank youNeusoft Co., Ltd.谢谢!