You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Informatica中如何将逗号分隔的字段值拆分为多行数据

Informatica实现逗号分隔字段拆分为多行的实现方案

需求说明:源表含SID、CID两列,CID为逗号分隔的多值字符串,需要将每个CID值单独拆分为一行输出到目标表。

常规实现方案(无需自定义代码,适配所有PowerCenter版本)

  • 第一步:先统计源数据中CID字段的最大分隔值数量,示例数据中最多为3个,你可根据实际业务数据调整数量,比如最大有N个分隔值就设置N个拆分端口。
  • 第二步:新增Expression转换组件,新增对应数量的拆分端口,用正则表达式拆分CID:
    示例中3个端口的表达式分别为:
    REG_EXTRACT(CID, '([^,]+),*([^,]*),*([^,]*)', 1)
    REG_EXTRACT(CID, '([^,]+),*([^,]*),*([^,]*)', 2)
    REG_EXTRACT(CID, '([^,]+),*([^,]*),*([^,]*)', 3)
    也可以用INSTR加SUBSTR组合实现拆分,效果一致。
  • 第三步:新增Normalizer转换组件,将上一步拆分的多个CID端口作为输入,设置Normalizer的CID字段出现次数为对应拆分数量,生成统一的输出CID字段,转换会自动关联对应SID。
  • 第四步:新增Filter转换组件,过滤空的CID值,过滤条件为NOT ISNULL(out_CID) AND LENGTH(TRIM(out_CID)) > 0,排除无效空行。
  • 第五步:将Filter输出的SID和处理后的CID映射到目标表TGT的对应字段即可。

灵活实现方案(适配10.x及以上版本,无需提前统计最大分隔数)

使用Java转换组件实现动态拆分,在On Input Row逻辑块中添加如下代码:

String[] cidList = CID.split(",");
for (String cidItem : cidList) {
    if (cidItem != null && cidItem.trim().length() > 0) {
        out_SID = SID;
        out_CID = cidItem.trim();
        generateRow();
    }
}

该方案可自动适配任意数量的逗号分隔值,不用提前调整端口数量,适合数据波动大的场景。

内容的提问来源于stack exchange,提问作者bhagya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:24:05