1

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 ファイルを変更せずにこの問題を解決するにはどうすればよいでしょうか?

4

2 に答える 2

1

@LeonardoSibela が提案し、自己回答したように、問題は書式設定にあります。

理想的には、いくつかの JVM 固有の動作 (クラスのロードなど) を除いて、2 つのマシン間で大きな違いがないことが望ましいです。

では、何が違うのでしょうか?システムのロケール設定

たとえば、Linux サーバーが を認識しているロケールに設定されていて#,###.##も、データが を認識しているロケールのシステムにある#.###,##場合、(解決可能な) 問題が発生します。

あなた自身の回答で述べたように、データが提供される形式をプロセスに知らせる必要があります。

すなわち:

  • フォーマット:#.###,##
  • 10 進数:,
  • グループ化:.
于 2015-06-09T13:55:24.267 に答える