ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:63.03KB ,
资源ID:4817661      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-4817661.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DATASTAGEDATASTAGE经验积累.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

DATASTAGEDATASTAGE经验积累.docx

1、DATASTAGEDATASTAGE经验积累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、M

2、ainframe JOB:运行于大型机的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 jo

3、bstatus userstatus -local project 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 -用以判断结果集右边是否为空 FRO

4、M ETL_FOR_INC_TMP2 SQL语句: 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 = A 的一支有数据通过,而MARK A 的一支没有数据通过,后来把 MARK A 的一支的条件(condition)改为 ISNULL(MARK) 后,数据正常输出。总结:从理论上说,任何与NULL值作比较运算(=、)结果都为NULL,而 MARK A 属于比较运算,当MARK为NULL时,结果就为NULL,所以就会没有数据输出。实际上,在MSSQL SERVER2000中,如果使用

6、 WHERE MARK A 作筛选条件,是可以把为 NULL 值的字段输出的。这是DATASTAGE与MSSQL SERVER在处理 NULL 值运算的不同,MSSQL SERVER是允许一定违反规范规则的情况存在。四、关于对多表进行关联操作的STAGE对不同表的同名字段的处理。 手工起别名 这些STAGE有:JOIN、LOOKUP、MERGE等。 DATASTAGE的处理原则:保留前者,抛弃后者。 例子:源表:A(a,b,c,d),关联表:B(b,c,e,f)。取值规则:第一次关联条件A.b = B.b,取B.e;第二次关联条件A.c = B.c,取B.e。 说明:关联的有前后之分的。第一次

7、关联时,在结果集中已经存在的名字为e的字段,第二次关联是在第一次关联的结果集的基础上进行的,第二次所取的字段名与 第一次所取的相同。在此就出现种问题,从数据库常识来说,同一张表是不允许有同名字段出现的,如何能够正确取值呢?在T-SQL里面,可以使用JOIN语句对表进行关联,两张表的同名字段e因为被加了表名作前缀,所以即使字段名相同,也可以正确输出。以下则为使用T-SQL完成上述取值规则的语句: 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.e FROM A LEFT JOIN B ON A.b

8、 = 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的输入进行复制,即表结构的复制。输 入的是什么名字的字段,输出的也是这个名字的字段。那么多表关联时,如果不同的表有相同名字的字段,那么输出时也会出现有同名字段了,而数据表是不允许有 同名字段的,所以就会发生同名冲突。DATASTAGE对于

9、这中其矿,处理方式是把最先输入的字段保留下来,之后如果有同字段再添加进来时,就会把要添加 进来的字段抛弃掉。这种情况,即使在JOB运行时也不会报错的,因为语法是没有错误的,不过会出现一个WARNING,告知用户这个STAGE将会出现字 段知丢失。所以碰到上面上述情况,解决的方法是在第二次关联时,在输出时把这个同名字段的名字手工更改一下。如上,把字段名e改为字段名e_2,赋值也是 赋e过去,这样既保留了e的值,有不会给抛弃,只是更改了一下字段的名字,到最后输出时再统一把结果表名定制一下就行。五、对数据进行HASH分区的STAGE的设置细节。 例子:在用JOIN STAGE对两张表进行关联,关联的

10、条件是UID,再设置的该STAGE对数据按照UID进行HASH分区,所有的STAGE都设置正确无误后,运行JOB,老是在JOIN STAGE里有一个WARNING。原因:这种情况是由于设置HASH分区后产生的(数据分区的概念将另述)解决方法:打开产生WARNING的STAGE的前一个(是前一个!)也进行了HASH分区的STAGE的设置面板,在Stage PageAdvance Tab里,选择Preserve partitioning下拉选项中的“Clear”值。默认是“Propagate”值,其意义是下一个STAGE在做HASH分区时,会继承上一个 (即该STAGE)对HASH分区的设置参数。

11、按照HASH分区的机制,这样继承会出现数据丢失的可能,所以DS就会产生WARNING。而选择 “Clear”的意义就时让下一个要做HASH分区的STAGE不要继承上一个STAGE的HASH分区设置,而重新按照用户的设置来进行HASH分去。六、把结果输出到平面文件时的注意事项。例子:在原来调试过正确无误的JOB,把最后的数据文件由原来的DATA SET改为SEQUENCE文件时,JOB运行正常,且可以重运行,就上没有实际的数据输入到结果文件里,文件所对应的输入LINK显示有数据输入,结果 文件也创建了,但打开的是一个空白文件,VIEW也VIEW不到有数据,提示说没有结果返回。原因:平面文件的默认

12、格式设置引起。默认下,平面文件的输入格式是,每个字段都要有值输入。如果输入到平面文件的数据中有空值,而平面文件又用默认设置的话,输入就会给REJECT掉。解决方法:设置平面文件的数据格式。在Stage PageFormat里,设置空值的处理方式,比如设为NULL,则遇到空值时,DS就会在平面文件的该字段里填充NULL。七、DATASTAGE中INTEGER型数值上限为2000000000(20亿)。八、对于那些关联不上而又为非空的字段,DS会自动赋默认值,数字型默认值为0,字符型默认值为。 例子: 表A通过JOIN STAGE与表B进行左关联,取B表的流水ID,B表的ID字段可空性为NO,把B

13、表的ID传递给A表,然后通过TRANSFORM STAGE设置条件取出关联不上的记录来,TRANSFORM STAGE的过滤条件是:IsNull(ID),由于关联不上的记录的ID字段会是NULL,这样设置按理应该是可以把关联不上的记录输出的,而实际上是 输出不到的。 原因:B表ID字段是非空的,那么传递给A表的ID的也将是非空。对于那些关联不上的记录,理论上ID字段应该为NULL,但由于ID是非空的,所以DS 会把一个默认值插入到ID中去。经过如此处理,使用IsNull(ID)就当然不能数据正确记录了,因为ID根本就不是NULL。 解决方法: 方法一:在传递ID字段给A表时,用NullToZe

14、ro或者NullToEmpty函数对ID封装起来。如果ID是数字型的,用NullToZero, 如果ID是字符型的,用NullToEmpty。相应的,TRANSFORM STAGE的过滤条件就应该改为ID = 0或ID = ,即可把关联不上的记录正常输出来。 方法二:直接修改TRANSFORM STAGE的过滤条件,修改为:NullToZero(ID) = 0或者NullToEmpty(ID) = 。 注意:经过DS赋予默认值后,ID其实已经不为NULL了,所以理论上使用NullToZero或NullToEmpty是不适合的。但实际开发中,上述方法确实能够解决问题。九、可空字段拼接字符串特别需

15、要注意的问题:在拼接字段串时,要注意所以拼接的字段当中有没有空字段,如果有,一定要用NullToZero或者 NullToEmpty函数对该字段进行封装。如果不是经过函数封装处理,如果碰到某条记录,它用来拼接的字段是NULL,那么这条记录就会给过滤掉,从 而影响了结果。 由于拼接字符串一般都是几个到十几二十个字段,有时候容易令人忽略这个问题,常常发现本来应该可以从TRANSFORM STAGE输出的数据却给REJECT掉,就要注意是否存在可空字段拼接字符串,而且数据当中的确存在一些记录,里面用于拼接的字段是NULL的情况了。十、使用TRANSFORM STAGE进行条件判断过滤数据,一般用于判

16、断的字段是Nullable;使用FILTER STAGE来过滤数据,一般用于判断的字段是No-Nullable。DataStage官方文档学习笔记1. 通过右键添加link鼠标右键点击起始stage,按住右键移动鼠标到目标stage。还有一种方法就是把鼠标放在起始stage的边缘等到变为一个小圆圈里面有一个叉的时候拖动鼠标到目标stage。2. DataStage中默认和隐式类型转换时注意的问题当从源向目标映射数据时,如果类型不一致,对于有些类型我们需要在modify或transfomer stage中通过函数进行转换,对于有些系统会自动完成类型转换,在类型转换过程中,注意以下几点:1 在变长

17、到固定长度字符串的默认转换中,parallel jobs用null(ASCII 0)字符来填充剩余长度。联系到前面做的一个parallel job,当目标是变长时(当时源也是变长,但是好像源的精度要小些),但是字符串实际的长度没有指定的变长那么长的话,系统会自动用空格(ASCII 20)来填充(具体在哪个stage填充的不知),而且环境变量APT_STRING_PADCHAR的默认值也是空格(ASCII 20)。2 通过环境变量APT_STRING_PADCHAR可以改变默认的填充字符null(ASCII 0)。注:联系上面两点,感觉文档讲的与实际不符,难道我们项目的administrator

18、改变了该环境变量的默认值?3 有个PadString 函数可以用来用指定的字符来填充一个变长的字符串到指定的长度。这个函数的参数不能使固定长度字符串,如果是固定长度的先转化为变长。 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 sc

19、hema file, you should ensure that runtime column propagation 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 N

20、LS system, the schema file needs to be in UTF-8 format.如果你的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 a

21、dd the Server Shared Container to your Parallel 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:AscentialDataStag

22、eEngine on Windows and AscentialDataStageDSEngine 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 you

23、r actions.在使用了NLS时,尽量避免使用Iconv and Oconv来映射日期,因为可能产生一些意想不到的结果。4. Datastage的使用心得及unix应用Datastage是Ascential公司出品的著名第三方ETL工具。它的主要特点有:1可视化操作截面,避免了大量的手工code2第三方工具,善于处理复杂的数据源3可监控性好,能够快速发现ETL中的问题并解决对于Datastage的初学者来说,通过学习官方培训资料(网上到处都有的当了),可以快速的入门,毕竟Datastage是一个可视化的工具,没有太深涩难懂的内容。但在真正运用中,就可能碰到各种各样的问题。下面就说一说我在使

24、用中曾经困惑过的一些问题:1Job的粒度。一套ETL过程中,含有多个步骤,在设计过程中,到底是粗化一些,用少而复杂的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中的字符集

26、都设置为none,是一个不错的选择。至少可以保证程序运行不会因为乱码abort。2文本中的列分隔符无法设置为三位,从理论上讲,只有三位分割符才可以保证程序不会将乱码辨认为分隔符,这是Datastage的一个缺陷。3在使用自定义sql前,需要使用非自定义形式手工配置好所需要的表,然后再切回自定义格式,如果直接写自定义sql,将导致Datastage无法辨别表名,从而导致错误,这应该是一个bug。4保持配置一个input或output,就view data一下的习惯,不要等到run时再回头找error.5Input中尽量不要使用insert or update之类的选项,它和insert only

27、的差别是巨大的。使用insert or update等选项,相当于使用游标,逐条进行对比,每insert一条,都要先做一次全表扫描,其速度是可想而知的。如果必须要实现这种功能,应使用其他方法,如先delete目标表中所有与源表重复的记录,然后再从源表中insert数据.6Date型数据是比较麻烦的,因为Datastage中的日期格式为timestamp,当然你也可以把它的日期格式更改为date型,但经常会出现错误。对于oracle数据库源表和目标表,不需要对date型数据做任何转换,直接使用默认即可,但对于informix等一些数据库,则需要使用oconv,iconv函数进行转换,并在outp

28、ut中相应的修改output sql中的日期格式。具体用法可以去网上或查datastage帮助。7只要你保证input和output时数据类型和长度不会有问题,在两者之间的这一段过程中,Datastage中的数据类型和长度是可以随意更改的,也可以随意增加自定义列。8字符串中的半角空格需要用trimb,而不是trim函数,但这点往往被忽略。其他的情况还可能有半角中文等,所以字符串,长度,字符集,这几者之间经常会导致Datastage产生错误,所以应尽量保证insert前的字符串长度要小于insert后的字符串长度,而你看到的insert前的字符串长度并不一定就是它在Datastage中真正的长度

29、,所以使用trimb函数在input sql中做一下限制,才是最稳妥的方法。最后说一个datastage在unix中应用的实例,以供大家参考:一个完整的ETL,其步骤是:1业务用户接口(java,jsp等友好界面)触发2Shell运行3启动Controljob运行4Controljob启动job5监控job状态的Controljob运行(循环运行,直到所有job结束)6返回job执行情况到shell7Shell返回执行情况到业务接口8用户得到结果可以看出,这里包括了几个主要元素:业务接口,shell,controljob,getstatus controljob,job其中只给大家列出cont

30、roljob,getstatus controljob,以及shell中的controljob调度命令,其他的部分就不再详述了一、普通的control job1.带斜线、下划线并加粗 的部分需要考虑是否是并行的,如果是并行的就不需要这句2.原始层需要加进蓝色的行3.红色的表示job的名字,用来替换job的名字该行对应原始层的job,当需要从文本load数据时,需要在这里调用相应的sh* Setup DXrtInc, run it, wait for it to finish, and test for success hJobDXrtInc1 = DSAttachJob(DXrtInc, DSJ.ERRFATAL) If NOT(hJobDXrtInc1) Then Call DSLogFatal(Job Attach Failed: DXrtInc, JobControl) Abort End Call DSExecute(UNIX, /essbase/script/dwcorp/system/t.sh, Output, System

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2