Pentaho - CSV 输入 - 传入字段 trim 类型 - 意外行为

Pentaho - CSV Input - Incoming field trim type - unexpected behaviour

在 Pentaho (V7) 中使用 CSV 输入实用程序时,我们使用 trim 类型来实现以下。但它并没有像预期的那样工作。

这是测试数据和预期输出与实际输出

|Incoming Data                      |Expected Output        |Actual Output          |
|<space>abc<space>                  |abc                    |abc                    |
|abc<space>                         |abc                    |abc                    |
|<space>abc                         |abc                    |abc                    |
|"<space>abc<space>"                |<space>abc<space>      |abc                    |
|"<space>abc<space>"<space>         |<space>abc<space>      |abc                    |
|<space>"<space>abc<space>"         |<space>abc<space>      |"<space>abc            |
|<space>"<space>abc<space>"<space>  |<space>abc<space>      |"<space>abc            |
|"abc"<space>                       |abc                    |abc                    |
|<space>"abc"                       |abc                    |"abc                   |
|<space>"abc"<space>                |abc                    |"abc                   |

有人可以指导我吗?

CSV 输入似乎无法正确处理格式错误的 CSV 数据(惊喜!)。在定界符和封闭字符之间有额外的空格显然不适合这个步骤。 trim 函数在外壳内部查找 trim 个空间,而不是外部。

我已经测试了文本文件输入步骤,正如marabu所说,这应该是CSV文件的默认选择。不幸的是,它给出了与问题中相同的不良结果。

解决方法是在CSV输入步骤中把enclosure定义框的双引号(红圈)去掉。然后该步骤将在字符串外正确 trim 空格,引号与否。然后,您通过 "Replace in String" 步骤将数据替换为空(红色下划线)。

如果没有技术原因需要使用 CSV-Input,请改用 Text-File-Input。 TFI 可以更好地处理 CSV 输入。不过,如果可能,您应该与 CSV 制作者讨论数据质量问题。

更新:TFI 6.1.0.1-196 预览输出

还不错,当我们接受 Kettle 中的修剪总是对字段值进行时,即您无法像测试用例 4 和 5 中预期的那样保护前导或尾随空格不被修剪。