Informatica Normalizer遇‘Concatenation disallowed’报错及需求实现求助
解决Informatica中Normalizer映射的‘concatenation disallowed’报错并实现拆分需求
报错原因
‘concatenation disallowed’报错的核心原因是:你在映射过程中尝试将Normalizer重复组生成的多行字段与非重复组的单行字段进行不合法的关联拼接,或者存在数据类型不匹配的强制拼接操作。
完整解决方案(仅用Normalizer实现需求)
假设目标表student_report.csv结构为:tag(取值present/absent)、value(对应sid或smark的非空值)
1. 重构Normalizer转换配置
删除前置的exp_data转换,直接将源Student.csv连接到Normalizer:
- 创建重复组,设置重复组
Occurrences为2(对应sid和smark两个字段的拆分场景) - 在重复组内添加两个字段:
source_val(String类型):分别映射源的sid和smark字段record_tag(String类型):分别手动输入常量'present'(对应sid)和'absent'(对应smark)
- 注意:不要将源字段映射到Normalizer的非重复组区域,避免后续拼接冲突
2. 添加空值过滤
在Normalizer输出端添加Filter转换,设置过滤条件:
ISNOTNULL(source_val)
此步骤直接过滤掉sid和smark均为空的记录,仅保留非空字段对应的行。
3. 修正exp_tag转换的映射逻辑
删除之前导致报错的拼接逻辑,直接做字段映射:
- 将Normalizer输出的
record_tag映射到目标的tag字段 - 将Normalizer输出的
source_val映射到目标的value字段 - 确保所有映射字段的数据类型均为String,无跨类型强制转换
4. 验证逻辑覆盖
- sid非空、smark空:输出1行,
tag=present,value=sid值 - smark非空、sid空:输出1行,
tag=absent,value=smark值 - 两者均非空:输出2行,分别对应
present+sid、absent+smark - 两者均空:Filter过滤,无输出
关键避坑点
- 禁止在Normalizer中混合非重复组与重复组的字段映射,这是触发拼接报错的主要原因
- 全程保持字段数据类型一致(均为String),避免类型不匹配的隐性拼接问题
- 空值过滤逻辑必须放在Normalizer之后,确保仅处理有效数据
内容的提问来源于stack exchange,提问作者shayaaz
相关产品推荐
相关产品推荐

