Informatica PowerCenter按分组条件生成指定范围Sequence序列实现咨询
解决方案
不需要自定义UDF,修改现有映射逻辑即可实现需求,有两种可选实现方案:
方案1:拆分数据流(推荐,性能稳定,适合大数据量场景)
核心逻辑是仅让符合分组条件的行触发序列自增,避免无效行占用序列值:
- 第一步:在数据源后新增Router转换,将数据流拆分3个输出分支:
- 分支1:匹配条件
group = 'bfd' - 分支2:匹配条件
group IN ('klm', 'kln') - 分支3:其他不满足规则的行
- 分支1:匹配条件
- 第二步:分支1接入第一个Sequence Generator,配置为起始值0、步长1、上限200,仅该分支的行调用序列的
NEXTVAL,不会被其他行占用序列值 - 第三步:分支2接入第二个Sequence Generator,配置为起始值201、步长1、上限499,同理仅该分支的行消耗序列
- 第四步:3个分支通过Union转换合并后,进入Expression转换做字段拼接,
new_id的表达式调整为:
TO_INTEGER( IIF(group = 'bfd', TO_CHAR(id) || TO_CHAR(seq_1), IIF(group IN ('klm','kln'), TO_CHAR(id) || TO_CHAR(seq_2), NULL) ) )
方案2:Expression变量计数(适合中小数据量,不需要额外转换组件)
通过变量端口自行控制序列自增逻辑,无需使用Sequence Generator组件:
- 第一步:先对数据源做排序,排序规则为按
group字段排序,确保同组数据连续进入后续转换 - 第二步:在Expression转换中新增2个变量端口,计算规则如下:
v_bfd_seq:整数类型,初始值设为-1,表达式为IIF(group = 'bfd', v_bfd_seq + 1, v_bfd_seq)v_kl_seq:整数类型,初始值设为200,表达式为IIF(group IN ('klm','kln'), v_kl_seq + 1, v_kl_seq)
- 第三步:输出端口
new_id直接使用变量计算:
TO_INTEGER( IIF(group = 'bfd', TO_CHAR(id) || TO_CHAR(v_bfd_seq), IIF(group IN ('klm','kln'), TO_CHAR(id) || TO_CHAR(v_kl_seq), NULL) ) )
注意事项
- 拼接前需将数值型的
id和序列值转为字符串,避免直接拼接时被识别为数值加法运算 - 可新增校验逻辑,当bfd组序列超过200、klm/kln组序列超过499时抛出异常或过滤,避免超出规则要求的序列区间
内容的提问来源于stack exchange,提问作者Chang
相关产品推荐
相关产品推荐

