Datastage里Aggregator的一些注意事项

软件:DataStage 8.1

Aggregator的ouput有两种,calculation和count,这两种output列都是自动转成nullable的,也就是Null属性是Yes。而数据类型会自动变成Double。不要奇怪,Count的output也是double而不是认为的integer。

因为Datastage的integer只支持到2147483647。

因为计算结果会变成nullable,因为会变成double,我们需要在后面加一个Modify或者Transformer来处理。

 

一。Null的处理

在Modify Stage中可以用newcolumn=HandleNull(OldColumn)

在Transformer中可以用NullToValue(oldcolumn)

 

二。decimal->integer的处理

一般的9及以下长度的decimal,如decimal(9,0)这样的,可以直接用modify的newcolumn:int32=int32_from_decimal(oldcolumn)

或者Transformer的AsInteger(oldcolumn)

但是由于Datastage的integer只支持到2147483647,而decimal(10,0)可能会出现3×××××××××的情况,所以系统会报range limitation的错误
。解决方法是用modify的newcolumn:int64=int64_from_decimal(oldcolumn),同时列类型改成bigint  。同理可用transformer的asinteger(这个方法本人实践时依旧报错,时间有限来不及研究原因,但是网上搜索出来这样可行)

还有一种方法,整个job都使用decimal,在目标DB connector的地方改写insert语句,用cast。

有人问cast怎么写,用sqlbuilder来生成一段sql,然后把要改的字段改成cast(colname as integer),注意这个仍然会报range limiation.本人尝试过把DB connector的fail on type mismatch, fail on length mismatch都改成No,依旧报warning并且最后会出错。本人最后的办法是改成了9,但是如果是真的一定要10,也许要cast (colname as bigint),但是这样不确定DB connector到数据库会不会mismatch了。以后有空再试吧。

奇怪的是datastage允许有integer10的类型,但是转换成integer10就会有问题。即使数据库会允许10位的integer。

 

 

转载于:https://www.cnblogs.com/ImToffee/archive/2012/09/21/2695972.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值