如何在Informatica中拆分源表拼接字段生成目标表对应独立行记录
Informatica 逗号分隔多值行拆分实现方案
以下两种常用方案均可实现单行多逗号分隔值拆分为多行一对一输出的需求:
方案1:Expression + Normalizer 转换(适配固定最大拆分数量场景)
无需编写代码,适合拆分个数上限明确的业务场景:
- 导入源表
src、目标表tgt的元数据到Designer中,确认源表id、Name字段为字符串类型。 - 新增Expression转换,接入源表的id、Name字段,按最大拆分个数新增对应输出端口,以最多拆2个为例:
id1端口:表达式填REG_EXTRACT(id, '^([^,]+),?.*', 1)id2端口:表达式填REG_EXTRACT(id, '^[^,]+,([^,]+)$', 1)name1端口:表达式填REG_EXTRACT(Name, '^([^,]+),?.*', 1)name2端口:表达式填REG_EXTRACT(Name, '^[^,]+,([^,]+)$', 1)
- 新增Normalizer转换,接入Expression输出的4个端口:
- 打开Normalizer属性面板的「Normalizer」标签,新增两个输出字段
out_id、out_name,二者的Occurs属性都设置为2(和最大拆分个数一致)。 - 将id1、id2分别映射到
out_id的两个出现位置,name1、name2分别映射到out_name的两个出现位置。
- 打开Normalizer属性面板的「Normalizer」标签,新增两个输出字段
- 新增Filter转换,设置过滤条件
NOT ISNULL(out_id) AND LENGTH(TRIM(out_id)) > 0,过滤拆分产生的空值行。 - 将Filter的
out_id映射到目标表id字段,out_name映射到目标表Name字段,保存映射、配置会话后运行即可得到预期结果。
方案2:Java 转换(适配动态拆分数量场景,更灵活)
适合拆分个数不固定的场景,无需提前预设上限:
- 拖入Java转换组件,接入源表的id、Name字段,新增两个输出端口
out_id、out_name,数据类型和目标表对应字段匹配。 - 切换到Java转换的「On Input Row」标签页,编写如下处理逻辑:
// 按逗号拆分两个字段为数组 String[] idArr = id.split(","); String[] nameArr = Name.split(","); // 遍历输出一一对应的行 for(int i = 0; i < idArr.length && i < nameArr.length; i++){ out_id = idArr[i].trim(); out_name = nameArr[i].trim(); generateRow(); }
- 直接将Java转换的
out_id、out_name映射到目标表对应字段,运行会话即可自动生成所有拆分后的行,无需额外过滤。
内容的提问来源于stack exchange,提问作者bhagya
相关产品推荐
相关产品推荐

