问题一:根据给出的id信息找到表,列!!!
SQL0407N Assignment of a NULL value to a NOT NULL column "TBSPACEID=2, TABLEID=50, COLNO=8" is not allowed. SQLSTATE=23502
解决:
上面的错误信息没有直接给出table名,可以通过下面的语句得到table和column
SELECT * FROM SYSCAT.TABLES WHERE TBSPACEID = 2 AND TABLEID = 50
SELECT * FROM SYSCAT.COLUMNS WHERE TABNAME= '*******' AND COLNO = 8
---当然你也可以写在一起
SELECT tabschema, tabname, colname
FROM syscat.columns
WHERE colno = ... AND
( tabschema, tabname ) IN
( SELECT tabschem, tabname
FROM syscat.tables
WHERE tbspaceid = ... AND
tableid = ... )
--
问题二:乱码问题
在DSEnge目录下的dsenv中添加如下内容。 LANG=zh_CN.GB18030;export LANG LC_ALL=zh_CN.GB18030;export LC_ALL LC_CTYPE=zh_CN.GB18030;export LC_CTYPE LC_COLLATE=zh_CN.GB18030;export LC_COLLATE LC_MONETARY=zh_CN.GB18030;export LC_MONETARY LC_NUMERIC=zh_CN.GB18030;export LC_NUMERIC LC_TIME=zh_CN.GB18030;export LC_TIME LC_MESSAGES=zh_CN.GB18030; export LC_MESSAGES
--
DataStage是Ascential的ETL工具,后为被IBM收购了,现在已经是WebSpare的一个组件了!
以前按安装文档来安装的DataStage,一直是没有问题的。可是现在到了苏州这边,却出了问题,原因是有些字是GB2312识别不出来了,比如说这个字“旻”字。
折腾了几天,总算有了些经验,终于解决了这个问题,配置如下:
用户的.bash_profile里面:NLS_LANG=AMERICAN_AMERICA.ZH16GBK,如果说开发机器是Windows,那注册表项:[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1] 中 NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 这是为了能够在客户端正确地显示字符。
DataStage Administration Client 选中自己的工程,点击NLS,查看其中的确Parallel Maps项,Dafault map name:直接输入GBK。
PXEngine\etc\Oracle_cs.txt 这个文件是Oracle和DataStage之间交互用的,添加以下二行:
GBK ZHS16GBK
ZHS16GBK GBK
做好以上三点,应该就没事了
问题三:补丁问题
datastage在运行时总是遇到这问问题,但是在项目重建之后好个一天半天的问题又出现了!据说是补丁问题!我们现在用的版本是8.7.0.0,,据说升级到8.7.0.1!!!!
a call to an OLe server has failed ,or runtime error occurred within the ole itself
error calling subroutine :DSR_EXECJOB (action=5)
重建客户端或许有用,把之前说有练过的客户端重新安装一遍!!!注意卸载的时候记得删除注册表!具体详见网址:http://www-01.ibm.com/support/docview.wss?uid=swg21456615
但是我安装上面删除了注册表之后客户端的DB2无法启动了,
报错如下
DB@JAVIT : RC=9501
DB2INSTANC : -2029059760
cannot create odbc ENV... handle
然后我就想卸载DB2重装,最可恶的是DB2 竟然卸载不了,没方法办法,强制卸载!!方法见我DB2栏目的博客!!
但是我在用那种方法试了之后不管用,没办法,就把新安装的datastage客户端谢了,把所有的有关IBM的注册表都清了,但是安装的时候好像还是报错,没办法,换另一个版本的DB2重装了!!
问题四:ds的transformer报找不到输入字段错误
ds的transformer报找不到输入字段错误,但是经过仔细的排查,发现字段是select出来且各个stage(join)都引用了的!!why
原来是我在select该字段的时候用了trim,但是该字段本来的类型是decamal!!!trim之后自动转化成varchar,类型不匹配,transformer不识别
问题五:job运行失败但是数据正常插入
报错如下:
IFS_CUSTINDEX,0: SQLFetch reported: SQLSTATE = 22018: Native Error Code = -420: Msg = [IBM][CLI Driver][DB2/AIX64] SQL0420N Invalid character found in a character string argument of the function "DECFLOAT". SQLSTATE=22018 (CC_DB2DBStatement::dbsFetch, file CC_DB2DBStatement.cpp, line 1,986)
找了半天不知道原因在哪里;
后来原来是
在写sql的where条件式 比如 ”where class=3 “ class为varcha类型!就这样报错了,view data的时候是没有问题的!
看了http://www-01.ibm.com/support/docview.wss?uid=swg21448700之后,隐约知道是数据类型的问题,但是他隐藏的实在是太深了!
问题六:transformer之后行减少很多
报错如下
Transformer_31,0: Field 'APT_Decimal::ErrorBase: From: divizor is 0 via exception..' from input dataset '0' is NULL. Record dropped.
搜到这个网站
http://www.dsxchange.com/viewtopic.php?p=411460
是这样说的
|
|
|
|
|
Detect which input columns to that Transformer stage contain nulls and which operation (stage variable, constraint expression, derivation expression) is having problems handling null because it contai ... |
|
|
|
|
|
Are you doing any division operations in the last transformer? And if so, are he columns used for division have zero or null in them? |
果然,我在做除的时候尽管做了分母是否为0的判断,但是在除的时候竟然把分子写成了分母!故导致问题!