Informatica含CRLF字段数据加载异常,求解决方案
解决Informatica加载含内嵌CRLF字段的文件拆分问题
核心问题原因
你的文件中attr_value字段包含CRLF(Windows换行符),但Informatica源配置的行分隔符是\n,导致字段内的换行被误判为记录分隔符,单条记录被拆分成多条。
可行解决方案
方案1:给含内嵌换行的字段添加文本限定符
这是处理带内嵌换行的平面文件最通用的方法:
- 用Windows脚本(如PowerShell)预处理文件,将每个记录的
attr_value字段用双引号包裹,处理后文件内容如下:
attr_value¬id¬wf_id¬date "select 'x';select a.id ,b.id from test union all select 'y',select z.id ,c.id from test1"¬123¬567¬2024-02-05 00:12:10 "select 'j';select k.id ,l.id from test union all select 'm',select r.id ,u.id from test1"¬45¬67¬2024-02-05 00:13:10
- 在Informatica源定义中,设置文本限定符为双引号,行分隔符保持默认(Windows环境下为
\r\n)。此时Informatica会自动识别引号内的换行属于字段内容,不会作为记录分隔符。
方案2:修改Informatica源的行分隔符配置
如果你的记录有固定的结束标识(比如每条记录最后是格式固定的date字段+CRLF),可以尝试自定义行分隔符:
- 在Informatica平面文件源的属性中,将行分隔符设置为正则表达式模式,比如匹配日期结尾的CRLF:
\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\r\n - 注意:部分Informatica版本(如PowerCenter)支持正则作为行分隔符,需提前测试兼容性。
方案3:修正REPLACESTR函数并合并拆分记录(兜底方案)
如果无法预处理文件或修改源配置,可通过Informatica转换合并拆分的记录:
- 先给每条拆分的行添加递增行号(用序列生成器转换),同时保留
id等唯一标识字段。 - 使用聚合器转换,按
id分组,用字符串拼接函数合并所有拆分的attr_value片段,比如:
(若WM_CONCAT不可用,可改用WM_CONCAT(attr_value, CHR(10))MAX(attr_value) || CHR(10) || NEXT(attr_value)的方式,需确保行号排序正确) - 修正REPLACESTR函数的使用(原函数参数错误):若需替换CRLF为其他字符,正确语法为:
(第一个参数1表示区分大小写,第二个是输入字段,第三个是要替换的CRLF,第四个是替换后的字符)REPLACESTR(1, attr_value, CHR(13)||CHR(10), ' ')
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

