使用 Informatica 基于条件生成序列

Sequence generation based on a conditon using Informatica

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

第一张图为示例输入数据

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

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

您可以使用两个单独的序列转换来做到这一点。
第一个将从 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) 
                       )  
                     )

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

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;