Spoon Kettle неправильно управляет значениями NULL - PullRequest
0 голосов
/ 25 апреля 2018

Я использую 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, который является числом, но может быть пустым.

enter image description here

Есть ли способ преодоления этой проблемы?Это кажется довольно простой операцией, но я не вижу никакой опции, которую можно было бы включить, чтобы исправить это поведение.

1 Ответ

0 голосов
/ 25 апреля 2018

Снимите отметку с преобразования Lasy.

Если проблема не исчезнет, ​​в CSV не будет стандарта для нулей, и вполне может быть, что в вашем случае он использует «ноль» (строку).

Если это на один раз, откройте CSV-файл в редакторе и выполните глобальный поиск и замените «null» на «».

Если вам нужно автоматизировать или иметь много CSV-файлов, прочитайте всеполе в виде строки;затем используйте шаг Null if..., чтобы преобразовать «ноль» в NULL;затем измените тип данных с шагом Select value на вкладке Metadata.

...