分享

datastage经验总结

 乱七九糟 2015-07-03

导读:DSsmtp:[210.75.71.180]dssendmail_template.txt*OnUNIXtorunsendmail,thetemplatelookslikethis(doesn'trequirea<file>section):#!/bin/sh/usr/lib/sendmail-t<<////From:%from%To

datastage经验总结

DSsmtp:[210.75.71.180]

dssendmail_template.txt

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

/usr/lib/sendmail -t <<////

From: %from%

To: %to%

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"

GMT-8表示的就是北京时间

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 "FI_CARLINE": "null_field" length (0) must match field's fixed width (20)

但是如果是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是表示需要处理的字段,注意后面要用个别名!

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

无论是在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

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

echo "\"/dev/abc"\"

"/dev/abc"

4 部分常用Stage 的使用说明

五星文库包含总结汇报、人文社科、经管营销、考试资料、办公文档、文档下载、党团工作以及datastage经验总结等内容。

本文共16页1<<45678910>>16

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多