IBM WebSphere DataStage(下面简称为DataStage)为整个 ETL 过程提供了一个图形化的开发环境,它是一套专门对多种操作数据源的数据抽取、转换和维护过程进行简化和自动化,并将其输入数据集或数据仓库的集成工具。
通常数据抽取工作分抽取、清洗、转换、装载几个步骤:
抽取主要是针对各个业务系统及不同网点的分散数据,充分理解数据定义后,规划需要的数据源及数据定义,制定可操作的数据源,制定增量抽取的定义。
清洗主要是针对系统的各个环节可能出现的数据二义性、重复、不完整、违反业务规则等问题,允许通过试抽取,将有问题的纪录先剔除出来,根据实际情况调整相应的清洗操作。
转换主要是针对数据仓库建立的模型,通过一系列的转换来实现将数据从业务模型到分析模型,通过内建的库函数、自定义脚本或其他的扩展方式,实现了各种复杂的转换,并且支持调试环境,清楚的监控数据转换的状态。
装载主要是将经过转换的数据装载到数据仓库里面,可以通过数据文件直接装载或直连数据库的方式来进行数据装载,可以充分体现高效性。在应用的时候可以随时调整数据抽取工作的运行方式,可以灵活的集成到其他管理系统中。
一.数据源连接能力:
数据整合工具的数据源连接能力是非常重要的,这将直接决定它能够应用的范围。DataStage 能够直接连接非常多的数据源,包括:
1、 文本文件
2、 XML 文件
3、 企业应用程序,比如 SAP、PeopleSoft、Siebel、Oracle Application
4、 几乎所有的数据库系统,比如 DB2、Oracle、SQL Server、Sybase ASE/IQ、Teradata、Informix等以及可通过ODBC连接的数据库
5、 Web Services
6、 SAS、WebSphere MQ
二.多国语言支持(NLS):
DataStage能够支持几乎所有编码,以及多种扩展编码(IBM、NEC、富士通、日立等),可以添加编码的支持,DataStage内部为UTF8编码。
三.并行运行能力:
ETL Job的控件大多数都支持并行运行,此外DataStage企业版还可以在多台装有DataStage Server的机器上并行执行,这也是传统的手工编码方式难以做到的。这样,DataStage就可以充分利用硬件资源。而且,当你的硬件资源升级的时候也不用修改已经开发好的ETL Job,只需要修改一个描述硬件资源的文件即可。并行执行能力是DataStage所能处理数据的速度可以得到趋近于线性的扩展,轻松处理大量数据。
四.便捷的开发环境:
DataStage 的开发环境是基于 C/S 模式的,通过 DataStage Client 连接到DataStage Server 上进行开发。这里有一点需要注意,DataStage Client 只能安装在 Windows 平台上面(在Win2000/XP上运行过)。而 DataStage Server 则支持多种平台,比如 Windows、Solaris、Redhat Linux、AIX、HP-UNIX。(在WinXP/Solaris8上运行过)
DataStage Client 有四种客户端工具。分别是 DataStage Administrator、DataStage Designer、DataStage Manager、DataStage Director。下面介绍这几种客户端工具在 DataStage 架构中所处的位置以及它们如何协同工作来开发 ETL Job 的。
(1) DataStage Administrator
DataStage Administrator 的主要功能有以下几个:
1. 设置客户端和服务器连接的最大时间。
以管理员的身份登陆 DataStage Administrator(默认安装下管理员为dsadm)。你可以设置客户端和服务器的最大连接时间,默认的最大连接时间是永不过期。最大连接时间的意思就是如果客户端和服务器的连接时间超过了最大连接时间,那么客户端和服务器之间的连接将被强行断开。
2. 添加和删除项目
在 Projects标签中,可以新建或者删除项目,以及设置已有项目的属性。要用 DataStage 进行 ETL 的开发,首先就要用 DataStage Administrator 新建一个项目,然后在这个项目里面进行 ETL Job 的开发。
在Property里,能够设置该Project全局设置、用户权限以及License的管理
(2) DataStage Designer
DataStage Designer是ETL Job开发的核心环境。值得注意的是,登陆DataStage Designer 的时候,不仅要指定DataStage Server 的IP或Server名,而且要指定连接到这个DataStage Server上的哪个项目上面,上面已经提到DataStage的项目是由DataStage Administrator 来创建的。
DataStage Designer的主要功能可以概括为以下三个方面:
1. ETL Job的开发
DataStage Designer里面包含了DataStage为ETL开发已经构建好的组件, 主要分为两种,一种是用来连接数据源的组件,另一种是用来做数据转换的组件。此外DataStage还提供自定义函数(Basic),利用这些组件,开发人员可以通过图形化的方式进行ETL Job的开发,此外ETL Job支持参数的传递。
2. ETL Job的编译
开发好ETL Job后,可以直接在DataStage Designer里面进行编译。如果编译不通过,编译器会帮助开发人员定位到出错的地方。
3. ETL Job的执行
编译成功后,ETL Job就可以执行了,在DataStage Designer里面可以运行ETL Job。ETL Job的运行情况可以在DataStage Director中看到,这方面的内容将在介绍DataStage Director的时候提到。
4. ETL Job的DEBUG
ETL Job可以在Designer中设置断点,跟踪监视Job执行时的中间变量。
5. ETL Job Report的生成
可以为ETL Job生成文档报告,该报告非常详细,只通过该报告,就可以完全了解该Job的结构与处理过程,非常便于分析。
DataStage提供很多实用的控件,常用的控件有:
1. DB操作控件
主要用于各种DB的连接,连接方式有多种,有面向厂家的Native方式,如Sybase的OpenClient方式,也有通用的ODBC等方式,此外也有些比较特别的DB操作控件,如Sybase的IQ Load、BCP控件,主要用于数据的快速导入和导出。
2. 文件操作控件
常用的有Sequential File、Hashed File, Sequential File是可指定编码形式和格式的CSV文件,Hashed File主要是为了加快检索效率,而替代DB控件的一种比较好的选择,这两种控件可用于输入或输出。
3.处理控件
主要的处理空间有Transformer、Aggregator, Transformer是负责数据转换的关键控件,在该控件中可以调用一些自定义函数,Aggregator是用于统计的控件,非常类似于SQL中的GROUP BY,也提供Count、Max、Min、Sum的统计操作,还支持如First、Last、Average等操作。
DataStage的ETL Job分类:
1. Server Job
最为常用的Job类型,Job可以组合使用,Server Job是Job的最小单位。
2. Job Sequence
Job Sequence主要用于Job间的协作工作控制,如各Job的实行流程,出错处理,文件监控等。
3. Job Control
Job Control是一种特殊的Server Job,这种Server Job不是通过Designer来设计的,而是直接通过DataStage内嵌支持的Basic语言来开发,因此方式更为灵活,完全可以利用Job Control替代Job Sequence,至少在出错处理和Log输出等方面要灵活很多。(我参与开发的一个项目中完全用Job Control替代了Job Sequence,做出了更为详细的Log输出)
(3) DataStage Manager
DataStage Manager主要用来管理项目资源。一个项目可能包含多个ETL Job,可以用DataStage Manager把一个项目里面的ETL Job导出来。然后再用DataStage Manager导入到另外一个项目中去,利用这个功能一方面可以实现ETL Job的备份,另一方面就是可以在多个项目之间来重复使用开发好的ETL Job。在DataStage Manager里面可以把数据库中的表结构直接导入到项目中来,供这个项目中的所有ETL Job使用。DataStage Designer也提供了从数据库中直接导入表结构的功能。
(4) DataStage Director
DataStage Director 主要有以下两个功能:
1. 监测ETL Job的运行状态
ETL Job在DataStage Designer中编译好后,可以通过DataStage Director来运行它。前面在介绍DataStage Designer的时候提到在DataStage Designer中也可以运行ETL Job,但是如果要监测ETL Job的运行情况还是要登陆到DataStage Director中。在这里,你可以看到ETL Job运行的详细的日志文件,还可以查看一些统计数据,比如ETL Job每秒所处理的数据量。
2. 设置何时运行ETL Job
ETL Job开发完成后,我们可能希望ETL Job在每天的某个时间都运行一次。DataStage Director为这种需求提供了解决方案。在DataStage Director中可以设置在每天、每周或者每月的某个时间运行ETL Job。(Windows平台下需要打开的Task Scheduler服务,此外,在Unix等平台下,更常用的是用Cron结合dsjob命令来定时运行ETL Job)
五.命令行形式的运行:
ETL Job支持在DataStage Server侧用命令行形式的调用,可以用dsadmin命令来管理DataStage的Project,包括Project的新建,删除以及一些环境变量的增删(DataStage 7.5.1下未能通过dsadmin来设置全局NLS和一些项目属性)。使用dsjob命令,能够同步或非同步的运行DataStage的Job,并传递需要的Job参数,能够检查Job运行的状态,并能恢复Job的运行状态。
六. DataStage的不足:
以上都是说DataStage优点,但实际上DataStage也有不少缺点和不足,这些不足点,会直接影响到能否采用DataStage来达到我们的客户或设计要求。下面就谈一下,最近利用DataStage7.5.1来开发一个项目中遇到的问题。
1.缺点:
存在一个Bug,在利用DB控件的参照功能时,如果指定的SQL文有错误的话,那可能会直接造成DataStage出错,然后客户端会和服务端直接断开,需要关闭客户端,重新连接服务端,并且更为严重的是,DB连接将不会被释放(可能是服务器端的执行进程并没有停掉的缘故)
DataStage的表定义的使用,可以通过PlugIn的方式导入,但是导入后基本就只起一个模版的作用,当表结构发生改变而需要修改表定义时,使用该表定义的地方并不能同步,需要手动修改,容易出现遗漏。
2.不足:
一些高级控件的功能不够全面,在实际应用时,会出现不能完全利用DataStage提供的控件来满足要求,如:Sybase的BCP, DataStage的Sybase BCP控件只支持导出,无法支持导入。当然这些不足,后来我都使用JAVA API来实现了Sybase BCP和Sybase IQ Load。
错误处理功能不够,DataStage对业务错误,如:检索0件等错误,很难捕获和处理。
某些应用要求无法满足,如需要对DB某表的某数据进行状态监视,这时,由于DataStage只有监视文件的功能,DB访问也只有DB控件才可以,因此该应用最后也是用JAVA来实现。