1、DATASTAGE一 DATASTAGE经验积累一、JOB 的分类与作用1、Server JOB:最为常用的 Job类型,Job 可以组合使用,Server Job 是 Job的最小单位。原文档:If you have the Web Services pack installed an additional check box, Web Service Enabled, appears. Select it to indicate the job can be made available as a web service.2、Parallel JOB:3、Mainframe JOB:运行于
2、大型机的 JOB。4、JOB Sequences:Job Sequence 主要用于 Job间的协作工作控制,如各 Job的实行流程,出错处理,文件监控等。二、jobstatus 的用法 jobstatus-jobstatus waits for the job to complete, then returns an exit code derived from the job status.命令格式为:dsjob run mode NORMAL | RESET | VALIDATE param name=value warn n rows n wait stop jobstatususer
3、status-localproject job三、判断 NULL值实例STAGE :JOIN STAGE设置:LEFT JOIN左输入语句:SELECT * FROM PMP_Insured_Amount右输入语句:SELECT COL_ID,TAB_NAME,WORK_DATE,REF_COLUMN1 AS UNIQUE_ID_IN_SRC_SYS,REF_COLUMN2,ROW_ID,HASHCODE AS B_HASHCODE,ANCHOR_ID,PARTITION_KEY,IS_DUPLICATED,A AS MARK -用以判断结果集右边是否为空FROM ETL_FOR_INC_TM
4、P2SQL语句:SELECT A.*,B.*FROM PMP_Insured_Amount A LEFT JOIN ETL_FRO_INC_TMP2 B ON A.UNIQUE_ID_IN_SRC_SYS = B.UNIQUE_ID_IN_SRC_SYS功能:判断来自 A表的所有记录,哪些能够 B表关联,哪些不能与 B表关联。说明:由于在构造右输入语句时增加了一个 B表中没有的常量字段 MARK,所以如果 A表能够与 B表关联的记录,该常量字段就不为空值(此处设了该常量值为 A);如果 A表与 B表关联不上的记录,该常量字段就为空值(NULL)。如此只需用一条判断语句判断常量字段是否为空,从而
5、分出两种记录来。记录分离所使用的 STAGE是 Transform stage。一开始时,使用 Condition设置了字段MARK = A与字段 MARK A 的一支没有数据通过,后来把 MARK 、)结果都为 NULL,而 MARK A 作筛选条件,是可以把为 NULL 值的字段输出的。这是DATASTAGE与 MSSQL SERVER在处理 NULL 值运算的不同,MSSQL SERVER 是允许一定违反规范规则的情况存在。四、关于对多表进行关联操作的 STAGE对不同表的同名字段的处理。这些 STAGE有:JOIN、LOOKUP、MERGE 等。DATASTAGE的处理原则:保留前者,
6、抛弃后者。例子:源表:A(a,b,c,d),关联表:B(b,c,e,f)。取值规则:第一次关联条件 A.b = B.b,取 B.e;第二次关联条件 A.c = B.c,取 B.e。说明:关联的有前后之分的。第一次关联时,在结果集中已经存在的名字为 e的字段,第二次关联是在第一次关联的结果集的基础上进行的,第二次所取的字段名与 第一次所取的相同。在此就出现种问题,从数据库常识来说,同一张表是不允许有同名字段出现的,如何能够正确取值呢?在 T-SQL里面,可以使用 JOIN语句对表进行关联,两张表的同名字段 e因为被加了表名作前缀,所以即使字段名相同,也可以正确输出。以下则为使用 T-SQL完成上
7、述取值规则的语句:SELECT A.a,A.b,A.c,A.d,B.eFROM A LEFT JOIN (SELECT A.a,A.b,A.c,A.d,B.e,AB.eFROM A LEFT JOIN B ON A.b = B.b) AS AB ON A.c = AB.c很容易就能看出,最终的结果将会(假设结果表名为 C):C( A.a,A.b,A.c,A.d,B.e,AB.e),结果正确,所以在 T-SQL里,在做多表关联时,可以不必关心不同表的同名字段的取值问题。但在 DATASTAGE里就不能不关心了。由于 DATASTAGE里的所有 STAGE的输出,默认下是对该STAGE的输入进行复
8、制,即表结构的复制。输 入的是什么名字的字段,输出的也是这个名字的字段。那么多表关联时,如果不同的表有相同名字的字段,那么输出时也会出现有同名字段了,而数据表是不允许有 同名字段的,所以就会发生同名冲突。DATASTAGE 对于这中其矿,处理方式是把最先输入的字段保留下来,之后如果有同字段再添加进来时,就会把要添加 进来的字段抛弃掉。这种情况,即使在 JOB运行时也不会报错的,因为语法是没有错误的,不过会出现一个 WARNING,告知用户这个 STAGE将会出现字 段知丢失。所以碰到上面上述情况,解决的方法是在第二次关联时,在输出时把这个同名字段的名字手工更改一下。如上,把字段名 e改为字段名
9、 e_2,赋值也是 赋 e过去,这样既保留了 e的值,有不会给抛弃,只是更改了一下字段的名字,到最后输出时再统一把结果表名定制一下就行。五、对数据进行 HASH分区的 STAGE的设置细节。例子:在用 JOIN STAGE对两张表进行关联,关联的条件是 UID,再设置的该 STAGE对数据按照 UID进行 HASH分区,所有的 STAGE都设置正确无误后,运行 JOB,老是在 JOIN STAGE里有一个 WARNING。原因: 这种情况是由于设置 HASH分区后产生的(数据分区的概念将另述)解决方法:打开产生 WARNING的 STAGE的前一个(是前一个!)也进行了 HASH分区的 STA
10、GE的设置面板,在Stage PageAdvance Tab里,选择 Preserve partitioning下拉选项中的“Clear”值。默认是“Propagate”值,其意义是下一个 STAGE在做 HASH分区时,会继承上一个 (即该 STAGE)对 HASH分区的设置参数。按照 HASH分区的机制,这样继承会出现数据丢失的可能,所以 DS就会产生 WARNING。而选择 “Clear”的意义就时让下一个要做 HASH分区的 STAGE不要继承上一个 STAGE的 HASH分区设置,而重新按照用户的设置来进行 HASH分去。六、把结果输出到平面文件时的注意事项。例子:在原来调试过正确无
11、误的 JOB,把最后的数据文件由原来的 DATA SET改为 SEQUENCE文件时,JOB运行正常,且可以重运行,就上没有实际的数据输入到结果文件里,文件所对应的输入 LINK显示有数据输入,结果 文件也创建了,但打开的是一个空白文件,VIEW 也 VIEW不到有数据,提示说没有结果返回。原因:平面文件的默认格式设置引起。默认下,平面文件的输入格式是,每个字段都要有值输入。如果输入到平面文件的数据中有空值,而平面文件又用默认设置的话,输入就会给 REJECT掉。解决方法:设置平面文件的数据格式。在 Stage PageFormat里,设置空值的处理方式,比如设为 NULL,则遇到空值时,DS
12、 就会在平面文件的该字段里填充 NULL。七、DATASTAGE 中 INTEGER型数值上限为 2000000000(20 亿)。八、对于那些关联不上而又为非空的字段,DS 会自动赋默认值,数字型默认值为 0,字符型默认值为。例子:表 A通过 JOIN STAGE与表 B进行左关联,取 B表的流水 ID,B 表的 ID字段可空性为 NO,把 B表的 ID传递给 A表,然后通过 TRANSFORM STAGE设置条件取出关联不上的记录来,TRANSFORM STAGE 的过滤条件是:IsNull(ID),由于关联不上的记录的 ID字段会是 NULL,这样设置按理应该是可以把关联不上的记录输出的
13、,而实际上是 输出不到的。原因:B 表 ID字段是非空的,那么传递给 A表的 ID的也将是非空。对于那些关联不上的记录,理论上 ID字段应该为 NULL,但由于 ID是非空的,所以 DS 会把一个默认值插入到 ID中去。经过如此处理,使用 IsNull(ID)就当然不能数据正确记录了,因为 ID根本就不是 NULL。解决方法:方法一:在传递 ID字段给 A表时,用 NullToZero或者 NullToEmpty函数对 ID封装起来。如果 ID是数字型的,用 NullToZero, 如果 ID是字符型的,用 NullToEmpty。相应的,TRANSFORM STAGE的过滤条件就应该改为 I
14、D = 0或 ID = ,即可把关联不上的记录正常输出来。方法二:直接修改 TRANSFORM STAGE的过滤条件,修改为:NullToZero(ID) = 0 或者NullToEmpty(ID) = 。注意:经过 DS赋予默认值后,ID 其实已经不为 NULL了,所以理论上使用 NullToZero或NullToEmpty是不适合的。但实际开发中,上述方法确实能够解决问题。九、可空字段拼接字符串特别需要注意的问题:在拼接字段串时,要注意所以拼接的字段当中有没有空字段,如果有,一定要用 NullToZero或者 NullToEmpty函数对该字段进行封装。如果不是经过函数封装处理,如果碰到某
15、条记录,它用来拼接的字段是 NULL,那么这条记录就会给过滤掉,从 而影响了结果。由于拼接字符串一般都是几个到十几二十个字段,有时候容易令人忽略这个问题,常常发现本来应该可以从 TRANSFORM STAGE输出的数据却给 REJECT掉,就要注意是否存在可空字段拼接字符串,而且数据当中的确存在一些记录,里面用于拼接的字段是 NULL的情况了。十、使用 TRANSFORM STAGE进行条件判断过滤数据,一般用于判断的字段是 Nullable;使用 FILTER STAGE来过滤数据,一般用于判断的字段是 No-Nullable。DataStage官方文档学习笔记1. 通过右键添加 link鼠
16、标右键点击起始 stage,按住右键移动鼠标到目标 stage。还有一种方法就是把鼠标放在起始 stage的边缘等到变为一个小圆圈里面有一个叉的时候拖动鼠标到目标 stage。2. DataStage中默认和隐式类型转换时注意的问题当从源向目标映射数据时,如果类型不一致,对于有些类型我们需要在 modify或 transfomer stage中通过函数进行转换,对于有些系统会自动完成类型转换,在类型转换过程中,注意以下几点:1 在变长到固定长度字符串的默认转换中,parallel jobs用 null(ASCII 0)字符来填充剩余长度。联系到前面做的一个 parallel job,当目标是变
17、长时(当时源也是变长,但是好像源的精度要小些) ,但是字符串实际的长度没有指定的变长那么长的话,系统会自动用空格(ASCII 20)来填充(具体在哪个 stage填充的不知) ,而且环境变量 APT_STRING_PADCHAR的默认值也是空格(ASCII 20) 。2 通过环境变量 APT_STRING_PADCHAR可以改变默认的填充字符 null(ASCII 0) 。注:联系上面两点,感觉文档讲的与实际不符,难道我们项目的 administrator改变了该环境变量的默认值?3 有个 PadString 函数可以用来用指定的字符来填充一个变长的字符串到指定的长度。这个函数的参数不能使固定
18、长度字符串,如果是固定长度的先转化为变长。 3. Copy Stage作为占位符在 job开发中,当你暂时不知道该使用哪个 stage时,可以使用 copy stage作为占位符,注意不要把Force属性设为 True,在不把 Force设为 True时,复制将在运行时进行优化。使用 Schema file来指定 meta data1 可以通过列定义和 schema file两种方式来指定 meta data,值得注意的一点是 Note that, if you use a schema file, you should ensure that runtime column propagati
19、on is turned on. Otherwise the column definitions specified in the stage editor will always override any schema file.即,如果想通过 schema file来指定 meta data,必须勾上 runtime column propagation,否则总是使用列定义来作为 meta data。 2 If you are using a schema file on an NLS system, the schema file needs to be in UTF-8 format
20、.如果你的 datastage使用了 NLS system,那么 schema file必须是 UTF-8格式的。文档中说可以使用 Sequential stage来完成转码。通过 Server Shared Container在 Parallel Job中添加 Server Job StageYou create a new shared container in the DataStage Designer, add Server job stages as required, and then add the Server Shared Container to your Paralle
21、l job and connect it to the Parallel stages.在 Designer中创建一个 server shared container,添加需要的 Server job stage,再把 server shared container添加到 parallel job并连接到其他 parallel stage。几个环境变量的具体路径%SERVERENGINE% DataStage engine account directory(normally C:AscentialDataStageEngine on Windows and AscentialDataStag
22、eDSEngine on UNIX).%PROJECT% Current project directory.%SYSTEM% System directory on Windows NT or /usr/lib on UNIX.一句不太懂的话,先做记录If NLS is enabled, avoid using the built-in Iconv and Oconv functions to map data unless you fully understand the consequences of your actions.在使用了 NLS时,尽量避免使用 Iconv and Oco
23、nv来映射日期,因为可能产生一些意想不到的结果。4. Datastage的使用心得及 unix应用Datastage是 Ascential公司出品的著名第三方 ETL工具。它的主要特点有:1可视化操作截面,避免了大量的手工 code2第三方工具,善于处理复杂的数据源3可监控性好,能够快速发现 ETL中的问题并解决对于 Datastage的初学者来说,通过学习官方培训资料(网上到处都有的当了),可以快速的入门,毕竟 Datastage是一个可视化的工具,没有太深涩难懂的内容。但在真正运用中,就可能碰到各种各样的问题。下面就说一说我在使用中曾经困惑过的一些问题:1Job 的粒度。一套 ETL过程中
24、,含有多个步骤,在设计过程中,到底是粗化一些,用少而复杂的 job实现,还是细化一些,用多而简单的 job实现更好呢?我个人认为,比较细的粒度更有利于程序的开发。在开发初期,表面看来细化的 job比较繁琐,但在项目后期的测试阶段,细化的 job可以更准确的定位错误并易于修改。2并行和串行。当到了开发后期,我们准备把多个 job连接起来,我们就会发现,能否将多个 job并行成为 ETL效率的关键,而这个因素在设计初期往往被忽略。ETL 中可能会涉及多个数据源的多个表,而多个 job也可能会形成对某个数据源以及其中的某个表的争用。当数据源争用时,会影响 ETL的执行效率。当表争用无法解决的时候,就
25、只能使用串行。而一个好的结构流程设计,可以极大的减少这种争用,从而提高 ETL的效率。3要将 Datastage与外部 code相结合。Datastage并不是独立运行的开发工具,它需要外部控制程序为载体,才可以进行良好的客户操作。而Datastage也不是万能的,简单的说,它只是 sql语言的一个可视化载体。因此,有一些功能,并不一定要在 Datastage中实现,而应该放到外部程序中,以 sql code的形式完成,以保证整个程序的稳定性,安全性。上面是一些大方向的问题,在实际中会有很多烦琐的小问题,我也尽量的列举一些:1字符集:output 和 input中的字符集都设置为 none,是
26、一个不错的选择。至少可以保证程序运行不会因为乱码 abort。2文本中的列分隔符无法设置为三位,从理论上讲,只有三位分割符才可以保证程序不会将乱码辨认为分隔符,这是 Datastage的一个缺陷。3在使用自定义 sql前,需要使用非自定义形式手工配置好所需要的表,然后再切回自定义格式,如果直接写自定义 sql,将导致 Datastage无法辨别表名,从而导致错误,这应该是一个 bug。4保持配置一个 input或 output,就 view data一下的习惯,不要等到 run时再回头找 error.5Input 中尽量不要使用 insert or update之类的选项,它和 insert
27、only的差别是巨大的。使用insert or update等选项,相当于使用游标,逐条进行对比,每 insert一条,都要先做一次全表扫描,其速度是可想而知的。如果必须要实现这种功能,应使用其他方法,如先 delete目标表中所有与源表重复的记录,然后再从源表中 insert数据.6Date 型数据是比较麻烦的,因为 Datastage中的日期格式为 timestamp,当然你也可以把它的日期格式更改为 date型,但经常会出现错误。对于 oracle数据库源表和目标表,不需要对 date型数据做任何转换,直接使用默认即可,但对于 informix等一些数据库,则需要使用 oconv,ico
28、nv 函数进行转换,并在 output中相应的修改 output sql中的日期格式。具体用法可以去网上或查 datastage帮助。7只要你保证 input和 output时数据类型和长度不会有问题,在两者之间的这一段过程中,Datastage中的数据类型和长度是可以随意更改的,也可以随意增加自定义列。8字符串中的半角空格需要用 trimb,而不是 trim函数,但这点往往被忽略。其他的情况还可能有半角中文等,所以字符串,长度,字符集,这几者之间经常会导致 Datastage产生错误,所以应尽量保证insert前的字符串长度要小于 insert后的字符串长度,而你看到的 insert前的字符
29、串长度并不一定就是它在 Datastage中真正的长度,所以使用 trimb函数在 input sql中做一下限制,才是最稳妥的方法。最后说一个 datastage在 unix中应用的实例,以供大家参考:一个完整的 ETL,其步骤是:1业务用户接口(java,jsp 等友好界面)触发2Shell 运行3启动 Controljob运行4Controljob 启动 job5监控 job状态的 Controljob运行(循环运行,直到所有 job结束)6返回 job执行情况到 shell7Shell 返回执行情况到业务接口8用户得到结果可以看出,这里包括了几个主要元素:业务接口,shell,cont
30、roljob,getstatus controljob,job其中只给大家列出 controljob,getstatus controljob,以及 shell中的 controljob调度命令,其他的部分就不再详述了一、普通的 control job1.带 斜线、下划线并加粗 的部分需要考虑是否是并行的,如果是并行的就不需要这句2.原始层需要加进蓝色的行3.红色的表示 job的名字,用来替换 job的名字该行对应原始层的 job,当需要从文本 load数据时,需要在这里调用相应的 sh * Setup DXrtInc, run it, wait for it to finish, and t
31、est for successhJobDXrtInc1 = DSAttachJob(“DXrtInc“, DSJ.ERRFATAL)If NOT(hJobDXrtInc1) ThenCall DSLogFatal(“Job Attach Failed: DXrtInc“, “JobControl“)AbortEnd Call DSExecute(“UNIX“, “/essbase/script/dwcorp/system/t.sh“, Output, SystemReturnCode)*If FAIL Then RESETStatus = DSGetJobInfo(hJobDXrtInc1,
32、DSJ.JOBSTATUS) If Status = DSJS.RUNFAILED ThenErrCode = DSRunJob(hJobDXrtInc1, DS5. Datastage 技术介绍技术优势5.1. 开发优势由于 Ascential公司雄厚的信息技术实力,DataStage XE系列可为开发者在构建与集成数据环境时提供特别的优势.DataStage XE系列通过集成数据资源、转换数据和调试等手段,设计开发应用软件,并将此作为起点,简化了开发流程、使应用软件的集成和运行更加容易. 1.1)应用程序设计 DataStage Designer是以图形界面起点,开始展开数据集成工作的设计
33、的.这一方式使开发者可宏观地使用图形,清楚地显示数据在整个环境中的流动过程.设计者遵循一种工作流思考方式来选择来源、目标与过程图标,并将之置于一个最初看起来像一个空格一样的“草稿表“模板上.对于每一典型的来源或目标结合体,都存在这些被称作“Stages“的图标.设计者用一种叫做“链接“的箭头来连接这些具代表性的图标,而这些箭头则阐明了运行开始后数据与元数据的流向.在创建 DataStage任务时,用户可以在设计草图上添加注释、说明、标签或是其他可以添加给作业的描述性文字.DataStage 使用图形方式建立表的查询、连接关系、排序和汇总运算.以这种方式设计作业可以快速完成整个应用程序,更为简单
34、的采用由其他开发小组制定的逻辑,从而使长期的维护变得更容易实现.开发者只需将代表数据源、数据目标以及中间过程的图标拖放至界面中即可.这些中间过程包括排序、汇总和绘制单独列.Designer 同样也支持将目标从 Manager面板拖放至Designer面板.而且开发者也可以通过同样的图形化拖放界面,添加诸如表名称和排序关键字这样的细节性项目.DataStage 通过连接主关键字和外关键字,用图示的方式阐明了查询关系.DataStage 只需单击鼠标右键在弹出菜单中,选择函数名即可实现函数调用.开发者也可从下拉列表中,选择用户自定义函数.也可以引入事先存在的 ActiveX例程,或者用其他编辑测试
35、工具开发自己的 ActiveX例程.在运行期间,DataStage将完成所有在整个作业中移动行与列所需的操作,将图形图像转换为实体.同样的图形隐喻也可扩展到单独域级别,单独域级别列对列映射的建立是非常直观的.开发者用横线将每一数据源、行或中间结果集合定义与它们对应的目标连起来.通过使用下拉列表中列出的内建函数扩充列表,开发者可以清楚的阐明 Designer中复杂的布尔逻辑运算、字符串操作与数学函数.开发者采用点击的方式来构建转换表达式.如果开发者需要使用由用户定义的外部例程,也可以从同一菜单中选择.对于支持指向单一或多重目标行分离的过滤器和基于值的约束条件,也是采用这种模型设计解释的.开发者可
36、以使数据集成应用程序的长期维护工作变得简单.开发组成员可以共享作业逻辑,同时对于那些继承了多步转换作业的开发者,也不会因需要浏览数千行复杂程序逻辑而变得气馁或被耽搁. 1.2)调试DataStage Debugger完全整合于 Designer之中.Debugger 是一种测试工具,它允许数据集成人员在程序运行期间,同时浏览转换逻辑从而提高了开发工作效率.在行级处理的基础上,开发者设定断点,并观察数列数据在整个作业中的流程.DataStage 可以立刻发现并纠正逻辑错误或意外的遗留数据值错误.这种错误检测提高了开发工作的效率,特别是在进行日期格式转换,或者是在调试诸如隶属于某一具体的成本中心的
37、数据行之类的复杂数据转换时,或者是确定为何星状结构中某些维趋向空或为零时.利用扩充报表输出或日志文件,进行详细分析是不必要的,这是因为 DataStage Debugger通过图形化方式识别用户设定的可验证逻辑的断点,这遵循了 DataStage Designer的易用图形隐喻. 1.3)处理多来源与多目标 DataStage的出现使比较和集成多重、不同来源的行变为可能-无需编写底层代码.多重来源可以是平面文件,为了分解变化的数据或出于查询目的而添加的异构表,需要对这些文件的值进行比较.由服务器引擎进行底层 SQL语句,比较平面文件,处理连接细节.对性能最为关键的是以流方式进行的文件比较,和满
38、足所选的、不断涌入的其余转换过程的联合特性的数据行.DataStage设计支持多个目标表的写入.在同样的作业中,多重目标表可以同时做到以下几点:来源多样化(不同的 RDBMS类型或文件类型)具有多个网络目的地(表被发送至远端)通过支持 RDBMS厂商的加载程序、平面文件 I/O以及 SQL语句插入等多种策略加载数据经过设计,在开发者最初通过图形化方式表现作业流程时可以进行数据行的分离或复制.DataStage可以根据多重逻辑路径随意复制行,也可以在横向上根据列值在纵向上根据发往每个目标的不同列转换为多行.而且 DataStage可以推动从同一来源开始的分离作业流动.从一个图形图表来年服务器引擎
39、可以分离单一的行,同时记录到多路径中或在完成作业进调用多过程.没有为达到此目的而设立的中间控制区域.最终的好处是减少了数据传递、I/O 操作并对真实世界数据流动的需求做出了简单明了的阐释. 1.4)对通用关系数据库系统的本地支持 DataStage可以与使用专门应用程序界面的通用数据库进行交流从而减少网络开销.几乎对每个决策支持应用软件而言,关系数据库都是关键的组成部分.它们常常会被用作存储集成数据的介质.在许多情况下,它们也是商业信息的来源.为实现与这些数据库系统的相互作用,需要使用 SQL从数据源结构中检索数据或将结果写入目标.即使拥有数量众多的加载程序可以获得更好的工作性能,但数据集成例
40、行程序仍需要动态 SQL执行记录排序、更新或是其他的行处理操作.对于数据集成工具来说,提供与这些数据库以及多样化的厂商配置最为有效交流方式是非常重要的.ODBC 是提供此种互动能力最为灵活的方式,但它无法确保总是能够以最少的开销获得最佳的性能.DataStage支持 ODBC方式并为许多通用的 RDBMS提供了驱动支持,它同样也致力于提供直接 API访问,允许数据集成开发者饶过 ODBC以直接调用方式与数据源和目标结构直接进行本地“对话“.不论是何地,只要可能 DataStage都会采用由厂商 API提供的特殊的性能配置,从而缩减了软件额外配置与支持的开销. 1.5)转换的应用 DataSta
41、ge包含一个执行列操作与转换的函数与例程库.开发者可以直接使用函数执行列映射或者在遵循较为复杂的转换与运算法则前提下执行合并操作.在使用函数和例程执行理想的列映射操作后,开发者单击“编译“图标,首先编译器将对作业进行分析,然后如何最好的对数据流进行管理.接着编译器将为每一个独立的转换映射生成目标代码,并在数据字节发往目的地时采用尽可能高效的方式对数据字节进行操作.DataStage预制有 120多个小例程,可完成从子字符串操作到字符转换和复杂运算的各种操作.转换脚本语言是 BASIC语言的扩展,它包含有大量专用的字符串操作与数据类型转换函数,非常适用于数据存储.而且这种语言有一个经过验证的调用
42、库,15 年来它一直都支持数据集成应用以及在线交易处理系统.此外,DataStage 还拥有 200多种复杂转换,涉及到如数据类型转换、数据操作、字符串函数、公用程序,行处理以及度量(包括距离、时间和重量)转换等许多方面. 1.6)图形化作业定序器 在 DataStage中作业系统被称为“批处理“,它可以执行其他作业调用其他批处理.DataStage 提供一个直观的图形化界面来构建批处理作业或进行作业排序.在图形化界面当中“进程“和“链接“被用于构建批处理作业或进行作业排序,其中“进程“表示活动(如运行一个作业),“链接“表示活动之间流的控制.作业顺序的控制是很重要的,因为它支持一个具有内部处
43、理依赖性作业系统的建立.例如在某个特定的数据集成应用程序中,假设“审计收入“是首先要执行的作业,那么直到(或除非)该作业完成并返回一个零代码其他作业方可继续进行.当“审计收入“作业完成后,相应的命令语言将会发出信号通知DataStage,DataStage将同时运行两个不同的维数作业.而第四个“过程事实“作业还在等待这两个维数作业的完成,因为它在自己的转换操作中使用完成的报表.虽然采用线性的方式这些作业照样可以正确的运行,但应用程序整体的运行时间将会大大延长.两个维数作业同时运行但互不干扰.在一台配置完善的服务器上,鉴于一系列的排序可能会变得非常复杂,两个作业将分别占用各自的处理器运行.5.2
44、. 高级维护一旦集成数据环境建立并开始运作,它将会在维护与更新两方面带来新的挑战.工业专家称涉及到数据集成工程的总费用增加额中 70与维护集成环境有关.Ascential 公司的解决方案从一开始就已经考虑到了维护方面所带来的挑战,它提供对象再利用、版本控制以及捕获变化的数据等功能,有助于开发者迅速满足不断出现的用户需求而不会增加信息技术资源方面的负担. 2.1)对象再利用与共享 开发者可以在所有其他 DataStage服务器上重新利用同一工程内用 DataStage开发的转换.而且他们可以通过各种不同的组件轻易共享转换,如使用 DataStage的中央控制工具实现数据容器的导出到集成.使用容器
45、,开发者可以将同一数据集成过程中的几步处理合为一个单独的单元.容器可以只用于某一个作业,也可在多个作业中共享.本地容器对于某一作业而言是私有的,只能建立该存储器的作业内部进行编辑.共享的存储器是独立的 DataStage组件,可以在多个作业中使用,但所有作业的数据源需一致.共享的存储器对于重复的如再利用生成的测试数据或一个外部报表结构的详细数据等数据集成任务来说是非常有用的. 2.2)版本控制 此外,DataStage 提供版本控制功能,它保存了所有数据集成开发的历史沿革,保留了应用程序组件,如表定义,转换规则和源/目标列映射等.开发者可以查阅过去的规则,并可随意恢复所有可移动至远方区域的版本
46、.DataStage 系列产品允许开发者在必要时于本地增加分发的组件.组件要以只读的方式进行移动,以保留其具体特性.公司信息技术人员可以查阅本地变化,并在中心地区记录其版本.版本控制可以为开发者跟踪源代码和如外部 SQL脚本、命令行和模型等文本文件.版本控制也可保护转换规则的本地只读版本,使其免受不安全网络或机器故障的影响,这样某一节点发生故障就不会使全世界范围内全部决策支持基础设施瘫痪. 2.3)捕捉更改数据 处理更改数据的也是数据集成应用程序性能的一项重要指标.决策支持系统需要定时进行更新,更新所需的装载时间是由以下这些变量决定的:更新频率 目标的可获得性 访问数据源的能力 更改数据的预计
47、量 OLTP数据库的技术结构网络超载和过长的装载时间都是量密集型的环境所不能接受的.对更改数据捕捉的支持可以使刷新目标环境所需的装载时间达到最小化.更改数据捕捉描述了支持最近输入或更新的记录的获取、修改和移植的方法和工具.Ascential 软件公司意识到了捕捉更改数据所固有的复杂性和缺陷,所以创建了一套多层战略来帮助开发人员构建基于日志、触发器和本地复制的最有效的解决方案.在处理更改数据时,有两个最大的问题需要解决:在操作系统中识别更改记录 将更改恰当地应用到数据集成基础设施中为了在更改数据捕捉方面为开发人员提供帮助,Ascential 软件公司提供了可以从主机的日志和交易系统以及非常普及的
48、相关数据库如 DB2,IMS和 Oracle中获取新数据行的工具.事实上,每个版本的更改数据捕捉都是一个独一无二的产品,它反映了对在特定的数据库技术结构中捕捉更改的优化方法.更改数据捕捉进程特别提供了时间标记检查的属性和表示交易类型如插入、更改、删除的代码的分解的属性.同时,寻求能够调整数据库架构本地服务、遵守数据库厂商的文件格式和 API函数以及最小化对 OLTP系统的冲突影响的方法也是它的设计目标.2.4)本地语言支持 在全球化高度发展的今天,跨国公司和网络公司的存在使得企业对各种国际化软件解决方案的需求变得十分旺盛.在公司的 IT阵列中,即使有一段程序不支持国际标准或字符集,也会造成很大
49、的困难.Ascential公司为国际化的应用设计了 DataStage产品家族.Ascential 公司所采用的方法是统一的、符合工业标准的方法,实施这种方法的基本要素如下:Windows客户机程序标准在支持本地版本的 Windows NT和 Windows2000的问题上,所有的DataStage客户界面都全面支持 32位的 Windows代码页标准.例如,在丹麦的哥本哈根、俄罗斯的莫斯科以色列的特拉维夫的开发人员都可以使用 DataStage Designer对他们的丹麦语、俄语和以色列语的Windows版本进行操作.DataStage服务器DataStage 服务器在国际化支持方面并不依赖底层的操作系统.每个服务器都能够使用统一的和单一的内部字符集(Unicode)来进行相关的字符绘制、执行 Sort的基于 POSIX的国内标准、Upcasing、Down casing、货币、时间(日期)、校对和数字表示.本地化所有的 DataStage组件都拥有必要的客户基础设施来将 GUI界面完全本地化至当地语言,包括帮助信息、文档、菜单、安装程序以及 Transfo