Spoon Kettle 无法正确管理 NULL 值

Posted

技术标签:

【中文标题】Spoon Kettle 无法正确管理 NULL 值【英文标题】:Spoon Kettle doesn't manage NULL values correctly 【发布时间】:2018-04-25 12:36:54 【问题描述】:

我正在使用 Spoon Kettle PDI 将数据从 csv 文件插入 MariaDb 数据库。

我正在做一些非常简单的事情,但显然,当 csv 中有一个 NULL 值时,PDI 将其解释为一个字符串,这会在最终查询中产生问题:

018/04/25 14:31:23 - Workstation.0 - ERROR (version 7.1.0.0-12, build 1 from 2017-05-16 17.18.02 by buildguy) : Because of an error, this step can't continue:
2018/04/25 14:31:23 - Workstation.0 - ERROR (version 7.1.0.0-12, build 1 from 2017-05-16 17.18.02 by buildguy) : org.pentaho.di.core.exception.KettleValueException: 
2018/04/25 14:31:23 - Workstation.0 - Unexpected conversion error while converting value [checkPoint_id String] to an Integer
2018/04/25 14:31:23 - Workstation.0 - 
2018/04/25 14:31:23 - Workstation.0 - checkPoint_id String : couldn't convert String to Integer
2018/04/25 14:31:23 - Workstation.0 - 
2018/04/25 14:31:23 - Workstation.0 - checkPoint_id String : couldn't convert String to number : non-numeric character found at position 1 for value [NULL]
2018/04/25 14:31:23 - Workstation.0 - 
2018/04/25 14:31:23 - Workstation.0 - 
2018/04/25 14:31:23 - Workstation.0 - 
2018/04/25 14:31:23 - Workstation.0 -   at org.pentaho.di.core.row.value.ValueMetaBase.getInteger(ValueMetaBase.java:2081)
2018/04/25 14:31:23 - Workstation.0 -   at org.pentaho.di.core.row.value.ValueMetaBase.convertData(ValueMetaBase.java:3785)
2018/04/25 14:31:23 - Workstation.0 -   at org.pentaho.di.core.row.value.ValueMetaBase.convertBinaryStringToNativeType(ValueMetaBase.java:1579)
2018/04/25 14:31:23 - Workstation.0 -   at org.pentaho.di.core.row.value.ValueMetaBase.getString(ValueMetaBase.java:1799)
2018/04/25 14:31:23 - Workstation.0 -   at org.pentaho.di.core.row.RowMeta.getString(RowMeta.java:319)
2018/04/25 14:31:23 - Workstation.0 -   at org.pentaho.di.core.row.RowMeta.getString(RowMeta.java:828)
2018/04/25 14:31:23 - Workstation.0 -   at org.pentaho.di.trans.steps.tableoutput.TableOutput.writeToTable(TableOutput.java:385)
2018/04/25 14:31:23 - Workstation.0 -   at org.pentaho.di.trans.steps.tableoutput.TableOutput.processRow(TableOutput.java:125)
2018/04/25 14:31:23 - Workstation.0 -   at org.pentaho.di.trans.step.RunThread.run(RunThread.java:62)
2018/04/25 14:31:23 - Workstation.0 -   at java.lang.Thread.run(Thread.java:748)
2018/04/25 14:31:23 - Workstation.0 - Caused by: org.pentaho.di.core.exception.KettleValueException: 
2018/04/25 14:31:23 - Workstation.0 - checkPoint_id String : couldn't convert String to Integer
2018/04/25 14:31:23 - Workstation.0 - 
2018/04/25 14:31:23 - Workstation.0 - checkPoint_id String : couldn't convert String to number : non-numeric character found at position 1 for value [NULL]
2018/04/25 14:31:23 - Workstation.0 - 
2018/04/25 14:31:23 - Workstation.0 - 
2018/04/25 14:31:23 - Workstation.0 -   at org.pentaho.di.core.row.value.ValueMetaBase.convertStringToInteger(ValueMetaBase.java:1323)
2018/04/25 14:31:23 - Workstation.0 -   at org.pentaho.di.core.row.value.ValueMetaBase.getInteger(ValueMetaBase.java:2019)
2018/04/25 14:31:23 - Workstation.0 -   ... 9 more
2018/04/25 14:31:23 - Workstation.0 - Caused by: org.pentaho.di.core.exception.KettleValueException: 
2018/04/25 14:31:23 - Workstation.0 - checkPoint_id String : couldn't convert String to number : non-numeric character found at position 1 for value [NULL]
2018/04/25 14:31:23 - Workstation.0 - 
2018/04/25 14:31:23 - Workstation.0 -   at org.pentaho.di.core.row.value.ValueMetaBase.convertStringToInteger(ValueMetaBase.java:1317)
2018/04/25 14:31:23 - Workstation.0 -   ... 10 more

在图像中,您可以看到从 csv 导入。我必须指定每列的类型。该异常与列 checkPoint_id 有关,该列是一个数字,但可以为空。

有没有办法解决这个问题?这似乎是一个非常基本的操作,但我没有看到可以打开任何选项来修复此行为。

【问题讨论】:

【参考方案1】:

取消选中 Lasy 转换。

如果问题仍然存在,则 CSV 中的空值没有标准,在您的情况下,它很可能使用“null”(字符串)。

如果是一次性的,请在编辑器中打开 CSV 文件并进行全局搜索并将“null”替换为“”。

如果您必须自动化或拥有大量 CSV 文件,请将所有字段读取为字符串;然后使用Null if... 步骤将“null”转换为NULL;然后在Metadata 选项卡上使用Select value 步骤更改数据类型。

【讨论】:

感谢您的回复。诀窍是用“”替换 NULL 值。也可以使用惰性转换。就我而言,这是一次性的,所以我使用了更简单的方法;-) Kettle 经常出现这种情况。如果您开始花时间做某事,那么您可能选择了错误的解决方案。有关您的信息,请查看:forums.pentaho.com/threads/…

以上是关于Spoon Kettle 无法正确管理 NULL 值的主要内容,如果未能解决你的问题,请参考以下文章

jdk环境变量配置好后打开kettle下的Spoon.bat,出现下列问题。

数据库数据格式化之Kettle Spoon

Kettle-Spoon入门示例

kettle spoon多张表怎么合并到一张表中

kettle的spoon的取json的怎么遍历array数组

在 Kettle/Spoon/Pentaho 中循环