Pentaho Data Integration (別名 Kettle) で変換を行います。最初に行うことは、「CSV 入力」を使用してフラット ファイルをマップすることです。
Windowsでこのステップで問題が発生したことはありませんが、スプーンが実行されるサーバーをLinuxサーバーに変更していて、解析(文字列を整数に変換)に問題があります。
要するに、変換が行うことは次のとおりです。
CSV 入力: CSVからすべてのフィールドをマップするために使用されます。ISO-8859-1 エンコーディングを使用しています。
行のフィルター処理:特定の行を取得するために使用されます。
Script Values/Mod:一部のフィールドの一部の値を変更するために使用されます。
さて、問題を引き起こすステップ:
値の選択/名前変更:表にデータを挿入できるように、ヘッダーの名前を表の列に変更するために使用します。各タブには何がありますか?
Select & Alter (タブ) ※空欄省略
Fieldname Rename to
Código codigo_cliente
メタデータ(タブ) ※空欄省略
Fieldname Rename to Type Binary to Normal Data Format Lenient? Lenient number conversion?
Código codigo_cliente Integer N N N
私が得るエラーは次のとおりです。
2015/06/03 09:49:10 - Select values.0 - ERROR (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : Unexpected error
2015/06/03 09:49:10 - Select values.0 - ERROR (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : org.pentaho.di.core.exception.KettleValueException:
2015/06/03 09:49:10 - Select values.0 - Unexpected conversion error while converting value [codigo_cliente String<binary-string>] to an Integer
2015/06/03 09:49:10 - Select values.0 -
2015/06/03 09:49:10 - Select values.0 - codigo_cliente String<binary-string> : couldn't convert String to Integer
2015/06/03 09:49:10 - Select values.0 -
2015/06/03 09:49:10 - Select values.0 - codigo_cliente String<binary-string> : couldn't convert String to number : non-numeric character found at position 7 for value [21.237,00]
2015/06/03 09:49:10 - Select values.0 -
2015/06/03 09:49:10 - Select values.0 -
2015/06/03 09:49:10 - Select values.0 -
2015/06/03 09:49:10 - Select values.0 - at org.pentaho.di.core.row.value.ValueMetaBase.getInteger(ValueMetaBase.java:1780)
2015/06/03 09:49:10 - Select values.0 - at org.pentaho.di.core.row.value.ValueMetaBase.convertData(ValueMetaBase.java:3537)
2015/06/03 09:49:10 - Select values.0 - at org.pentaho.di.trans.steps.selectvalues.SelectValues.metadataValues(SelectValues.java:326)
2015/06/03 09:49:10 - Select values.0 - at org.pentaho.di.trans.steps.selectvalues.SelectValues.processRow(SelectValues.java:375)
2015/06/03 09:49:10 - Select values.0 - at org.pentaho.di.trans.step.RunThread.run(RunThread.java:62)
2015/06/03 09:49:10 - Select values.0 - at java.lang.Thread.run(Thread.java:744)
2015/06/03 09:49:10 - Select values.0 - Caused by: org.pentaho.di.core.exception.KettleValueException:
2015/06/03 09:49:10 - Select values.0 - codigo_cliente String<binary-string> : couldn't convert String to Integer
2015/06/03 09:49:10 - Select values.0 -
2015/06/03 09:49:10 - Select values.0 - codigo_cliente String<binary-string> : couldn't convert String to number : non-numeric character found at position 7 for value [21.237,00]
2015/06/03 09:49:10 - Select values.0 -
2015/06/03 09:49:10 - Select values.0 -
2015/06/03 09:49:10 - Select values.0 - at org.pentaho.di.core.row.value.ValueMetaBase.convertStringToInteger(ValueMetaBase.java:1036)
2015/06/03 09:49:10 - Select values.0 - at org.pentaho.di.core.row.value.ValueMetaBase.getInteger(ValueMetaBase.java:1720)
2015/06/03 09:49:10 - Select values.0 - ... 5 more
2015/06/03 09:49:10 - Select values.0 - Caused by: org.pentaho.di.core.exception.KettleValueException:
2015/06/03 09:49:10 - Select values.0 - codigo_cliente String<binary-string> : couldn't convert String to number : non-numeric character found at position 7 for value [21.237,00]
2015/06/03 09:49:10 - Select values.0 -
2015/06/03 09:49:10 - Select values.0 - at org.pentaho.di.core.row.value.ValueMetaBase.convertStringToInteger(ValueMetaBase.java:1028)
2015/06/03 09:49:10 - Select values.0 - ... 6 more
このフィールドでは、CSV ファイルの小数点記号としてカンマを使用しているため、問題が発生します。
これは私のCSVファイルがどのように見えるかです:
私のCSVファイルのヘッダー:
Ano;Mês;Diretoria;Tipo;Tipo de macrorubrica;Macrorubrica;Conta contábil;Código;Cliente;OS;Descrição;Fornecedor;Documento;Tipo documento;Nota;Atividade;Tipo atividade;Descrição;UA;Valor;Orçado
その行の1つ:
2015;4;CERT;Custo Apropriado;CUSTO SERVIÇO PRESTADO;PESSOAL;14520 .201;87.979,00;SOF HAR;00077864;SQ 36525;FUNDACAO ABCD;1383;FP;;1048;.;.;2030;1.076,35;,00
見やすくするために、この行の "Código" という名前の列 (後で [値の選択] ステップで "codigo_cliente" になります) の値は87.979,00 です。
CSV ファイルを変更せずにこの問題を解決するにはどうすればよいでしょうか?