zoukankan      html  css  js  c++  java
  • 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。

     

     

  • 相关阅读:
    SharePoint Timer Job
    内容查询部件 之 简单美化
    SharePoint list Search
    Sharepoint 2010 Content Search Webpart
    如何添加Features,处理自己的程序
    SharePoint 读取 UserMulti 类型的字段
    SharePoint 账号
    配制备用访问映射
    项目管理汇总
    Altium Desgner软件,PCB设计中铺铜的作用
  • 原文地址:https://www.cnblogs.com/ImToffee/p/2695972.html
Copyright © 2011-2022 走看看