使用 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;
我需要使用 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;