博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Datastage里Aggregator的一些注意事项
阅读量:6157 次
发布时间:2019-06-21

本文共 1210 字,大约阅读时间需要 4 分钟。

软件: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

你可能感兴趣的文章
小程序: 查看正在写的页面
查看>>
Jenkins持续集成环境部署
查看>>
MWeb 1.4 新功能介绍二:静态博客功能增强
查看>>
预处理、const与sizeof相关面试题
查看>>
爬虫豆瓣top250项目-开发文档
查看>>
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>
配置 RAILS FOR JRUBY1.7.4
查看>>
AndroidStudio中导入SlidingMenu报错解决方案
查看>>
修改GRUB2背景图片
查看>>
Ajax异步
查看>>
好记性不如烂笔杆-android学习笔记<十六> switcher和gallery
查看>>
JAVA GC
查看>>
3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
查看>>