datastage经验总结

datastage经验总结
datastage经验总结

目录

1 如何重新启动DataStage服务器, 步骤如下: (4)

2 DataStage开发经验积累: (5)

2.1模板开发 (5)

2.2通过S ERVER S HARED C ONTAINER在P ARALLEL J OB中添加S ERVER J OB S TAGE (5)

2.3去除不需要的字段 (5)

2.4T RANSFORMER S TAGE的使用 (5)

2.5L OOK UP/JOIN 空值处理 (6)

2.6D ATA S TAGE中默认和隐式类型转换时注意的问题 (6)

2.7配置一个INPUT或OUTPUT,就VIEW DATA一下,不要等到RUN时再回头找ERROR (6)

2.8D ATA型数据是比较麻烦的 (6)

2.9行列互换之H ORIZONTAL P IVOT(P IVOT S TAGE) (6)

2.10行列互换之V ERTICAL P IVOT (7)

Server Job的做法: (7)

Sequence File--- Transform--- Hash File (7)

Parallel Job的做法:(按照SERVER JOB的做法,然后改成串行方式也能实现) (8)

2.11O RACLE EE S TAGE在VIEW数据时出现的错误及解决方法 (9)

2.12D ATA S TAGE SAP S TAGE的使用 (10)

2.13C OLUM I MPORT S TAGE的使用 (10)

2.14C OLUM E XPORT S TAGE的使用 (12)

2.15G OT ERROR:C ANNOT FIND ANY PROCESS NUMBER FOR STAGES IN J OB J OBNAME解决 (13)

2.16U NABLE TO CREATE RT_CONFIG NNN (14)

2.17查看JOB和CLIENT的对应的后台进程 (14)

Cd $DSHOME/bin (14)

2.19查看S ERVER E NGINE的进程 (15)

2.20查看S ERVER L OCKS (15)

2.21关于UNIX系统下无法启动服务的解决办法 (16)

2.使用netstat -a|grep dsrpc 查看网路连接状况,确保只有listen状态 (16)

2.22L OCKED BY OTHER USER (17)

2.23DATA S TAGE J OB L OG的处理 (17)

2.24一些BASIC语言中处理字符串的函数 (17)

2.25BASIC程序中使用到的一些语法知识 (18)

If bitCount > arrCnt Then (19)

If BitValue >= 0 AND Count(BitValue, ".")=0 Then (19)

End Else (19)

Ans="OriStr is blank, maybe there is no lights in this room" (19)

For num = 1 To arrCnt - bitCount (19)

Next num (20)

If mask[pos,1] = "1" Then (20)

End (20)

Repeat (21)

3DS中常见问题记录 (22)

3.1权限管理问题 (22)

3.2JOB MAY BE BEING MONITORED或者是CLEANUP问题 (22)

3.4SEQUENCE调度出现的错误问题 (23)

3.17字符集问题 (23)

3.18V ERSION C ONTROL的问题 (23)

ERROR LOG: (23)

3.19SEQUENCE调不起JOB的问题 (24)

Sequence Job 调不起相关的JOB (24)

3.20SEQUENCE调度失败的问题 (24)

Sequence Job 自动失败 (24)

3.21用STAGE调用存储过程运行失败的问题 (24)

3.22DS发送邮件的配置问题 (25)

DS中发送邮件需要做哪些配置? (25)

From: %from% (26)

3.23随机错误问题 (26)

1.APT_MONITOR_SIZE to 100000 and APT_MONITOR_TIME to 5 (26)

1.尽量降低并发度 (26)

3.24DS中的日期问题 (26)

3.25DS连接ORACLE问题 (27)

3.26在S EQUENCE F ILE S TAGE中的空值处理问题 (27)

3.27在DS中使用O RACLE E NTERPRISE S TAGE必须的权限 (27)

Oracle Enterprise Stage必须有以下权限才能使用 (27)

3.28DS中去除‘回车符’的问题以及从CHAR类型转变成整型的方法 (27)

3.29从后台看JOB列表的方法 (28)

3.30D ATASTAGE和数据库的连接方法 (28)

3.31在DATASTAGE中使用环境变量的问题 (28)

3.32IC ONV 和OC ONV (29)

IConv 将一个字符型的日期转换成一个国际数字,是天数; (29)

OConv(0,“D-DMY[2,2,4]”)----》“12-31-1967” (29)

3.33在M ERGE中使用特殊字符 (29)

4部分常用Stage 的使用说明 (29)

5dsjob 语法说明: (31)

6如何从DataStage服务器导出所开发的JOBS列表 (32)

Status code = 0?表示导出成功 (35)

7查看当前服务器状态信息的方法: (36)

8如何在两台机器之间进行FTP文件 (36)

9如何获得Jobstatus ,步骤如下: (38)

10dsjob –run 的用法 (39)

11如何在后台运行和停止一个JOB (40)

JOB运行成功的话,会显示: Status code = 0? (41)

12DS Oracle EE Stage 配置 (42)

11.1安装O RACLE客户端 (42)

11.2添加O RACLE用户到DSADM GROUP组选项 (42)

11.3配置D ATA S TAGE服务器DSENV文件 (42)

LD_LIBRARY_PATH (43)

11.4配置TNSNAMES.ORA (43)

PR009 = (43)

11.5重起D ATA S TAGE服务 (43)

11.6配置O ACLE S TAGE抽取的S ELECT权限 (43)

CREATE ROLE DSXE; (44)

11.7O ACLE EE STAGE配置结束 (44)

13DS ODBC 的配置 (44)

ODBC的配置主要是三个文件的配置:dsenv, .odbc.ini, uvodbc.config (44)

12.1修改$DSHOME/DSENV (44)

12.2修改$DSHOME/.ODBC.INI,来提供数据库连接信息; (44)

QEWSD=39400 (45)

12.3修改$DSHOME/UVODBC.CONFIG,来指定DSN(DATA SOURCE NAME). (45)

14ETL系统扩展 (46)

1.SMP和MPP的区别 (46)

15Remote Shell (rsh)的配置 (46)

14.1创建并配置.RHOSTS文件 (46)

14.2修改/ETC/HOSTS.EQUIV文件 (47)

16dsadmin命令的使用 (47)

15.1DSADMIN命令的使用 (47)

17如何启动JobMonApp (49)

18DS.TOOLS (49)

DS.TOOLS所包含的内容如下: (50)

DataStage Tools Menu (50)

Which would you like? ( 1 - 5 ) ? (50)

19uvsh常用命令 (52)

18.1LOGTO P ROJECT N AME --------登录一个工程 (52)

18.2DS.TOOLS---------进入DS工具 (52)

18.3LIST DS_JOBS--------显示所有的J OB及J OB的分类C ATEGORY (52)

18.4LIST DS_JOBS WITH NAME=J OB N AME ------显示某个特定J OB的信息 (52)

18.5LIST.READU EVERY-----列出所有的锁及锁的拥有用户U SER N AME (52)

18.6UNLOCK USER USERNO ALL----解锁用户锁住的J OBS (52)

18.7LIST.INDEX-----列出资料库的索引 (53)

LIST.INDEX filename { index | ALL } { DETAIL | STATS } (53)

20Usage Analysis来进行影响分析 (53)

19.1如何启动U SAGE A NALYSIS (53)

19.2U SAGE A NALYSIS中S ELECT C OLUMNS的使用 (54)

19.3U SAGE A NALYSIS中V IEW HTML的使用 (55)

19.4U SAGE A NALYSIS中L OCATE IN M ANAGER的使用 (56)

19.5U SAGE A NALYSIS可使用的S OURCE类型 (57)

21DS Message Handlers (58)

20.1M ESSAGE H ANDLERS的两种级别 (58)

20.2M ESSAGE H ANDLERS的三种动作种类 (59)

20.3M ESSAGE H ANDLERS的文件格式 (59)

22DS Parallel Routine (60)

21.1P ARALLEL R OUTINE注意事项 (60)

21.2P ARALLEL R OUTINE创建流程 (60)

Create --> Compile --> Link --> Execute (60)

21.3P ARALLEL R OUTINE示例 (61)

23uvconfig文件中参数修改方法 (63)

22.1修改文件UVCONFIG中的参数 (63)

22.2运行UVREGEN (63)

22.3重启DS服务 (63)

22.4校验 (63)

24&PH& (63)

23.1CD \&PH\&或CD ‘&PH&’ (63)

25DB2支持的数据格式 (64)

26DB2中Load语法和基本使用 (65)

LOAD FROM OF INTO

(65)

LOAD FROM org.del OF DEL REPLACE INTO org2 (65)

LOAD FROM photo.asc OF ASC (65)

1如何重新启动DataStage服务器, 步骤如下:

1.01

启动DataStage Server 的命令要在$DSHOME/bin 目录下进行. 启动之前要切断所有与

服务器端的连接:

1.登陆DataStage 服务器,输入: $DSHOME/bin

2.关闭DataStage 服务器./uv –admin –stop

3.检查服务器上是否还有进程没关掉,否则服务器无法启动起来,netstat -a | grep ds

4.重起服务器./uv –admin –start.

Note: 关闭DataStage 服务器后,建议过30 sec 再重起服务器.

2DataStage开发经验积累:

2.1 模板开发

并行JOB中模板的开发可以最大程度的重用并行JOB的构件,节省时间

1.使用JOB参数(PARAMETER)可以在运行时提供参数的值,增加灵活性,可以在不

同的环境处理不同的数据;使用JOB PARAMETER 可以在同一时间使用不同参数

运行同一个JOB

2.Shared Container共享容器可以在多个JOB中共享相同的逻辑,当一个JOB编译

时共享容器被嵌入.

2.2 通过Server Shared Container在Parallel Job中添加Server Job Stage

在Designer中创建一个server shared container,添加需要的Server job stage,再把

server shared container添加到parallel job并连接到其他parallel stage.

2.3 去除不需要的字段

当从数据库中读取数据时,要尽可能早的去除不需要的字段,只读取需要的字段,而

不是整个表,这样可以提高数据读取效率.

2.4 Transformer Stage的使用

1.慎用Transformer Stage,因为它可能降低JOB的运行效率,有些功能能合并成一

个单独的STAGE的不要用多个STAGE,要用其他的STAGE来代替Transformer

Stage 能完成的任务.

2.Transformer Stage 的数据流程是先经过constraint的过滤,然后再经过

Derivation处理

3.对于确定类型的操作,使用其他STAGE 比使用TRANSFORMER 会更好:

(1)对如下情况,使用Copy Stage 将比Transformer Stage 更好

﹡在界面上提供一个JOB 设计占位符

﹡重新命名字段

﹡删除字段

﹡Implicit类型变换

(2)使用Filter Stage 或者Switch Stage 来把输入记录按照限制表式分成

多个输出分支.

(3)使用Modify Stage 来explicit 类型变换和Null处理

﹡Modify Stage 也可重新命名字段

﹡保持(keep)或删除(drop)字段

﹡也可增加新字段,并为新增字段赋值,但赋值方式要以字段=字段形

式,例如:new_columnname = old_columnname; 但new_columnname

=”hf”这样赋值是错误的

﹡Null的处理

destinationColum=handle_null(sourceColum,Value)

destinationColum=make_null(sourceColum,Value),这个使用中有问题,

不处理空值

2.5 Look up/join 空值处理

1.当使用Lookup Failure = Contunue 时,要把reference link 的非主键设置成

Nullable,即使reference data 是非空的,也要设置成Nullable,这样能够确保

Lookup 把空值分配给没有匹配的参考非主键

2.如果参考非主键没有设置成Nullable ,将会发生什么:Lookup 将会分配一个默

认值给没有匹配的的行:

Integer 默认值为0

Varchar/char 默认值为空字符串(0长度的)

2.6 DataStage中默认和隐式类型转换时注意的问题

当从源向目标映射数据时,如果类型不一致,对于有些类型我们需要在modify或

transfomer stage中通过函数进行转换,对于有些系统会自动完成类型转换,在类

型转换过程中,注意以下几点:

1 在变长到固定长度字符串的默认转换中,parallel jobs用空格(ASCII 20)字符

来填充剩余长度(环境变量APT_STRING_PADCHAR的默认值也是空格(ASCII 20),

具体在哪个stage填充的不知.

2 通过环境变量APT_STRING_PADCHAR可以改变默认的填充字符null(ASCII 0)。

3 有个PadString 函数可以用来用指定的字符来填充一个变长的字符串到指定的长

度。这个函数的参数不能使固定长度字符串,如果是固定长度的先转化为变长。

2.7 配置一个 input或output,就view data一下,不要等到run时再回头找error

2.8 Data型数据是比较麻烦的

因为Datastage中的日期格式为timestamp,当然你也可以把它的日期格式更改为

date型,但经常会出现错误。对于oracle数据库源表和目标表,不需要对date型

数据做任何转换,直接使用默认即可,但对于informix等一些数据库,则需要使用

oconv,iconv函数进行转换,并在output中相应的修改output sql中的日期格式2.9 行列互换之Horizontal Pivot(Pivot Stage)

列变行,即宽表变窄表,字段变少了,记录数变多了,牵涉到Column数量的变化;注

意要在Pivot-Output的Derivation中写上转换字段的来源字段,字段之间用逗号隔

例子:

PIVOT Input记录如下:

Id col1 col2 col3

2 Rootpath Workdate EdsDbname

3 Rootpath Workdate AsdmDbname

PIVOT Output记录如下:

Id colum

2 Rootpath

2 Workdate

2 EdsDbname

3 Rootpath

3 Workdate

3 AsdmDbname

2.10 行列互换之Vertical Pivot

Pivot Stage是宽表变窄表,也即:Horizontal Pivot;实际应用中还会牵涉到窄表

宽表,即Vertical Pivot的应用。例如:

输入Input记录如下:

Id Column

2 Rootpath

2 Workdate

2 EdsDbname

3 Rootpath

3 Workdate

3 AsdmDbname

我们想要的输出Output记录是这样的:

Id NewCol

2 Rootpath,Workdate,EdsDbname

3 Rootpath,Workdate,AsdmDbname

解决方法如下:

Server Job的做法:

Sequence File--- Transform--- Hash File

源表结构:

Id varchar 10

Column varchar 10

Define Transform as follows

Stage Variables:

currentKey

Initial value = ""

Derivation = L1.Id

newRecord

Initial value = ""

Derivation = if currentKey=lastKey Then newRecord:",":L1.Column else L1. Column lastKey

Initial value = ""

Derivation = currentKey

L2 Deriviations

L2.key = L1.Id

L2.line = newRecord

目标表结构:

Id varchar 10 (marked as the key)

Newcol varchar 200

(注意:Stage Variable的有先后顺序的,它是按照先后顺序来赋值的,所以lastKey要在newRecord后面)

如果把Newcol的值放在不同的字段中,格式如下:

Id Col1 Col2 Col3

2 Rootpath Workdate E dsDbname

3 Rootpath Workdate A sdmDbname

解决方法是:把NewColm的值读出来赋给一个Stage Variable,然后使用Field(NewCord, ",",1),Field(NewCord, ",",2)..等等,把值赋给每个Colm。

Parallel Job的做法:(按照SERVER JOB的做法,然后改成串行方式也能实现)

1. 使用Sort Stage对Key Column:Id 进行分区和排序;并设置Create Key Change

Column=True(作用是第一条记录会标识为1,其它0),产生KeyChange Column;

运行出来的结果如下:

Id Column KeyChange

-- ---------- ----------

2 Rootpath 1

2 Workdate 0

2 EdsDbname 0

3 Rootpath 1

3 Workdate 0

3 AsdmDbname 0

2. 在Transform Stage里创建Stage Variable;

创建变量后,根据KeyChange的值来设置变量的值;如:创建变量svBuildColum,

赋值:if DSLink12.keyChange=1 then DSLink12.Column else svBuildColumn : "$" :

DSLink12.Column

运行出来的结果如下:

Id Column KeyChange svBuildColum

-- ---------- ---------- ------------------------------------------------

2 Rootpath 1 Rootpath

2 Workdate 0 Rootpath $Workdate

2 EdsDbname 0 Rootpath $Workdate $EdsDbname

3 Rootpath 1 Rootpath

3 Workdate 0 Rootpath $Workdate

3 AsdmDbname 0 Rootpath $Workdate $AsdmDbname

3. 使用Remove_Duplicates Stage,根据Key Colum:Id去除重复行,并Retain Last;

运行的结果如下:

Id svBuildColum

----- ----------------------------------------------

2 Rootpath $Workdate $EdsDbname

3 Rootpath $Workdate $AsdmDbname

4. 如果把svBuildColum的值放在不同的字段中,使用Field(NewCord, "$",1),

Field(NewCord, "$",2)..等等,把值赋给每个Colm.

最后结果如下:

Id Col1 Col2 Col3

2 Rootpath Workdate E dsDbname

3 Rootpath Workdate A sdmDbname

2.11 Oracle EE Stage在VIEW数据时出现的错误及解决方法

错误信息如下:

##I TOSH 000002 04:05:22(001) orchgeneral: loaded

##I TOSH 000002 04:05:22(002) orchsort: loaded

##I TOSH 000002 04:05:22(003) orchstats: loaded

>##E TOSH 000205 04:05:22(004) PATH search failure:

>##E TOSH 000000 04:05:22(005) Error loading "orchoracle": Could

not load "orchoracle": The specified module could not be found.

>##E TOSH 000000 04:05:22(006) Could not locate operator

definition, wrapper, or Unix command for "oraread"; please check that all needed

libraries are preloaded, and check the PATH for the wrappers

>##E TCOS 000029 04:05:22(007) Creation of step finished with status

= FAILED

解决方法:

running 7.5x2 EE on the Windows platform

1.cd to your C:\Ascential\DataStage\PXEngine\install

2. 2. type sh

3. 3. ORACLE_HOME="C:/Your_Oracle_Client"

4. 4. export ORACLE_HOME

5. 5. APT_ORCHHOME="C:/Ascential/DataStage/PXEngine"

6. 6. export APT_ORCHHOME

7.7. sh install.liborchoracle

8.then you will see the message on the screen;

9.Installing Oracle Drvie

https://www.360docs.net/doc/c213731115.html,ing C:/Your_Oracle_Client as ORACLE_HOME

11.Installing drive for Oracle version 9i or 10g

12.Oracel installation is complete.

13.

14.Reboot the machine after above is done

2.12 DataStage SAP Stage的使用

见附件:E:\个人学习\

DataStage SAP Stage的

2.13 Colum Import Stage的使用

将一个字段中的数据输出到多个字段中, 完成分割单个字段数据到多个字段的目的;

输入数据应为定长或者有可以被识别的可分割的界限,必须是String或者Binary类型的,输出数据可以是任何数据类型;

字段分割后:

2.14 Colum Export Stage的使用

与Column Import Stage相反,将多个类型不同的字段合并成一个string或者binary类型的字段

合并字段后:

2.15 Got ERROR: Cannot find any process number for stages in Job Jobname解决

当我们用Director来ClearUp Resources 或Clear Status File 时候,会出现上面的错误提示;

原因是:

incorrect permissions settings.

Following correct settings were done to solve the problem:

-rwsr-x--x 1 root dstage 1519616 Nov 13 2003 dsdlockd

-rwsr-x--x 1 root dstage 1499136 Nov 13 2003 dslictool

-rwsr-x--x 1 root dstage 3678208 Nov 13 2003 dstskup

-rwsr-x--x 1 root dstage 1519616 Nov 13 2003 list_readu

-rwsr-x--x 1 root dstage 1486848 Nov 13 2003 upduvtrans

-rwsr-x--x 1 root dstage 53248 Nov 13 2003 uv

-rwsr-x--x 2 root dstage 3796992 Nov 13 2003 uvbackup

-rwsr-x--x 1 root dstage 49152 Nov 13 2003 uvdls

-rwsr-x--x 2 root dstage 3796992 Nov 13 2003 uvrestore

-rwsr-x--x 1 root dstage 16384 Nov 13 2003 uvsetacc

Settings for all the above was found to be incorrect. dsadm was the owner instead of root and also permissions were incorrect.

2.16 Unable to create RT_CONFIGnnn

造成这种问题的最普遍的两个原因是:

Is the file system on which your project directory exists full;

Do you have write permission to your project directory

2.17查看job和client的对应的后台进程

$ps -fu dsadm

UID PID PPID C STIME TTY TIME CMD

dsadm 11779 11776 0 09:02:02 ? 0:14 phantom DSD.StageRun loadDataDayAg. loadupdIRCashIVDayAg.xfm 3 0/0

dsadm 1761 1760 2 08:56:27 ? 23:16 phantom DSD.RUN

Batch::MasterControlOrderDetail. 0 ParameterFile=/var/opt/dat

前者是Job stage thread,后者是Job main thread

dsadm 29865 29863 0 Oct 25 ? 2:57 dsapi_slave 8 7 0(User client database slave)2.18强制杀死DS进程

Cd $DSHOME/bin

list_readu

ps –ef | grep username

相关主题