AbInitio如何读取字段含分隔符且被双引号包裹的分隔文件
问题根因
你当前使用的DML未指定字段的引号包裹规则,解析器会把所有|都识别为字段分隔符,不会区分是在双引号内部还是外部,所以字段内的|会触发错误拆分。
正确解决方案
分两种适配场景:
方案1:字段级指定引号规则(无需修改组件配置)
直接修改DML,给每个字段指定quoted by '"'属性,让解析器自动忽略双引号内部的分隔符,同时自动剥离字段外层的双引号:
record string delimited by "|" quoted by '"' trim both nullable col1, string delimited by "|" quoted by '"' trim both nullable col2, string delimited by "|" quoted by '"' trim both nullable col3, string delimited by "\n" quoted by '"' trim both nullable col4 end
说明:
- 最后一个字段的分隔符指定为
\n(换行符),匹配行尾结束逻辑 trim both参数可以自动处理示例中|前后的多余空格,不需要额外做字段清洗nullable参数会把最后一个字段的空双引号自动识别为null值,符合预期要求
方案2:全局配置引号规则(DML更简洁)
如果你使用的是Ab Initio等支持全局格式配置的ETL工具,可以在读取组件的格式配置项中,全局指定「Quote Character」为双引号",此时原来的DML只需要调整最后一个字段的分隔符即可正常运行:
record string("|") col1, string("|") col2, string("|") col3, string("\n") col4 end
这个方案不需要修改每个字段的定义,适合字段数量多的场景。
验证效果
用你提供的示例数据测试上述配置,最终解析结果和预期完全一致:
- col1:
units of the price | currency used - col2:
ABC - col3:
20210831 - col4:
null
内容的提问来源于stack exchange,提问作者akansha pandey
相关产品推荐
相关产品推荐

