Pentaho读取数据时如何转义值内的双引号"
PDI 8.3 处理含内部双引号CSV的解决方法
针对你遇到的Text File Input组件拆分含内部双引号字段错误的问题,提供以下几种可行方案:
方案一:修正源文件的CSV格式(优先选择,符合标准)
按照CSV规范,字段内的双引号需要用两个连续双引号转义。将源文件中类似"ef"A"gh"的内容修改为"ef""A""gh",然后保持Text File Input组件的设置:
- Content选项卡:分隔符设为
,,包裹符设为",转义符设为"
此时组件就能正确识别整个字段内容。
方案二:在PDI内添加预处理逻辑(无法修改源文件时)
步骤1:读取原始拆分内容
暂时取消Text File Input的包裹符设置,仅以逗号为分隔符读取所有行,此时会得到拆分错误的字段(比如第三列是"ef",后续列是A"、gh"等)。
步骤2:合并并修正字段
使用Replace in String或User Defined Java Expression组件处理:
- 用Replace in String组件:针对拆分后的相关字段,先合并内容,再将内部单个双引号替换为两个双引号,最后重新添加包裹符。
- 用Java表达式(以第三列相关内容为例):
可根据实际拆分情况调整逻辑,确保把原本属于同一字段的内容合并,并修正双引号格式。// 假设拆分后第三列是col3,第四列是col4,第五列是col5,合并后处理 "\"" + col3.replace("\"", "") + col4 + col5.replace("\"", "") + "\""
方案三:使用第三方CSV读取插件
如果PDI允许安装插件,可以尝试使用第三方CSV Reader组件(如Kettle的CSV Parser插件),这类插件通常对非标准CSV的兼容性更好,能自动识别字段内的单个双引号,无需额外修改格式或逻辑。
内容的提问来源于stack exchange,提问作者Pawan Singh
相关产品推荐
相关产品推荐

