DATASTAGE实用指南 下载本文

更改数据捕捉描述了支持最近输入或更新的记录的获取、修改和移植的方法和工具.Ascential软件公司意识到了捕捉更改数据所固有的复杂性和缺陷,所以创建了一套多层战略来帮助开发人员构建基于日志、触发器和本地复制的最有效的解决方案.在处理更改数据时,有两个最大的问题需要解决: 在操作系统中识别更改记录

将更改恰当地应用到数据集成基础设施中

为了在更改数据捕捉方面为开发人员提供帮助,Ascential软件公司提供了可以从主机的日志和交易系统以及非常普及的相关数据库如DB2,IMS和Oracle中获取新数据行的工具.事实上,每个版本的更改数据捕捉都是一个独一无二的产品,它反映了对在特定的数据库技术结构中捕捉更改的优化方法.更改数据捕捉进程特别提供了时间标记检查的属性和表示交易类型如插入、更改、删除的代码的分解的属性.同时,寻求能够调整数据库架构本地服务、遵守数据库厂商的文件格式和API函数以及最小化对OLTP系统的冲突影响的方法也是它的设计目标. 2.4)本地语言支持

在全球化高度发展的今天,跨国公司和网络公司的存在使得企业对各种国际化软件解决方案的需求变得十分旺盛.在公司的IT阵列中,即使有一段程序不支持国际标准或字符集,也会造成很大的困难.

Ascential公司为国际化的应用设计了DataStage产品家族.Ascential公司所采用的方法是统一的、符合工业标准的方法,实施这种方法的基本要素如下:

Windows客户机程序标准-在支持本地版本的Windows NT和Windows2000的问题上,所有的DataStage客户界面都全面支持32位的Windows代码页标准.例如,在丹麦的哥本哈根、俄罗斯的莫斯科以色列的特拉维夫的开发人员都可以使用DataStage Designer对他们的丹麦语、俄语和以色列语的Windows版本进行操作.

DataStage服务器-DataStage服务器在国际化支持方面并不依赖底层的操作系统.每个服务器都能够使用统一的和单一的内部字符集(Unicode)来进行相关的字符绘制、执行Sort的基于POSIX的国内标准、Up-casing、Down casing、货币、时间(日期)、校对和数字表示.

本地化-所有的DataStage组件都拥有必要的客户基础设施来将GUI界面完全本地化至当地语言,包括帮助信息、文档、菜单、安装程序以及Transformer进程等部件.DataStage已经拥有了完全本地化的日文版本.

4.3加速数据转移

在集成环境中跨越整个企业网移动数据会对系统的性能和应用程序的效率造成很大的影响.Ascential公司考虑到了这种挑战,并在自己的产品中预制了专为数据转移而设计的进程来解决这些问题.

3.1)命名管道进程

命名管道能力使开发人员能够轻而易举地实现在两个或多个作业之间,或者在一个作业和一个外部程序之间的数据转移.命名管道是许多操作系统都有的一项功能,通过它可以在内存和数据集成程序的关键进程之间实现数据的透明移动.命名管道的功能非常强大,但是有时难以操作.使用DataStage,开发人员只需选中命名管道选项,所有的底层操作系统细节都由DataStage来完成.另外,通过命名管道对其他工具如专用大型装载程序等的支持,DataStage能够实现数据的无缝共享.大型的作业可以分割成若干个更容易管理的作业,也可以由若干个开发人员共同来完成.在执行时,个体作业是并行运行的,但是集成处理过程却是逐个发生的.使用命名管道,可以优化机器资源,缩短设计和开发时间. 3.2)FTP进程

在为将数据装载到目标环境做准备工作的时候,可能会涉及到使用文件传输协议来在企业网内的机器之间移动平面文件.程序和用户编写的脚本一般都支持这一进程,但是它要求目标机器上必须有足够的磁盘空间来保留文件的副本.这一进程工作的时候并没有有效地利用可用的存储空间.DataStage为使用文件传输协议的进程提供了FTP支持,但是跳过了执行独立的命令程序所需的费时的I/O步骤.当数据块在网络上传送的时候,服务器引擎筛选出经过事先绘制的数据行,并将其直接移动到转换进程中去.另

外,FTP还可以用于对平面文件的远程写入.因为在作业执行的前后都不进行额外的磁盘I/O,所以FTP进程可以帮助开发人员节省大量的时间.

4.4使用外部进程

因为每一个数据集成环境都是不同的,所以Ascential公司的解决方案具备灵活性和扩展性,这样开发人员就可以满足特殊的代码要求.DataStage产品家族允许开发人员对现存的集成代码加以利用以此来缩短开发周期.同时它还使开发人员拥有了为特殊数据处理构建自定义插件进程的能力. 4.1)插件API DataStage XE中的每个Stage图标都包括一个对话框,这个对话框是为这个Stage所标明的技术专门设计的.例如,当设计人员点击排序进程的时候,软件将为开发人员打开一个属性列表来定义排序键、顺序和性能特性等.这些属性的出现是DataStage调用了一个使用插件API编写底层程序的结果.如果能得到好的编制和支持,API可以让课题和技术问题专家很便捷地对产品进行扩展.插件使集成商、零售商和MIS商店可以为保护他们自己的专利和投资,对DataStage进行扩展.因为插件Stages对DataStage引擎没有依赖型,所以开发人员可以从网上下载并分别安装.Ascential软件公司经常开发出新Stages并以这种方式向客户发放.

4.2)调用专用工具

在作业过程中,DataStage开发人员可能会定义一些特定的出口点.这些出口点是用来向操作系统发出呼叫,或者调用现有的代码和程序的.开发人员通过拖放,将包含这些出口点的定义的Stage图标移动到Designer工作区中.DataStage提供了无限的灵活性,用户在作业中可以定义的出口点的数目是没有限制的.调用外部程序使开发人员可以在应用程序内部执行清理操作、发布电子邮件信息或者发送基于某一事件的页.

4.5性能和可伸缩性

为了能够在每个进程中实现每秒钟移动最多的数据行,DataStage服务器引擎的每个部分都进行了优化.按照缺省设置,作业将从一个或多个数据源中一次性提取数据,根据需要进行操作后再将其一次性写入到指定目标中.因此DataStage应用程序,不需要中间文件或者二级存储单元来进行聚合或者中间排序.取消这些步骤可以避免过多的输入输出操作,而输入输出正是最普遍的性能瓶颈之一.数据不必再载回到相关系统中,进行SQL的再处理.因此,DataStage作业可以在更短的时间内完成.

如果多个目标都很重要,DataStage将会在水平和垂直两个方向上分解数据,然后再通过独立的逻辑路径(每个逻辑路径都不要求临时移动区)来传送数据.DataStage使这个过程尽可能在内存中完成,使用尽可能少的传递次数来完成复杂的转换工作.这种方法的好处也是减少输入输出操作的次数.在作业中对磁盘的操作越少,进程完成的速度就越快.目标系统可以保持在线,用户可以在非常短的时间内完成对它的存取访问.下面的章节介绍了支持这种方法的DataStage的一些核心概念. 5.1)采用多CPU架构

借技术高速发展的东风,DataStage充分利用了操作系统和硬件的进步,数据集成引擎采用了多CPU环境,可以在多个进程之间,自动分发独立的作业流.这个功能可以保证对现有资源的充分利用,以及缩短应用程序的总体处理时间.作业一开始执行,服务器就会通过突出显示非独立操作和分别标志独立数据流,对作业进行分析.对于一项给定的作业,DataStage引擎在运行时间内将生成多个并行的进程.这些进程是同时运行的,在采用了多CPU的机器上,运算任务将由多个处理器分担.对于那些需要集成大量数据的企业,还可以使用一种名为Multiple Job Instances的新功能,来有效地利用多处理器机器.使用Multiple Job Instances,多个处理器可以同时运行一项DataStage作业.同样的功能也能在一个或所有的数据流上运行.采用了多CPU的DataStage可以为那些对时间很敏感的企业提供巅峰性能表现. 5.2)排序与合计

DataStage内建有排序与合计能力,这有效的提升了其性能并减少了I/O操作.当行经由引擎处理时,排序与合计进程可直接对行进行操作,而其他同类工具则要依靠SQL和中间表完成上述重要的集合型转换.DataStage允许Designer在作业流中有需要的地方根据相应功能设置排序.排序的设置在运算之前或是之后进行都可以,而且如果需要还可以与将独立逻辑路径写入多重目标的操作一同进行.例如,应用程序可以在新关键字或分组值生成之后或者是在它们插入RDBMS之前立刻进行合计.如果数据已经按一定顺序排列好.那么合计进程将在每个合计分组完成后将行发送给目标.只要有足够的内存资源,排序与合计进程就会在内存中完成其工作.这种工作方式再一次减少了I/O物理操作并且有助于确保DataStage作业在最短的时间范围内得到执行.

4.6对复杂数据类型的支持

一些数据环境有很多结构复杂的数据源,为了使这些数据适于商务智能工具的分析需要作大量的整理工作.如果不经过这样的处理,将会给数据用户带来很多不便.Ascential公司就诸如XML、网络数据和MQ Series等具体而复杂的数据要求给出了解答.MQ Series进程允许用户将面向消息几乎实时的交易中间件作为源和目标.这扩展了DataStage XE的功能性,而又不会增加开发或分析环境的复杂性. 6.1)XML封装

XML封装为使用XML语言的商业数据交换提供了支持了.有了XML封装,用户就可以读取XML格式的文本,写出XML格式的数据,进行商业对商业和应用对应用数据和元数据的交换.

特别是封装的XML读写器可以使公司保留其在交换因特网信息基础设施方面的投资而不必编写专门的点对点内部交换程序和接口.通过XML记录器,DataStage就可以读取取自过去遗留的应用软件、ERP系统或操作型数据库的数据,转换这些数据或将它们与其他数据源集成在一起,然后将它们写成XML文档.通过XML阅读器可以将XML文档读入或导入DataStage.而且DataStage可以将XML文档中的数据与其他数据源集成在一起,对它们进行转换,然后写成XML文档或任何其他支持的数据目标.

用户可以将XML用作数据的封装格式,也可以用作描述元数据的标准方式.通过为抽取元数据而设立的XML封装文档类型定义方式,DataStage可以支持导出和导入数据集成过程中涉及到的所有元数据.在将元数据导出到XML文档中时,DataStage提供了文档类型定义从而使其他工具软件也可以理解导出文档的结构与内容.此外XML封装还允许用户将XML元数据从任何一种报表中导出并写成XML文档,此类报表包括目录、术语表和衍生报表.之后用户就只需使用支持XML的浏览器或将文档导入任何其他支持XML的应用程序中就可以阅读这些导出的文档了.

trim会drop掉记录 当一条记录过来,某个字段为空,而在transformer中又对该字段trim了,由于该字段为空,不能trim,所以DataStage会认为这是个错误,从而把这个记录drop了,这与实际业务不符合,非主键字段为空并不能就把这条记录drop了。

我们可以通过写一个判断来解决该问题:

if LK_1.EMAIL <> '' then trim(LK_1.EMAIL) else LK_1.EMAIL

DataStage中可以执行routine,命令行以控制的地方

1 before/after job和before/after stage,可以执行shell,命令行以及一些DataStage API,如DSJobReport

2 job sequence中有个stage,可以在里面写控制job调度的地方 3 每个job的properties中有个job control tab

4 命令行可以执行、导入job等,它通过dsjob实现,在DS Manager的文档中还讲了有专门的命令行来导入job

5 可以编写shell来控制job,对dsjob命令做封装,可以传入参数等。

对于上面这些概念还是很模糊,先记录在此。

trim全为null的某个字段之后,输出为0

今天又碰到新问题,在transformer中,进去是有很多record,出来之后为0条record,用peek,看了一下,进去的数据的某个字段数据全为null,而在transformer中对此字段trim了,改为不trim就可以了。

job一直运行,数据不能插入数据库

今天遇到一个问题,job不停的在那里运行,然后link上的数据显示各个环节都是正确的,包括最后插入数据库的link上也显示了数据,但是最后数据库里并没有数据。在Director的log中,日志在从两个源文件把所有数据load出来完之后,日志就死在那里了。

以前这个job是正确的,昨天由于重新load其中一个源文件的元数据,所以出现了上述问题。所以先前以为是由于load的新的源数据有问题,就从此处来找问题的原因,并且认为可能是改了元数据,在其他地方映射的时候有位置不对的地方,所以整了很久。因为以前是好好的,然后又以为是服务器的问题。

这都是定势思维的错误,然后又一急,所以浪费了很多时间,其实很多时候都是这样,出了问题我们不能理性的好好思考。

其实问题很简单:

如果我们按照正常逻辑来分析的话,既然不能读入数据库,肯定是数据不符合数据库对数据的约束,包括主键啊,非空啊,本问题就是由于在stage的不断流转中产生了很多空格,使得最后待插入的数据长度远远大于数据库中定义的字段长度。由于在那里不断reject,所以影响了速度,job一直在那里运行。最后用APT_STRING_PADDER,将其设为0x0(用null代替空格)搞定。

ps:在插入数据库时使用一个reject文件对查错有好处,这样能看到reject是些什么数据,然后就能知道为什么被reject了。

同时我们可以得出如果最后插入数据库时很多数据被reject,但是你并没有用一个reject文件来接收这些reject掉的数据,将使得job基本处于停滞状态。

ETL时先disable外键约束再load数据

Kimball在他的ETL Toolkit一书中,一直强调:对于有外键约束的表,为了提高load的速度,可以先将外键约束disable,加载完成后再enable(当然另外一个原因是进入数据仓库的数据都是规范的,甚至可以考虑不使用外键约束,即违反约束的数据在Transformation部分就应该解决掉,当然这是设计问题了)。ps:另外两个提高load速度的方法分别为使用sql loader和insert、update分离。当时还不是明白这个过程怎么具体实现,今天看《oracle concept》看到下面话终于明白了一些: Flexibility for Data Loads and Identification of Integrity Violations

You can disable integrity constraints temporarily so that large amounts of data can be loaded without the overhead of constraint checking. When the data load is complete,you can easily enable the integrity constraints, and you can automatically report any new rows that violate integrity constraints to a separate exceptions table.

看来oracle这点上做的比较完善,还可以将违反完整性约束的数据自动记录到一个exception表中。

在load的时候去掉sequential file的header和footer 今天在论坛看到的方法,先记录下来: 方法一:

在sequential file stage中有个属性可以ignore第一行。对于footer,如果footer使用了与正文不

同的格式,可以用使用transformer stage和 @INROWNUM stage来将footer去掉。 方法二:

在sequential file的filter option中使用sed -e '$d' -e '1d'来讲header和footer去掉。 方法三: 写个before job subroutine,可以先对这个文件做各种处理,不过我想也是subroutine中调用DSExecute sed -e '$d' -e '1d'。当然Basic中也有专门对sequential file处理的函数。

datastage中Orchadmin命令的使用(转)

Orchadmin is a command line utility provided by datastage to research on data sets. The general callable format is : $orchadmin [options] [descriptor file]

1. Before using orchadmin, you should make sure that either the working directory or the $APT_ORCHHOME/etc contains the file “config.apt” OR

The environment variable $APT_CONFIG_FILE should be defined for your session. Orchadmin commands

The various commands available with orchadmin are 1. CHECK: $orchadmin check

Validates the configuration file contents like , accesibility of all nodes defined in the configuration file, scratch disk definitions and accesibility of all the nodes etc. Throws an error when config file is not found or not defined properly 2. COPY : $orchadmin copy Makes a complete copy of the datasets of source with new destination descriptor file name. Please not that

a. You cannot use UNIX cp command as it justs copies the config file to a new name. The data is not copied. b. The new datasets will be arranged in the form of the config file that is in use but not according to the old confing file that was in use with the source. 3. DELETE : $orchadmin <> [-f -x] descriptorfiles?.

The unix rm utility cannot be used to delete the datasets. The orchadmin delete or rm command should be used to delete one or more persistent data sets.

-f options makes a force delete. If some nodes are not accesible then -f forces to delete the dataset partitions from accessible nodes and leave the other partitions in inaccesible nodes as orphans.

-x forces to use the current config file to be used while deleting than the one stored in data set.

4. DESCRIBE: $orchadmin describe [options] descriptorfile.ds This is the single most important command.

1. Without any option lists the no.of.partitions, no.of.segments, valid segments, and preserve partitioning flag details of the persistent dataset.

-c : Print the configuration file that is written in the dataset if any -p: Lists down the partition level information.

-f: Lists down the file level information in each partition -e: List down the segment level information .

-s: List down the meta-data schema of the information. -v: Lists all segemnts , valid or otherwise