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 中预期的那样保护前导或尾随空格不被修剪。
在 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 中预期的那样保护前导或尾随空格不被修剪。