datastage经验总结 - 图文 下载本文

Dastage经验总结

目录

1 如何重新启动DataStage服务器, 步骤如下: ........................................................................ 4 2 DataStage开发经验积累: ...................................................................................................... 4 2.1 模板开发...................................................................................................................................... 4 2.2 通过SERVER SHARED CONTAINER在PARALLEL JOB中添加SERVER JOB STAGE ....................................... 4 2.3 去除不需要的字段 ...................................................................................................................... 4 2.4 TRANSFORMER STAGE的使用 ........................................................................................................... 4 2.5 LOOK UP/JOIN 空值处理 ............................................................................................................... 5 2.6 DATASTAGE中默认和隐式类型转换时注意的问题 ...................................................................... 5 2.7 配置一个 INPUT或OUTPUT,就VIEW DATA一下,不要等到RUN时再回头找ERROR ......................... 5 2.8 DATA型数据是比较麻烦的 .......................................................................................................... 5 2.9 行列互换之HORIZONTAL PIVOT(PIVOT STAGE) ............................................................................. 6 2.10 行列互换之VERTICAL PIVOT ......................................................................................................... 6 2.11 ORACLE EE STAGE在VIEW数据时出现的错误及解决方法 ........................................................ 8 2.12 DATASTAGE SAP STAGE的使用 ....................................................................................................... 9 2.13 COLUM IMPORT STAGE的使用 ........................................................................................................ 9 2.14 COLUM EXPORT STAGE的使用 ...................................................................................................... 11 2.15 GOT ERROR: CANNOT FIND ANY PROCESS NUMBER FOR STAGES IN JOB JOBNAME解决 ............................ 12 2.16 UNABLE TO CREATE RT_CONFIGNNN .............................................................................................. 13 2.17 查看JOB和CLIENT的对应的后台进程 .................................................................................... 13 2.18 强制杀死DS进程 ................................................................................................................... 13 2.19 查看SERVER ENGINE的进程 ...................................................................................................... 14 2.20 查看SERVER LOCKS ..................................................................................................................... 14 2.21 关于UNIX系统下无法启动服务的解决办法........................................................................ 15 2.22 LOCKED BY OTHER USER ................................................................................................................. 16 2.23 DATASTAGE JOB LOG的处理 ......................................................................................................... 16 2.24 一些BASIC语言中处理字符串的函数 .................................................................................. 16 2.25 BASIC程序中使用到的一些语法知识 ................................................................................... 17 3

DS中常见问题记录 .......................................................................................................... 21 3.1 权限管理问题 ............................................................................................................................ 21 3.2 JOB MAY BE BEING MONITORED或者是CLEANUP问题 ....................................................................... 21 3.3 删除文件的问题 ........................................................................................................................ 21 3.4 SEQUENCE调度出现的错误问题 ................................................................................................. 22 3.17 字符集问题 ............................................................................................................................. 22 3.18 VERSIONCONTROL的问题 ............................................................................................................ 22 3.19 SEQUENCE调不起JOB的问题................................................................................................... 23 3.20 SEQUENCE调度失败的问题 ....................................................................................................... 23 3.21 DS发送邮件的配置问题 ........................................................................................................ 24 3.22 随机错误问题 ......................................................................................................................... 25

Individual 2007-10 1 / 64

Dastage经验总结

3.23 DS中的日期问题 .................................................................................................................... 25 3.24 DS连接ORACLE问题 ................................................................................................................ 26 3.25 在SEQUENCE FILE STAGE中的空值处理问题 .............................................................................. 26 3.26 在DS中使用ORACLE ENTERPRISE STAGE必须的权限 ................................................................. 26 3.27 DS中去除‘回车符’的问题以及从CHAR类型转变成整型的方法 .................................... 26 3.28 从后台看JOB列表的方法 ..................................................................................................... 27 3.29 DATASTAGE和数据库的连接方法 ............................................................................................. 27 3.30 在DATASTAGE中使用环境变量的问题 ..................................................................................... 27 3.31 ICONV 和 OCONV ...................................................................................................................... 28 3.32 在MERGE中使用特殊字符 ..................................................................................................... 28 4 5 6 7 8 9 10 11 12

部分常用Stage 的使用说明 ............................................................................................ 28 dsjob 语法说明: .............................................................................................................. 30 如何从DataStage服务器导出所开发的JOBS列表 ....................................................... 31 查看当前服务器状态信息的方法: ..................................................................................... 35 如何在两台机器之间进行FTP文件 ................................................................................. 35 如何获得Jobstatus ,步骤如下: ....................................................................................... 37 dsjob –run 的用法 ...................................................................................................... 38 如何在后台运行和停止一个JOB ................................................................................. 39 DS Oracle EE Stage 配置........................................................................................... 41

11.1 安装ORACLE客户端 ................................................................................................................. 41 11.2 添加ORACLE用户到DSADM GROUP组选项 ............................................................................... 41 11.3 配置DATASTAGE服务器DSENV文件 .......................................................................................... 41 11.4 配置TNSNAMES.ORA ................................................................................................................... 42 11.5 重起DATASTAGE服务 ................................................................................................................ 42 11.6 配置OACLE STAGE抽取的SELECT权限 ...................................................................................... 42 11.7 OACLE EE STAGE配置结束 ........................................................................................................ 43 13

DS ODBC 的配置 ........................................................................................................ 43

12.1 修改$DSHOME /DSENV ............................................................................................................ 43 12.2 修改$DSHOME/.ODBC.INI, 来提供数据库连接信息; ............................................................. 43 12.3 修改$DSHOME/UVODBC.CONFIG, 来指定DSN(DATA SOURCE NAME). ........................................... 44 14 15

ETL系统扩展 ............................................................................................................... 45 Remote Shell (rsh)的配置 ........................................................................................... 45

14.1 创建并配置 .RHOSTS文件 ...................................................................................................... 45 14.2 修改/ETC/HOSTS.EQUIV文件 ...................................................................................................... 46 16

dsadmin命令的使用 ................................................................................................... 46

15.1 DSADMIN命令的使用 .............................................................................................................. 46

Individual 2007-10 2 / 64

Dastage经验总结

17 18 19

如何启动JobMonApp ................................................................................................. 48 DS.TOOLS ................................................................................................................... 48 uvsh常用命令 .............................................................................................................. 51

18.1 LOGTO PROJECTNAME --------登录一个工程 ............................................................................... 51 18.2 DS.TOOLS ---------进入DS工具 ................................................................................................ 51 18.3 LIST DS_JOBS --------显示所有的JOB及JOB的分类CATEGORY .............................................. 51 18.4 LIST DS_JOBS WITH NAME=JOBNAME ------显示某个特定JOB的信息 ..................................... 51 18.5 LIST.READU EVERY -----列出所有的锁及锁的拥有用户USERNAME ..................................... 51 18.6 UNLOCK USER USERNO ALL ----解锁用户锁住的JOBS ................................................................ 51 18.7 LIST.INDEX ----- 列出资料库的索引 ........................................................................................ 52 20

Usage Analysis来进行影响分析 ................................................................................ 52

19.1 如何启动USAGE ANALYSIS .......................................................................................................... 52 19.2 USAGE ANALYSIS中SELECT COLUMNS的使用 ................................................................................ 53 19.3 USAGE ANALYSIS中VIEW HTML的使用 ....................................................................................... 54 19.4 USAGE ANALYSIS中LOCATE IN MANAGER的使用 ............................................................................ 55 19.5 USAGE ANALYSIS可使用的SOURCE类型 ...................................................................................... 56 21

DS Message Handlers ................................................................................................ 57

20.1 MESSAGE HANDLERS的两种级别 ................................................................................................. 57 20.2 MESSAGE HANDLERS的三种动作种类 ......................................................................................... 58 20.3 MESSAGE HANDLERS的文件格式 ................................................................................................. 58 22

DS Parallel Routine .................................................................................................... 59

21.1 PARALLEL ROUTINE注意事项 ....................................................................................................... 59 21.2 PARALLEL ROUTINE创建流程 ....................................................................................................... 59 21.3 PARALLEL ROUTINE示例 ............................................................................................................... 60 23

uvconfig文件中参数修改方法 ..................................................................................... 62

22.1 修改文件UVCONFIG中的参数 .................................................................................................. 62 22.2 运行UVREGEN............................................................................................................................ 62 22.3 重启DS服务 ........................................................................................................................... 62 22.4 校验 ......................................................................................................................................... 62 24

&PH& ........................................................................................................................... 62

23.1 CD \\&PH\\& 或 CD ‘&PH&’ ........................................................................................................ 62 25 26

DB2支持的数据格式 .................................................................................................... 63 DB2中Load语法和基本使用 ...................................................................................... 64

Individual 2007-10 3 / 64

Dastage经验总结

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 再重起服务器.

2 DataStage开发经验积累:

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 设计占位符 ﹡重新命名字段

Individual 2007-10 4 / 64

Dastage经验总结

﹡删除字段

﹡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中的日期格式

Individual 2007-10 5 / 64

Dastage经验总结

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

Individual 2007-10 6 / 64

Dastage经验总结

Stage Variables: currentKey

Initial value = \ Derivation = L1.Id newRecord

Initial value = \

Derivation = if currentKey=lastKey Then newRecord:\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 EdsDbname 3 Rootpath Workdate AsdmDbname

解决方法是:把NewColm的值读出来赋给一个Stage Variable,然后使用Field(NewCord, \,Field(NewCord, \等等,把值赋给每个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 : \运行出来的结果如下:

Individual 2007-10 7 / 64

Dastage经验总结

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, \,

Field(NewCord, \等等,把值赋给每个Colm. 最后结果如下:

Id Col1 Col2 Col3

2 Rootpath Workdate EdsDbname 3 Rootpath Workdate AsdmDbname 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 \Could not load \: The specified module could not be found.

>##E TOSH 000000 04:05:22(006) Could not locate operator definition, wrapper, or Unix command for \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. type sh

3. ORACLE_HOME=\ 4. export ORACLE_HOME

5. APT_ORCHHOME=\ 6. export APT_ORCHHOME 7. sh install.liborchoracle

Individual 2007-10 8 / 64

Dastage经验总结

then you will see the message on the screen; Installing Oracle Drvie

Using C:/Your_Oracle_Client as ORACLE_HOME Installing drive for Oracle version 9i or 10g Oracel installation is complete.

Reboot the machine after above is done

2.12 DataStage SAP Stage的使用

见附件:

E:\\个人学习\\DataStage SAP Stage的

2.13 Colum Import Stage的使用

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

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

Individual 2007-10 9 / 64

Dastage经验总结

字段分割后:

Individual 2007-10 10 /

64

Dastage经验总结

2.14 Colum Export Stage的使用

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

Individual 2007-10 11 /

64

Dastage经验总结

合并字段后:

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

Individual 2007-10 12 /

64

Dastage经验总结

-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

Individual 2007-10 13 /

64

Dastage经验总结

2.19 查看Server Engine的进程

$netstat -a|grep uv or $netstat -a|grep dsrpc

*.uvrpc *.* 0 0 24576 0 LISTEN------Daemon listener ...... ...................ESTABLISHED------Clients attached

$ ipcs ------Shared memory usage

$ ps -ef |grep uni------Engine daemon

root 12970 1 0 Oct 09 ? 0:11 /opt/Ascential/DataStage/unishared/unirpc/unirpcd-----Engine daemon

2.20 查看Server Locks

$ cd `cat /.dshome` $ . ./dsenv

$ bin/uvsh------DSEngine command prompt 上面的操作等同于DataStage

Adminitratot--->Projects(tab)--->Command(button) >DS.TOOLS

Individual 2007-10 14 /

64

Dastage经验总结

Verb \ >LOGTO yourprojectname >DS.TOOLS

Which would you like? ( 1 - 6 ) ?5 Which would you like? ( 1 - 11 ) ?4 >LISTU----Users in DataStage

>LIST.READU----List lock table command 上面操作等同于$DSHOME/bin/list_readu >QUIT

同样,在查看job pid及locks也可以通过datastage director--->Jobs--->Clearup Resources 4,DataStage Filesystem Mount Points $ cd `cat /.dshome` $ df -k .

5,DataStage Engine Daemon $ cd /etc/rc2.d $ more S999ds.rc

2.21 关于UNIX系统下无法启动服务的解决办法 在诊断启动失败的原因之前,先说说如何停止服务。

启停服务的命令大家都知道,要注意的是停止服务之前应先确保无client连接、无端口连接:

1. 使用ps -ef|grep ds 查看client连接情况,如果还有client连接,你又无法查找是谁,

急需重启,可以通过director将所有的连接log off

2. 使用netstat -a|grep dsrpc 查看网路连接状况,确保只有listen状态 这样,将服务停止,会很顺利的重启服务。

当执行完重启命令后,使用ps -ef|grep dsrpcd 查看服务是否启动,如果此服务没有启动,查看:

1. ps查看有无client连接,杀掉进程。

2. netstat查看网络情况,有无FIN_WAIT_2 or CLOSE_WAIT等的tcp状态,如果有,

则使用ndd 命令调整datastage的端口连接, 方法如下(如hp-unix):

查找进程号:ndd -get /dev/tcp tcp_status |grep -e state -e FIN_WAIT_2 断开连接,释放端口:ndd -set /dev/tcp tcp_discon 0x+进程号

Individual 2007-10 15 /

64

Dastage经验总结

如果上述情况都核实后,仍启动失败

请使用 \来启动服务,在 dsrpcd.log 文件中看到启动日志信息,根据实际情况解决。

2.22 Locked by other user

启动DataStag Director ,Job---->Clearup Resources,在这个操作窗口中,首先选择窗口下部 \中的\你可以看到窗口显示了所有lock的信息:PID#----Lock Type----Item Id。在Item Id的列表里找到你需要重新打开的job/routine和其对应的PID#值。然后选择上半部分\中的\All\鼠标选中刚才查到的PID#,然后LogOut。 如果不使用Diretor,你可以在DS administrator中使用\或者\command,同样会列出所有的lock信息。That's Ok!

2.23 dataStage Job Log的处理

如何在操作系统层面上,使用command的到job log?

在操作系统中我们可以使用engine(UNIX DSEngine)/bin 下的命令: dsjob -log [-info | -warn]

dsjob -logsum [-type] [-max ] [-userid]

dsjob -lognewest [-userid] []

event type = INFO|WARNING|FATAL|REJECT|STARTED|RESET|BATCH

dsjob -logdetail [useid] 可以编辑shell或者bat文件,将所有的job log输出。 在datastage内部有其相应的function: DSGetLogEntry DSGetLogSummary DSGetNewestLogId

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

Individual 2007-10 16 /

64

Dastage经验总结

a

使用冒号\:\作为字符串连接的符号。

例如:\等价于字符串 \ 使用中括号[ ]来取出某个字符串的子串,其语法如下:

expression [ [ start, ] length ]

例如:strA=\那么strA[1,3]的意思就是从序号为1的字符开始,一共取出三个字符,其结果就是\。BASIC语言中数组或者字符串的第一个元素的序号是1。

b

c

Count (string, substring)用来计算字符串中的某个子串出现的次数。

例如:计算字符串\中的子串\出现的次数,arrCnt = Count(\\,那么arrCnt就等于2。

Len (string) 用来计算字符串中包含的字符的个数。 例如:Len(\的值就是3。

TRIMF (string) 用来删掉字符串首部的空格。 TRIMB (string) 用来删掉字符串尾部的空格。 例如,字符串strA=\,其首尾各有多个空格。经过strA= TRIMF (strA)和strA= TRIMB (strA)这样的处理就可以除掉字符串首尾的所有空格了,其结果是\。 Index (string, substring, instance) 用来得到字符串中的某个子串的位置。其中instance表示这个子串是在整个字符串中是第几次出现。

例如:字符串为\,要计算子串\第二次出现在字符串中的位置。Index (\的结果就是5。

d

e

f

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

(1). BASIC语言有四种符号用来标记注释,分别是REM,*,! ,$*。例如,

*Initial. Validate the input parameters.

这一行以\星号开头,就表示这一行内容是程序的注释。

(2). 条件判断语句,其语法结构如下:

If condition Then statements End

[Else statements End]

其中condition可以是一个数字,也可以是一个比较关系式。当条件为真时,程序执行Then后面的表达式;当条件为假时,则会执行Else后面的表达式。在Basic语言中,逻辑关系运算符是这样的:

? AND (或者符号 &),表示逻辑与的关系。

Individual 2007-10 17 /

64

Dastage经验总结

? ?

例如:

OR (或者 !),表示逻辑或的关系。 NOT,表示逻辑非的关系。

If bitCount > arrCnt Then

Ans=\ Call DSLogWarn(Ans,\ GoTo ExitFunc End

由BitValue转化而来的二进制数的位数大于子串的个数时,就在日志信息中告诉用户BitValue的值和OriStr的值是不可能一一对应的,输入的数据有错误。

If BitValue >= 0 AND Count(BitValue, \ mask=Oconv(BitValue, \End Else

Ans=\ Call DSLogWarn(Ans,\ GoTo ExitFunc End

当输入变量BitValue的值大于零且不是小数的时候,就把它转化为二进制的数;否则为用户提出警告信息并且离开这个函数。

(3). 使用BASIC自带的一些功能函数。

Oconv(expression, conversion)

其中expression表示一个字符串,conversion则表示这个字符串的输出格式。 Oconv(\的功能是把十进制数\,转化为二进制数\;而 Oconv(\的功能是把十进制数\的小数点左移一位,转化为\。 DSLogInfo (Message, CallingProgName)和DSLogWarn (Message, CallingProgName) 的功能十分相似,都是在执行Server Job的时候,输入一些必要的日志信息,帮助用户了解程序的执行情况。其中Message为输出的日志信息的内容,CallingProgName就是调用这个函数的程序名。区别在于DSLogInfo输出的仅仅是普通的日志信息,而DSLogWarn则是输出一些警告的信息给用户。

例如:

Ans=\Call DSLogWarn(Ans,\

Call DSLogInfo(\

(4). 两种循环条件语句

a). For…Next语句,其基本语法如下:

For variable = start To end [Step increment] [loop.statements] Next [variable]

其中start To end定义了变量变化的区间;而increment定义了每次变量增加的值,当start的值大于end的值,increment的值可以是负数。

For num = 1 To arrCnt - bitCount mask = \

Individual 2007-10 18 /

64

Dastage经验总结

Next num

如果二进制数的位数小于子串的个数,则在二进制数mask的前面补上\。比如,OriStr中有三个子串\,BitValue的值为2,把十进制的数\转化为二进制的数\。这时,二进制数的位数小于子串的个数,就需要在二进制数前面补上\,使其变成\才能和三个子串一一对应起来。

b). Loop…Repeat语句,其基本语法如下:

Loop

[statements]

[While | Until condition Do] [statements] Repeat

其中,Loop定义了循环的开始,Repeat定义了循环的结束。

While condition Do 的含义是,当条件为真的时候执行循环体中的代码。当条件为假的时候,退出循环。 Until condition Do 的含义正好相反,当条件为假的时候执行循环体中的代码。当条件为真的时候则退出循环。 例如:

pos = 1 start = 1 Ans=\ Loop

While pos <= arrCnt Do

idx = Index(proStr,separator,pos)

If mask[pos,1] = \

subStr = proStr[start,idx - start]

subStr=trim(subStr)

*make sure every substring matches the specified pattern If subStr match \ Ans=Ans:\ End Else

Ans=\ Call DSLogWarn(Ans,\ GoTo ExitFunc End

End

start = idx+1 pos+=1

Individual 2007-10 19 /

64

Dastage经验总结

Repeat

这段代码的功能是从输入的字符串中把每一个子串分离出来,然后判断每一个子串对应的二进制数中的值是否为\。如果其对应的数是\,就直接进行下一个循环去处理下一个子串。如果其对应的数是\则继续判断这个子串是否符合命名的规则,如果符合就把子串添加到输出字符串中;如果不符合规则就在日志信息中提示用户输入的字符串有错误,之后跳出循环。

在循环语句中可以使用两个用来控制循环的关键字Continue和Exit:Continue用来结束本次循环,进行下一次循环;而Exit的功能是退出当前循环。 (5). 一些BASIC语言中处理字符串的函数。

? ?

使用冒号\:\作为字符串连接的符号。

例如:\等价于字符串 \ 使用中括号[ ]来取出某个字符串的子串,其语法如下: expression [ [ start, ] length ]

例如:strA=\那么strA[1,3]的意思就是从序号为1的字符开始,一共取出三个字符,其结果就是\。BASIC语言中数组或者字符串的第一个元素的序号是1。

? Count (string, substring)用来计算字符串中的某个子串出现的次数。

例如:计算字符串\中的子串\出现的次数,arrCnt = Count(\,那么arrCnt就等于2。

? ?

Len (string) 用来计算字符串中包含的字符的个数。 例如:Len(\的值就是3。

TRIMF (string) 用来删掉字符串首部的空格。 TRIMB (string) 用来删掉字符串尾部的空格。

例如,字符串strA=\,其首尾各有多个空格。经过strA= TRIMF (strA)和strA= TRIMB (strA)这样的处理就可以除掉字符串首尾的所有空格了,其结果是\。

? Index (string, substring, instance) 用来得到字符串中的某个子串的位置。其中instance表示这个子串是在整个字符串中是第几次出现。

例如:字符串为\,要计算子串\第二次出现在字符串中的位置。Index (\\的结果就是5。

(6). 读者看到代码中的这一行subStr match \,也许会觉得迷惑,下面就重点讲解一下BASIC语言中的模式匹配规则(Pattern Matching)。 表1. DataStage BASIC语言中的模式匹配规则 模式名 … 0X nX 0A nA 0N nN 'string' ~ 含义 任意类型任意个数的字符 任意类型任意个数的字符 n个任意类型的字符 任意个数的字母 n个字母 任意个数的数字 n个数字 单引号或者双引号中包含的具体字符串 不匹配某种模式 Individual 2007-10 20 /

64

Dastage经验总结

\模式就是限制字符串只能包含八个字符,并且前五个字符必须是字母,第六个字符是下划线\,最后两个字符必须是数字。字符串\能匹配上这种模式,而字符串\或者\都不满足这种格式要求。

如果规则变成\,这个模式就是限制字符串的前五个字符必须是字母,第六个字符是下划线\,而最后两个字符必须是非数字的字符,例如:\能和这个规则匹配上。这时,字符串\不再符合新规则的要求,字符串\也不能满足要求。

(7).对编写好的代码进行编译。用户只需要点击图8中的编译(Compile)按钮即可,编译的结果出现在New Server Routine编辑窗口中Code标签页面的下部区域内。使用编译器对程序进行编译不仅可以帮助用户检查程序中潜在的语法错误,更重要的是,编译成功后的源代码将转化为可执行的对象代码(object code)。

3 DS中常见问题记录

3.1 权限管理问题

DATASTAGE开发权限上处理,非DSTAGE组用户无法登陆DS,如果将其放入DSTAGE组,由于DS是根据组来控制权限所以会造成可以访问其他project。如何处理非DSTAGE组的用户授权,让其只访问自己的project ? 答:

先建立一个组,在建立一个user,将该用户放在该组中,然后给../Ascential/DataStage目录下的DSEngine和PXEngine.751.1、PXEngine.751.2、PXEngine、DSParallel、Scratch目录包括其子目录赋777权限,收回project目录下的其他项目的可读权限。假设该用户只能访问training这项目,那么给该项目赋可读写权限。

添加datastage用户: 进入smit 3.2 job may be being monitored或者是cleanup问题

在datastage中有一个job名为N_Cv_DataStore_TT_PART_LEND_ITEM和N_Cv_ServiceLink_TT_SGM_PT_ADVANCERATE不可以编译,报job may be being monitored,但是找不到任何进程在调用该job. 答:

在Director中选中该Job,到菜单中选择Job--Clear Status File即可解决。

3.3 删除文件的问题

会有要手动清理日志状态文件的情况出现

Cannot get exclusive access to executable file for job I_Cv_DOL_TM_ORG_TYPE - job may be being monitored. 怎么解决? 答:

Individual 2007-10 21 /

64

Dastage经验总结

如果清除不成功,可以使用更高权限的用户进行清除。

3.4 sequence调度出现的错误问题

手动编译相关JOB后,有的JOB的失败因为下面这个错误。 GC job 显示FINISH 但SC JOB显示 finish(see log) 里面的错误提示是:

I_Ss_Source_DOL..JobControl (fatal error from @Coordinator): Sequence job will abort due to previous

unrecoverable errors。

a. CNTR_WDolTmOrgTypeCif,0: Unable to run job - -2. 答:

是由于系统资源不够引起,建议减少并行运行的job个数 。

3.17 字符集问题

DataStage全局字符集设为UTF-8,抽取Oracle GB2312字符集的数据源、SQL Server GB2312字符集的数据源及GB2312字符集的CSV格式文本文件时无法正常处理 ? 答:

采用GBK字符集 。 3.18 VersionControl的问题

将可以正常运行的JOB提交到VersionControl后,再从VersionControl提交到167上运行,程序报NLS Mapping error的Warning,中文字符会变为乱码。 例如:167上的JOB N_Tr_EDS_TI_SWA_CLAIMS_ORIGIN_02

167上的工程SGMEDW与对应的VersionControl工程VERSION_EDS的NLS都已经设置成一致。

ERROR LOG:

N_Tr_EDS_TI_SWA_CLAIMS_ORIGIN_02.0.CNTR_WEdsTiSwaClaimsOriginLdf.SF_TI_SWA_CLAIMS_ORIGIN_LDF.LK01: nls_map_buffer_out() - NLS mapping error, row 1 (approx), row = \\\\\\ \

\ 0. 0.00 8.070200000 0.00 \\\\\\\\\\CHANGE OIL\\ 00000000. 00000000. \\ 00006476. 00010416. 0.00 0.00 \\91.19 735.93 \答:

两者版本不一致造成的,开发机器上DATASTAGE版本为7.5.1A升级到7.5.2版本就没问题了。

Individual 2007-10 22 /

64

Dastage经验总结

3.19 sequence调不起JOB的问题

Sequence Job 调不起相关的 JOB

错误提示: I_Ss_Source_Fo08..JobControl (@Fo08_TM_VEHICLE_PRODUCT): Controller problem: Error calling DSRunJob(I_Gc_Fo08_TM_VEHICLE_PRODUCT), code=-99 [General repository interface 'other error'] 答:

处理方法:编译重跑 。

3.20 sequence调度失败的问题

Sequence Job 自动失败

错误提示如下: Job control process (pid 835698) has failed 处理方法:编译重跑

3.21 用stage调用存储过程运行失败的问题

问题描述:最初用etlmain帐号在数据库中创建了一个存储过程,然后用stage来调用很正常;后来etlmain这个帐号被删除掉了,然后在用其他帐号来调用这个存储过程的时候就报如下截图上的错误(尽管其他帐号对这个存储过程拥有的权限和etlmain一样)!

Individual 2007-10 23 /

64

Dastage经验总结

解决方法:

用当前存在的帐号重新编译etlmain创建的相关存储过程(所谓编译其实就是删除重建),然后再调用就没有问题了。建议在创建存储过程的时候用高级别帐号去创建,例如root帐号,因为存储过程的属主帐号一旦被删除,那么存储过程也就需要重建了! 3.22 DS发送邮件的配置问题

DS中发送邮件需要做哪些配置? 答:

DataStage发送邮件的机制在windows平台和Unix平台是不相同的。

在windows平台,datastage内置了一个小程序叫dssmtpmail.exe,通过此程序可以发送邮件。 在UNIX平台DataStage通过调用/usr/lib/sendmail来发送邮件。

解决方法:需将SGM的SMTP服务器地址加入ETL的服务器的SMTP地址列表中

例如,在AIX环境中的配置如下: DataStage 发邮件设置

/etc/mail/ sendmail.cf 参数

Individual 2007-10 24 /

64

Dastage经验总结

DSsmtp:[210.75.71.180] dssendmail_template.txt

* On UNIX to run sendmail, the template looks like this (doesn't require a section): #! /bin/sh

/usr/lib/sendmail -t <

Subject: %subject% Server: %server% %body%

3.23 随机错误问题

DataStage Sequence程序随机错误,错误是找不到/tmp目录下的该JOB的临时文件,重新编译后正常Run,错误描述:

I_Tr_EDS_TM_DOL_BRAND.#0.CNTR_WEdsTmDolBrandLdf_ins.LK05-Input.LK01: ds_ipcopen() - Error in open(/tmp/ade.SGMEDW.I_Tr_EDS_TM_DOL_BRAND.#0.CNTR_WEdsTmDolBrandLdf_ins.LK05-Input) - No such file or directory

解决方法:

目前修改了以下参数,连续两天未发现随机错误:

1.APT_MONITOR_SIZE to 100000 and APT_MONITOR_TIME to 5 2.可能是因为在Parallel Job中使用了Server Share Container导致的, 打开Project Property

确保已经选择Enable row buffer,并且选择Inter process 最终确认的原因:

1.Default.app设置的并行节点数为4,那对于一个Stage就会起4个进程,stage过多会导致资源耗尽 解决方案:

1.尽量降低并发度

2.首先采用1个节点运行,待稳定后逐步增加节点数,也可对复杂JOB进行 3.24 DS中的日期问题

在Datastage7.5.1A中,日期抽取问题,例如,时间问题,'2006-04-12'等日期在datastage中变为 '2006-04-11' 答:

问题原因:

dsenv 的TZ设置不能使用别名BEIST,缺省值为GMT0这表示格林标准时间 解决方法:

Datastage dsenv参数TZ=\GMT-8表示的就是北京时间

Individual 2007-10 25 /

64

Dastage经验总结

3.25 DS连接oracle问题

DATASTAGE +oracle 10g 客户端连接windows平台下oracle 10G数据库失败,报plug_in初始化失败。 答:

原因:未将ETL账户加入到DBA权限组中。加入以后就解决了。

3.26 在Sequence File Stage中的空值处理问题

在使用Sequence File Stage, ,给CHAR型等固定长度的字段赋空值时会报错 。

例如在往一个可以为NULL并且类型是CHAR(20)的字段FI_CARLINE 中写NULL数据时会报如下信息:

Sequential_File_8: When checking operator: When validating export schema: At field \但是如果是varchar类型的就没有问题。 解决方法:

在DataStage Administrator中的这个Project的User Defined中添加一个参数APT_IMPEXP_ALLOW_ZERO_LENGTH_FIXED_NULL 类型为string并且值设为0 就可以了。【注意:是数字中的0】

3.27 在DS中使用Oracle Enterprise Stage必须的权限 Oracle Enterprise Stage必须有以下权限才能使用 Have SELECT privilege on: ? DBA_EXTENTS ? DBA_DATA_FILES ? DBA_TAB_PARTITONS ? DBA_TAB_SUBPARTITONS ? DBA_OBJECTS

? ALL_PART_INDEXES ? ALL_PART_TABLES ? ALL_INDEXES

? SYS.GV_$INSTANCE (Only if Oracle Parallel Server is used)

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

在datastage中,从char类型变成整型用可以stringToDecimal这个函数,不能用AsInteger,更不能直接转 。

在datastage中和SQL server中‘回车’是用char(10)来表示的,在ORACLE中是用CHR(10)来表示的。

在datastage中要把字段中的回车替代掉就用 Ereplace(LK01.col_num,CHAR(10),' ') replace(replace(deliverer_phone,CHR(13),''),CHR(10),'') deliverer_phone 其中deliverer_phone是表示需要处理的字段,注意后面要用个别名!

Individual 2007-10 26 /

64

Dastage经验总结

3.29 从后台看JOB列表的方法

怎样查询一个工程里的JOB列表? 方法一: cd $DSHOME cd bin

dsjob -ljobs 工程名(SGMEDS01) | grep ds > 要存放的文件目录(/SGMEDWETL/tmp/tangning.txt) 方法二: uvsh

LOGTO SGMEDS01

SELECT NAME FROM DS_JOBS WHERE NAME LIKE '%SAP%' 方法三:

进入存放JOB的位置,要产看某个project的JOB信息就进到相应的project下面

用dssh“SELECT * FROM DS_JOBS WHERE NAME=’ I_Tr_TRC_TI_TRC_ASC’”

或者是uvsh “SELECT * FROM DS_JOBS WHERE NAME=’ I_Tr_TRC_TI_TRC_ASC’” 都可以实现查询。如下图所示:

3.30 Datastage和数据库的连接方法

Datastage和数据库有两种方法连接:

一种是通过ODBC连接,这个可以查看.odbc.ini文件里查看 另一种方法是通过客户端连接,就象是oracle的tnsnames.ora文件还有db2的directory一样。 从后台查看服务器配置了哪些db2客户端用db2 list db directory 3.31 在datastage中使用环境变量的问题

在datastage中如果用到了环境变量的话,那么这个环境变量一定也要在/$dshome/dsenv 中配置一下,然后重启datastage服务器以后 才会生效!

例如:在dsadm用户下的 .profile 文件中配置了一个环境变量 export ETLPATH=/SGMEDWETL/dsdata/projects 那么同样我们也要在/$dshome/dsenv 中配置一下 export ETLPATH=/SGMEDWETL/dsdata/projects

Individual 2007-10 27 /

64

Dastage经验总结

无论是在datastage 的routines 中用到这个环境变量还是用一个stage调用shell程序都要这样做,只要是通过datastage 来用到这个环境变量,那么都要在两个文件中配置!

3.32 IConv 和 OConv

IConv 将一个字符型的日期转换成一个国际数字,是天数 ; OConv 将一个日期的‘天数’转换成一个具有格式的字符串; 例如: IConv(“12-31-1967”,“D-DMY[2,2,4]” ) -----》0 IConv(“12311967” ,“D4 DMY[2,2,4]”) -----》0 IConv(“12-31-67” ,“D2-MDY[2,2,2]”) -----》0

OConv(0,“D-DMY[2,2,4]”)----》“12-31-1967” OConv(IConv(“12311967” ,“D4 DMY[2,2,4]”),”D/YDM[4,2,A10]“)-----》”1967/31/December\

3.33 在Merge中使用特殊字符

在语句中间要是需要加字符的话要用下面的方法:

Merge into (SELECT \\* FROM ##SCHEMA##.TD_ASC_PART WHERE VALID=1 AND ASC_CODE<>'\\'SGM\\'')

注意语句中的 '\\'SGM\\'' 本身应该是‘SGM’

注意:用来判断是否匹配的字段值不能为NULL,如果有为NULL的可以用一下方法来替换一下: 例如:

若字段是字符形的:coalesce(ah.STORAGE_CODE,'\\'1\\'')=coalesce(sh.STORAGE_CODE,'\\'1\\'') 若字段是数字形的:VALUS(ah.STORAGE_CODE,1)=VALUS(sh.STORAGE_CODE,1)

注释: 如何把双引号包含到echo命令的字符串中,引号是一个特殊字符,所以必须要使用反斜杠 \\ 来使shell

忽略它的特殊含义!例如你希望输出字符串: \那么只需要在引号前面加上反斜杠 \\ 就可以了

echo \ \

4 部分常用Stage 的使用说明

Stage名称 Transformer 说明 对任何需要转换的输入的数据集合进行转换,并将数据传输到其他活动的Stage 中或一个将数据写入数据库或文件的Stage 用来并行执行更复杂的排序操作 Individual 2007-10 28 /

Sort 64

Dastage经验总结

Merge Join 将一个或多个排序的更新数据集合合并成一个排序的主数据集合 在一个或多个输入数据集合上执行连接操作并输出一个结果数据集,连接操作支持:Inner, Left Outer, Right Outer 和 Full Outer Join 对于输入的数据记录进行分组并且计算每一组的合计和总计 对多个表进行左外连接操作 把多个数据集合并成一个大的数据集,且表结构要相同 删除重复的记录 基于用户指定的约束(“where 子句),将输入数据转换到不同的输出数据集(Link),对于过滤记录是非常有效的 相当于C语言中Switch功能,通过selector来选定字段,case来指定值,最多128个output, 1个reject link 拷贝一个输入数据集到多个输出数据集;而且不需要修改 抓取两个输入数据集,表现为前和后,并且获取后面的数据路输出一个记录表现已经改变的数据集. 行列互换 将记录字段值显示到作业日志或分开的output link,就象Copy Stage将输入的数据拷贝到一个或多个输出数据集. IBM DB2 UDB 访问 ? 从数据库读取数据或将数据写入DB2数据库 ? 顺序执行或并行执行 ? 支持DB2的HASH分区 ? 支持WRITE,UPSERT和LOAD的写方法 ? 支持表,自动产生SQL和用户定义SQL读方法 Oracle数据库访问 ? 从ORACLE数据库读取数据或将数据写入数据库 ? 顺序执行或并行执行 ? 支持LOAD和UPSERT写方法 ? 支持TABLE和QUERY读方法 Teradata数据库访问 ? 从TERADATA数据库读取数据和将数据写入数据库 ? FastExport: Table, Auto-generated SQL, User-generater SQL ? FastLoad: Create, Append, Replace, Truncate ? 顺序执行和并行执行 ? 支持TUF6.1, TTU7.0 Informix XPS 数据库访问 ? 从INFORMIX XPS数据库读取数据或将数据写入数据库 Individual 2007-10 29 / Aggregator Lookup Funnel Remove Duplicates Filter Switch Copy Change Capture Pivot Peek Surrogate_Key_Generator 用于产生一个代理键 DB2 Oracle Teradata Informix XPS 64

Dastage经验总结

? 顺序执行或并行执行 ODBC 使用ODBC 访问数据库 5 dsjob 语法说明:

登陆DataStage服务器,输入:cd $DSHOME/bin;在输入dsjob 回车,进入dsjob命令;

Command Syntax:

dsjob [-file | [-server ][-user ][-password ]] []

Valid primary command options are: -run -stop -lprojects -ljobs

-linvocations -lstages -llinks

-projectinfo -jobinfo -stageinfo -linkinfo -lparams -paraminfo -log -logsum -logdetail -lognewest -report -jobid -import 命令说明 语法 命令 -run -stop -lprojects -ljobs -lstages -llinks 64

运行JOB,也可获得JOBSTATUS 停止JOB运行 显示服务器上的所有工程名 显示一个工程上的所有JOB名 显示一个JOB中所有的stage名 显示一个stage中含有的LINK名 dsjob –run dsjob –run –jobstatus dsjob –stop dsjob –lprojects dsjob -ljobs dsjob -lstages [-useid] dsjob -llinks [-useid] Individual 2007-10 30 / Dastage经验总结

-projectinfo -jobinfo -stageinfo -lparams -paraminfo -log -lognewest 显示一个工程的信息,包括服务器名,工程名 显示一个JOB的信息,包括Job Status, dsjob -jobinfo [-useid] Job Start Time, Invocation List等 显示Stage 的信息,包括Stage Type, dsjob In Row Number, Stage Name等 显示一个JOB中的参数列表 显示参数的信息 向JOB日志中写信息,可以写一个INFO信息,或者一条WARNING信息 获得最新的日志ID dsjob -projectinfo -stageinfo dsjob -paraminfo [-useid] dsjob -lparams [-useid] [-useid] dsjob -log [-info | -warn] dsjob -lognewest [-useid] [] event type = INFO | WARNING | FATAL | REJECT | STARTED | RESET | BATCH dsjob -logdetail [-useid] [] dsjob -report [-useid] [report type>] report type = BASIC | DETAIL | XML dsjob -import DSXfile [ [-OVERWRITE] -JOB[S] | jobname ...] | [-LIST] -logdetail -report 根据日志ID,来获得日志的详细信息 得到一个JOB最近的状态报告信息,包括:JOB运行时间,结束时间,耗时,JOB中的STAGE,LINK信息等. -import 向一个工程导入JOB 6

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

步骤如下:

1. 登陆DataStage服务器,输入登陆帐户,进入系统;

Individual 2007-10 31 /

64

Dastage经验总结

2. 输入命令: cd $DSHOME,进入DSEngine引擎;

3. 输入cd bin,进入bin目录

Individual 2007-10 32 /

64

Dastage经验总结

4. 输入dsjob,进入dsjob命令帮助

Individual 2007-10 33 /

64

Dastage经验总结

5. 输入dsjob -ljobs SGMDM05 > /SGMEDWETL/tmp/hf_jobs,把PROJECT为

SGMDM05下的JOB放到目录/SGMEDWETL/tmp下的hf_jobs文件里;

Status code = 0?表示导出成功

输入cd /SGMEDWETL/tmp,进入该目录,用命令more hf_jobs,查看导出的JOBS

Individual 2007-10 34 /

64

Dastage经验总结

如果想把服务器的hf_jobs导到本地机器上,可以使用FTP到本地,也可以使用第三方工具如: filezilla.

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

1. cd $DSHOME/bin 2. uv –admin –info 如下图:

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

假设把机器167上的文件/SGMEDWETL/tmp/hf_jobs FTP 到机器33上.

1. 登陆到33机器, 输入命令:ftp 210.75.71.167, 进入167机器,输入167的登陆帐户进

入167系统;

Individual 2007-10 35 /

64

Dastage经验总结

2. 输入type binary,设置传输时所用的字符集,binary表示二进制

3. 输入命令:get /SGMEDWETL/tmp/hf_jobs /SGMEDWETL/tmp/hf_jobs_ftp,

Individual 2007-10 36 /

64

Dastage经验总结

/SGMEDWETL/tmp/hf_jobs 表示remotefile; /SGMEDWETL/tmp/hf_jobs_ftp 表示localfile 4. 输入quit退出FTP.

9 如何获得Jobstatus ,步骤如下:

1. 登陆到DataStage 服务器,输入命令: cd $DSHOME/bin 进入bin 目录;

2. 输入命令: dsjob –run;

Individual 2007-10 37 /

64

Dastage经验总结

10 dsjob –run 的用法

dsjob -run

[-mode ] [-param =] [-warn ] [-rows ] [-wait]

[-opmetadata ] [-disableprjhandler] [-disablejobhandler] [-jobstatus] [-userstatus] [-local] [-useid]

如果我们想查看JOB: N_Tr_ASDM_TF_PT_VHCL_MODEL_DISTRIBUTION_month_02的状态,输入: dsjob –run –jobstatus SGMEDW N_Tr_ASDM_TF_PT_VHCL_MODEL_DISTRIBUTION_month_02 回车运行该命令时,对应的JOB: N_Tr_ASDM_TF_PT_VHCL_MODEL_DISTRIBUTION_month_02 会跑起来,等JOB 跑完了会返回一个整型值,这个值就是jobstatus

Jobstatus=1 job运行成功,而且没有WARNING;

Individual 2007-10 38 /

64

Dastage经验总结

Jobstatus=2 job运行成功,但是有WARNING; Jobstatus=3 job运行失败.

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

我们可以使用命令在后台启动和停止一个JOB,运行一个JOB 可用 dsjob –run 命令; 停止一个JOB 可用 dsjob –stop 命令.

? 运行JOB,步骤如下:

1. 登陆DataStage 服务器,输入 $DSHOME/bin 进入bin 目录; 2. 输入dsjob ,进入dsjob命令;

3. 输入: dsjob -run SGMEDW N_Tr_ASDM_TF_PT_VHCL_MODEL_DISTRIBUTION_month_02, 回车

运行,就会运行SGMEDW Project下的JOB

N_Tr_ASDM_TF_PT_VHCL_MODEL_DISTRIBUTION_month_02.

Individual 2007-10 39 /

64

Dastage经验总结

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

? 停止JOB,步骤如下

1. 步骤同运行JOB的1,2 两步;

2. 输入命令: dsjob -stop SGMEDW N_Tr_ASDM_TF_PT_VHCL_MODEL_DISTRIBUTION_month_01,

回车运行, 就会停止SGMEDW Project下的JOB

N_Tr_ASDM_TF_PT_VHCL_MODEL_DISTRIBUTION_month_01的运行(如果该JOB正在运行的话)

Individual 2007-10 40 /

64

Dastage经验总结

12 DS Oracle EE Stage 配置

1安装Oracle客户端

2添加Oracle用户到dsadm group组选项 3配置DS服务器dsenv文件 4配置tnsnames.ora文件 5重起DS服务器

6 配置Oracle Stage抽取的Select权限 7 Oracle EE Stage配置结束

11.1 安装Oracle客户端

本部分请DBA协助完成。

在DataStage服务器上安装Oracle客户端。

11.2 添加Oracle用户到dsadm group组选项

本部分请操作系统管理员协助完成。

修改DataStage服务器上dsadm用户Group Set,添加Oracle用户组

11.3 配置DataStage服务器dsenv文件

Individual 2007-10 41 /

64

Dastage经验总结

创建环境变量ORACLE_HOME,并设置成$ORACLE_HOME路径; 创建环境变量ORACLE_SID,并赋值正确的服务器名

添加 $ORACLE_HOME/bin 到PATH; 添加 $ORACLE_HOME/lib 到LIBPATH, LD_LIBRARY_PATH

注意:PATH路径中,$APT_ORCHHOME/bin必须在$ORACLE_HOME/bin前面 ####### ORACLE ######## ORACLE_HOME=/oracle/product/9.2; export ORACLE_HOME PATH=$PATH:$DSHOME/bin:$APT_ORCHHOME/bin:$APT_ORCHHOME/osh_wrappers:$ORACLE_HOME/bin export PATH LIBPATH=$LIBPATH:$ORACLE_HOME/lib32:$ORACLE_HOME/rdbms/lib32:$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib export LIBPATH ORACLE_SID=pr011.shanghaigm.com export ORACLE_SID export NLS_LANG=\export TZ=\11.4 配置tnsnames.ora

PR009 =

(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = PR009.SHANGHAIGM.COM)(PORT = 1521)) )

(CONNECT_DATA =

(SERVICE_NAME = PR009.SHANGHAIGM.COM) ) )

11.5 重起DataStage服务

断开所有DataStage客户端。

停止DataStage服务,执行命令uv –admin –stop

等待30秒uv -admin -start重新启动DataStage服务。

11.6 配置Oacle Stage抽取的Select权限

若使用OPS(Oracle Parallel Server),则需要sys.gv_$instance和sys.v_$cache: GRANT select ON sys.gv_$instance TO public;

GRANT select ON sys.v_$cache TO public;

Individual 2007-10 42 /

64

Dastage经验总结

其他Select权限有:

dba_extents dba_data_files dba_tab_partitions dba_tab_subpartitions dba_objects all_part_indexes all_part_tables all_indexes

建议创建角色来赋权限,如下:

CREATE ROLE DSXE;

GRANT SELECT on sys.dba_extents to DSXE; GRANT SELECT on sys.dba_data_files to DSXE; GRANT SELECT on sys.dba_tab_partitions to DSXE; GRANT SELECT on sys.dba_tab_subpartitions to DSXE; GRANT SELECT on sys.dba_objects to DSXE; GRANT SELECT on sys.all_part_indexes to DSXE; GRANT SELECT on sys.all_part_tables to DSXE; GRANT SELECT on sys.all_indexes to DSXE; GRANT DSXE to ;

11.7 Oacle EE STAGE配置结束

创建测试job,测试从Oracle数据库中抽取数据

配置过程中,不可随意更改路径顺序。

13

DS ODBC 的配置

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

12.1 修改$DSHOME /dsenv

ODBC访问的任何数据源,都要在dsenv中配置环境变量,例如访问ORACLE,DB2库,都要进行ORACLE,DB2的环境配置,主要包括: ? 数据库客户端连接必需的环境变量 ? 设置$PATH ? 设置$LIBPATH

Dsenv的修改,要重起服务才有效.

12.2 修改$DSHOME/.odbc.ini, 来提供数据库连接信息;

对于不同平台的配置示例,在DS的路径:$DSHOME/../branded_odbc/IBM_Tools 下有示例,下面是应用例子:

Individual 2007-10 43 /

64

Dastage经验总结

[PRINTDB_JQS]

Driver=/SGMEDWETL/dshome/Ascential/DataStage/branded_odbc/lib/VMmsss.so

Description=DataDirect SQL Server Wire Protocol Database=SGMPRINT LogonID=sgmprint Password=sgmprint Address=210.75.67.1,1022 IANAAppCodePage=113 QuotedId=No AnsiNPW=No

[SAPSTAGING] QEWSD=39400

Driver=/SGMEDWETL/dshome/Ascential/DataStage/branded_odbc/lib/VMor820.so

Description=DataDirect 5.00 Oracle ApplicationUsingThreads=1 ArraySize=60000

CatalogIncludesSynonyms=1 CatalogOptions=0

DefaultLongDataBuffLen=1024 DescribeAtPrepare=0 EnableDescribeParam=0 EnableNcharSupport=0 EnableScrollableCursors=1 EnableStaticCursorsForLongData=0 EnableTimestampWithTimeZone=0 LocalTimeZoneOffset= LockTimeOut=-1 LogonID=

OptimizeLongPerformance=0 Password=

ProcedureRetResults=0 ServerName=SWAPRD UseCurrentSchema=1

12.3 修改$DSHOME/uvodbc.config, 来指定DSN(data source name).

在$DSHOME/../branded_odbc/IBM_Tools 下也有uvodbc.config示例;

DBMSTYPE = ODBC ----注意“=”两边有空格

DNS的名字要和.odbc.ini中的名字一样,如下:

DBMSTYPE = ODBC

Individual 2007-10 44 /

64

Dastage经验总结

DBMSTYPE = ODBC

Note: 一般情况下Project directory下也要放置一个uvodbc.config,默认情况

下,DataStage在Projects directory下寻找uvodbc.config文件,找到了就在工程目录里使用它,否则会到$DSHOME下寻找uvodbc.config文件。

14

ETL系统扩展

当系统资源不足时,有两种方式扩展系统性能:SMP和MPP

1. SMP和MPP的区别

SMP是均衡的多处理系统,增加的CPU和Memory被所有的Project共享,好处

是扩展实施简单,只需修改Config File;缺点是受机器Time Window的限制,最高可扩展到64 CPU.

MPP是多数据量的并行处理系统,扩展的服务器与原服务器之间没关系,CPU

和Memory各自独占, 分别独立运行; 扩展的服务器与原服务器基于应用的工作量,将应用分别分配到两台机器独立运行.

2. 两种扩展方式可结合使用: 当SMP的扩展超出极限,选择MPP作为补充,即

应用切分扩展 3. 共有三种方式扩展MPP系统,前提是:每两台机器间通过Rsh交互;每台机器

都必须创建相同的dsadm用户及dstage主组;每台机器上的安装路径或者挂载路径必须完全一致。

? 扩展节点安装一套新的Datastage服务器,通过修改Configuration File和

原有的DataStage服务器组成MPP系统。 ? 使用$install_dir/install/ copy-orchdist脚本复制Datastage Engine到新的

扩展节点,修改Configuration File加载新的节点。 ? 通过NFS共享已有的Datastage目录,使新扩展的节点可以访问到

DataStage目录。修改configuration file添加新的节点。

15 Remote Shell (rsh)的配置

sisiu056, sisiu057, sisiu058, sisiu060四台机器任意两台之间都相互信任(即rlogin都可以成功),相互之间都可以通信,任意两个结点之间可以不需要密码,通过rsh执行命令或者登陆,主要涉及到两个文件的修改: .rhosts文件和 hosts.equiv文件。

14.1 创建并配置 .rhosts文件

Individual 2007-10 45 /

64

Dastage经验总结

? 用户以qdb01登录sisiu056, sisiu057, sisiu058, sisiu060中的任意

一台机器。

? 在/home/qdb01目录下创建名为.rhosts的文件。

vi /home/qdb01/.rhosts

? 将如下内容填加到.rhosts文件中。

sisiu056 qdb01--------hostname username sisiu057 qdb01 sisiu058 qdb01 sisiu060 qdb01

14.2 修改/etc/hosts.equiv文件

将如下内容分别追加到sisiu056, sisiu057, sisiu058, sisiu060四台机器的/etc/hosts.equiv文件末尾。

sisiu056 qdb01 sisiu057 qdb01 sisiu058 qdb01 sisiu060 qdb01

运行rlogin hostname命令查看rsh是否配置成功。

16 dsadmin命令的使用

15.1 dsadmin命令的使用

登陆DataStage服务器,输入:cd $DSHOME/bin;在输入dsadmin 回车,进入dsadmin命令;

Command Syntax:

dsadmin [-file | [-server ][-user ][-password ]] []

Valid primary command options are: -createproject -deleteproject -oshvisible -enablercp

-enablejobadmin -envadd -envdelete

Individual 2007-10 46 / 64

Dastage经验总结

-envset

-advancedruntime -basedirectory

-deploymentdirectory -customdeployment -listprojects -listproperties -listenv

-enablegeneratexml

命令 -createproject -deleteproject -oshvisible -enablercp -enablejobadmin -envadd 命令说明 创建一个工程Project 删除一个工程Project 使产生的OSH代码可见 使RCP有效或失效 使JOB处于可管理状态 增加环境变量,也即可作为JOB的参数 语法 dsadmin -createproject [-location ] dsadmin -deleteproject dsadmin -oshvisible TRUE | FALSE dsadmin -enablercp TRUE | FALSE dsadmin -enablejobadmin TRUE | FALSE dsadmin -envadd -type STRING | ENCRYPTED -prompt \ -envdelete -envset -advancedruntime -basedirectory 删除环境变量 设置环境变量的值 dsadmin -envdelete dsadmin -envset -value \dsadmin -advancedruntime \runtime options>\dsadmin -basedirectory dsadmin -deploymentdirectory dsadmin -customdeployment \deployment commands>\dsadmin -listprojects dsadmin -listproperties -deploymentdirectory -customdeployment -listprojects -listproperties 显示一台机器上所有的工程名 显示一个工程的属性,包括OSHVisible=1 JobAdminEnabled=1 RTCPEnabled=1 PXAdvRTOptions= PXRemoteBaseDirectory= PXDeployJobDirectoryTemplate= PXDeployCustomAction= Individual 2007-10 47 / 64

Dastage经验总结

PXDeployGenerateXML=0 -listenv -enablegeneratexml 显示一个工程的所有环境变量 是否产生XML dsadmin -listenv dsadmin -enablegeneratexml TRUE | FALSE

12.2 自定义环境变量的使用

在datastage中,使用Sequential_File的时候需要对NULL值做处理,但是前提是要在DataStage Administrator中的user defined中添加一个环境变量 Name: APT_IMPEXP_ALLOW_ZERO_LENGTH_FIXED_NULL Type: string Value: 0

17 如何启动JobMonApp

进入/Ascential/DataStage/PXEngine/java目录,或$APT_ORCHHOME/java,输入命令:sh jobmoninit 来启动JobMonApp

注:$APT_ORCHHOME是并行引擎的目录

18 DS.TOOLS

先进入 cd $DSHOME/bin

然后用uvsh命令进入到tcl语言界面,如下:

Individual 2007-10 48 /

64

Dastage经验总结

然后用LOGTO SGMINF_MQ 命令登录到project SGMINF_MQ的目录

然后输入DS.TOOLS命令就可以进入到DS.TOOLS对话框界面了,如下:

注意:退出的时候要先按‘回车键’,然后输入‘Q’再回车就可以了!

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

DataStage Tools Menu

1. Report on project licenses

2. Rebuild Repository indices ----------重建索引 3. Set up server-side tracing 4. Administer processes/locks 5. Adjust job tunable properties ………….

Which would you like? ( 1 - 5 ) ?

Individual 2007-10 49 /

64

Dastage经验总结

进入DS.TOOLS的步骤及释放锁:

1. Connect in the server through Telnet

2. Execute the dsenv file: cd $DSEngine ; . dsenv 3. Go to the directory of the project:cd $DSHOME/bin

4. Execute the uvsh或dssh located in $DSEngine/bin starting from the path of the

project.

5. Execute the command DS.TOOLS

6. Choose the option 4 for processes and locks. 7. Choose the option 4 again (to list all the locks)

8. Identify the name of the job and your respective PID.

9. Select the option 7 to liberate lock for number of the process and inform PID 10. It will be requested a confirmation, type Y to confirm.

11. To leave of the application, type enter until that returns to the prompt of the

universe “>” and type Q.

列出所有锁的命令:LIST.READU EVERY

方法一:该命令跟上面的Option 4 ? Option 4(list all the locks) 的功能一样 方法二:cd $DSHOME/bin, 然后输入命令list_readu

方法三:cd $DSHOME/bin, 然后输入命令uvsh 或者dssh ,

然后输入命令LIST.READU EVERY

Individual 2007-10 50 /

64