【问题标题】:Sequence generation based on a conditon using Informatica使用 Informatica 基于条件生成序列
【发布时间】:2021-10-18 06:51:09
【问题描述】:

我需要使用 Informatica 实现以下数据转换,

第一张图是样本输入数据

转换后的数据应如下所示, 这里对于不同的类型,我有从 200 开始的序列,在这种情况下,bfd 应该被视为一个组,而 (klm,kln) 一起被视为另一组。新的id是id+序号

我应该使用 UDF 还是通过创建过程.. 或使用一些转换集.. 我是 informatica 的新手,对我应该遵循什么方法感到困惑.. 提前感谢您的帮助!

【问题讨论】:

    标签: sql plsql etl informatica informatica-powercenter


    【解决方案1】:

    您可以使用两个单独的序列转换来做到这一点。
    第一个将从 0 开始并以 1 递增。
    第二个将从 200 开始并以 1 递增。
    然后使用IIF 条件生成new_id 列。如果你有几个不同类型的序列,你可以用 IIF 来做。但是如果你有数百个,可能你需要使用一些 UDF 等。

    seq_1 = attach NEXTVAL from sequence generator 1
    seq_2 = attach NEXTVAL from sequence generator 2
    new_id = TO_INTEGER ( IIF( group ='bfd', id || seq_1, 
                            IIF( group = 'klm' or group ='kln', id || seq_2) 
                           )  
                         )
    

    【讨论】:

    • 我应该通过表达式转换使用IIF条件吗?如果我的疑问非常基本,我很抱歉..但我仍处于学习阶段..
    • 是的。使用表达式转换计算新的 id 列。
    • 非常感谢您的帮助! :)
    【解决方案2】:

    您可以编写一个查询来执行此操作:

    select t.*,
           (case when group = 'bfd'
                 then id * 10 + row_number() over (partition by group order by id)
                 when group in ('klm', 'kln')
                 then id * 100 + row_number() over (partition by case when group in ('klm', 'kln') then 1 else 2 end order by id)
            end) as new_id
    from t;
    

    【讨论】:

    • 是的!我有一个针对同一场景的 SQL Oracle 查询..但我不知道我可以使用它或将它集成到 informatica Powercenter 中的方式
    • @Chang 。 . .您的问题被标记为 SQL 和 PL/SQL,表明 SQL 解决方案是可以接受的。
    • 是的是的..它是..我只是想知道我是否可以使用 SQL 转换到它!谢谢您的帮助! :)
    猜你喜欢
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 2011-04-10
    • 2021-10-12
    • 1970-01-01
    相关资源
    最近更新 更多