IBM DataStage Sequential File 如何处理引号内的分隔符?
结论
先检查 Sequential File stage 实际使用的文件格式,确认列分隔符为 |,引用字符为双引号 "。只有解析器正确识别字段两侧的引用字符,才能将 John|Smith 中的 | 保留为字段内容。
RCP(Runtime Column Propagation)用于传播列元数据,不能代替文件解析时的分隔符和引用字符设置。由于没有提供作业配置、schema 和完整报错,引用字符未生效只是优先排查方向,还无法确定唯一原因。
为什么会出现列数不匹配
问题中的记录是:
101|"John|Smith"|25|Chennai
按照预期的分隔符和引用规则,这条记录应解析为四列:
| 列位置 | 值 |
|---|---|
| 1 | 101 |
| 2 | `John |
| 3 | 25 |
| 4 | Chennai |
如果引用字符没有被识别,解析器就可能把这一行中的每个 | 都当成列边界,得到五个字段,与预期列数不一致。
双引号用于界定字段边界,不属于第二列的业务值。原问题没有附上完整日志,还需要确认报错发生在作业校验阶段,还是实际读取记录的阶段。
配置和检查步骤
-
在 Sequential File stage 的文件格式配置中,确认列分隔符为单个字符
|,引用字符为双引号",且没有设置为不使用引用字符。具体属性名称和位置以所用 DataStage 版本为准。 -
如果某些列单独配置了格式属性,核对这些属性是否覆盖了预期的记录格式,尤其要检查包含
John|Smith的字段。 -
确认字段两侧是普通双引号
",而不是中文引号“、”。同时检查是否存在未闭合的引号、字段内的额外引号或多余的分隔符。外观相似的字符在解析时可能有不同的含义。 -
检查 RCP 使用的元数据。如果作业通过外部 schema 文件提供列定义,核对 schema 中的列顺序、类型和格式属性是否与实际文件一致。启用 RCP 并不意味着 DataStage 能自动推断任意文件的引用规则。
用最小样例定位问题
可以先用只包含下面一行的测试文件验证读取配置:
101|"John|Smith"|25|Chennai
在测试作业中明确声明四列,必要时先使用字符类型,减少类型转换对排查的干扰。运行后检查是否得到四列,并确认第二列完整保留为 John|Smith。
- 如果仍然得到五个字段,继续检查引用字符、格式覆盖以及文件中的实际字符。
- 如果四列能够正确读取,再与原作业的 RCP、schema 和列级格式逐项比较。
- 如果样例成功而完整文件失败,检查失败记录是否具有不同的引号、换行或字段数量。
不要直接删除字段内部的 |,否则会改变原始数据。缺少统一转义规则时,也不要简单替换引号或分隔符;应先让读取配置与源文件格式保持一致。
备注:内容仅供参考。
