質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.09%

csvファイルをOracleDBへインサート時にjavaエラー発生

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 660

raccoondog

score 23

csvファイルのデータをOracleDBへバルクインサートを試みると失敗します。
csvファイルは16万行、81列のファイルになります。

環境:windows7 , oracle 12c , embulk 0.9.8

※検証用の業務データのため、エラー内容から出力されたデータ項目は除いています。

embulk定義ファイル

インプット
in:
  type: file
  path_prefix: 'C:\Users\xxx\Desktop\embulk\xxxx.csv'
  parser:
    type: csv
    delimiter: ','
    skip_header_line: false
    stop_on_invalid_record: true
out:
    type: oracle
    host: xxxx
    port: xxx
    database: xxx
    user: xxx
    password: xxx
    table: xxx
    mode: insert
    insert_method: normal
    driver_path: 'C:\Users\xxx\Desktop\embulkDB\product\12.2.0\dbhome_1\jdbc\lib\ojdbc8.jar'

アウトプット
in:
  type: file
  path_prefix: C:\Users\xxx\Desktop\embulk\xxxx.csv
  parser:
    type: csv
    delimiter: ','
    skip_header_line: false
    stop_on_invalid_record: true
    charset: UTF-8
    newline: CRLF
    quote: '"'
    escape: '"'
    trim_if_not_quoted: false
    skip_header_lines: 1
    allow_extra_columns: false
    allow_optional_columns: false
    columns:
    - {name: ORDER_NO, type: long}
    - {name: RS_TYPE, type: long}
    - {name: FACTORY_CODE, type: long}
    - {name: ORG_CODE, type: string}
    - {name: TRAN_DATE, type: timestamp, format: '%Y/%m/%d'}
    - {name: HINBAN, type: string}
    - {name: QTY, type: long}
    - {name: SLIP_NO, type: string}
    - {name: ITEM_NO, type: string}
    - {name: DIVISION_NO, type: long}
    - {name: FROM_FACTORY_CODE, type: long}
    - {name: FROM_ORG_CODE, type: string}
    - {name: FROM_SUBINV_CODE, type: string}
    - {name: FROM_VALUE_CODE, type: string}
    - {name: FROM_OPERATOR_NAME, type: string}
    - {name: TO_FACTORY_CODE, type: string}
    - {name: TO_ORG_CODE, type: string}
    - {name: TO_SUBINV_CODE, type: long}
    - {name: TO_VALUE_CODE, type: long}
    - {name: TO_OPERATOR_NAME, type: string}
    - {name: SUB_SYSTEM_TYPE1, type: string}
    - {name: CANCEL_FLAG, type: long}
    - {name: ACT_CREATION_DATE, type: timestamp, format: '%Y/%m/%d %H:%M:%S'}
    - {name: WH_ACT_CREATION_DATE, type: timestamp, format: '%Y/%m/%d %H:%M:%S'}
    - {name: JOB_CODE, type: string}
    - {name: UNIT_PRICE, type: string}
    - {name: ERROR_STATUS, type: long}
    - {name: DESCRIPTION, type: string}
    - {name: LOCATION, type: string}
    - {name: REVISION_NO, type: string}
    - {name: OPE_CODE, type: string}
    - {name: BOX_KIND, type: string}
    - {name: DEMAND_NO, type: string}
    - {name: SUB_NO, type: string}
    - {name: TRAFFIC_NO, type: string}
    - {name: IF_FLAG, type: long}
    - {name: SELL_BUY_DATA_FLAG, type: long}
    - {name: SOURCE_ORDER_NO, type: long}
    - {name: FT_DEFINE_ID, type: long}
    - {name: FROM_SELL_BUY_ID, type: string}
    - {name: TO_SELL_BUY_ID, type: string}
    - {name: CREATION_DATE, type: timestamp, format: '%Y/%m/%d %H:%M:%S'}
    - {name: CREATED_BY, type: string}
    - {name: LAST_UPDATE_DATE, type: timestamp, format: '%Y/%m/%d %H:%M:%S'}
    - {name: LAST_UPDATED_BY, type: string}
    - {name: UPDATE_REQUEST_ID, type: long}
    - {name: TIME_STAMP, type: timestamp, format: '%Y/%m/%d %H:%M:%S'}
    - {name: INV_UPDATE_FLAG, type: long}
    - {name: ISSUE_SEQ, type: string}
    - {name: SOUMEI_ID, type: long}
    - {name: GCPCS_IF_FLAG, type: string}
    - {name: GCPCS_IF_CREATION_DATE, type: string}
    - {name: RECIEPT_CODE, type: string}
    - {name: DELIV_BIN_NO, type: string}
    - {name: DELIV_NO, type: string}
    - {name: RECV_BIN_NO, type: string}
    - {name: SUB_SYSTEM_TYPE2, type: string}
    - {name: SHIP_DATE, type: timestamp, format: '%Y/%m/%d'}
    - {name: C_NO, type: long}
    - {name: T_NO, type: long}
    - {name: RECV_OFFICE_CODE, type: long}
    - {name: SR_IF_FLAG, type: long}
    - {name: SR_IF_CREATION_DATE, type: timestamp, format: '%Y/%m/%d %H:%M:%S'}
    - {name: PS_IF_FLAG, type: long}
    - {name: PS_IF_CREATION_DATE, type: timestamp, format: '%Y/%m/%d %H:%M:%S'}
    - {name: CUSTOMER_CODE, type: long}
    - {name: KS_TYPE, type: string}
    - {name: SUPPLY_SECTION, type: string}
    - {name: MANAGE_NO, type: string}
    - {name: SEND_OFFICE_CODE, type: long}
    - {name: SOUMEI_SLIP_NO, type: long}
    - {name: SOUMEI_ITEM_NO, type: string}
    - {name: PS_YAZAKI_HINBAN, type: long}
    - {name: INVOICE_CASE_INFO_NO, type: string}
    - {name: GYK_SITE_CODE, type: string}
    - {name: CASE_NO, type: string}
    - {name: CASE_SUB_NO, type: string}
    - {name: FROM_LOCATION, type: string}
    - {name: TO_LOCATION, type: string}
    - {name: GYK_TRAN_TYPE, type: string}
    - {name: INV_INFO_UPDATE_FLAG, type: string}
out: {type: oracle, host: xxxx, port: xxx, database: xxx, user: xxx, password: xxx,
  table: xxxx, mode: insert, insert_method: normal, driver_path: 'C:\Users\xxx\Desktop\embulkDB\product\12.2.0\dbhome_1\jdbc\lib\ojdbc8.jar'}

※2018/11/26 現在のエラー

org.embulk.exec.PartialExecutionException: org.jruby.exceptions.RaiseException: (Error) failed during waiting a Copy job, get_job(fluid-emissary-216806, embulk_copy_job_f19fafe0-795f-4b9d-a49d-35269a460a2f), errors:[{:reason=>"invalid", :message=>"Provided Schema does not match Table fluid-emissary-216806:embulk_test.T_RS_TRAN. Field ORDER_NO has changed type from FLOAT to INTEGER."}]
at org.embulk.exec.BulkLoader$LoaderState.buildPartialExecuteException(BulkLoader.java:339)
at org.embulk.exec.BulkLoader.doRun(BulkLoader.java:565)
at org.embulk.exec.BulkLoader.access$000(BulkLoader.java:34)
at org.embulk.exec.BulkLoader$1.run(BulkLoader.java:352)
at org.embulk.exec.BulkLoader$1.run(BulkLoader.java:349)
at org.embulk.spi.Exec.doWith(Exec.java:22)
at org.embulk.exec.BulkLoader.run(BulkLoader.java:349)
at org.embulk.EmbulkEmbed.run(EmbulkEmbed.java:161)
at org.embulk.EmbulkRunner.runInternal(EmbulkRunner.java:292)
at org.embulk.EmbulkRunner.run(EmbulkRunner.java:156)
at org.embulk.cli.EmbulkRun.runSubcommand(EmbulkRun.java:436)
at org.embulk.cli.EmbulkRun.run(EmbulkRun.java:91)
at org.embulk.cli.Main.main(Main.java:26)
Caused by: org.jruby.exceptions.RaiseException: (Error) failed during waiting a Copy job, get_job(fluid-emissary-216806, embulk_copy_job_f19fafe0-795f-4b9d-a49d-35269a460a2f), errors:[{:reason=>"invalid", :message=>"Provided Schema does not match Table fluid-emissary-216806:embulk_test.T_RS_TRAN. Field ORDER_NO has changed type from FLOAT to INTEGER."}]
at RUBY.wait_load(C:/Users/yazaki/.embulk/lib/gems/gems/embulk-output-bigquery-0.4.9/lib/embulk/output/bigquery/bigquery_client.rb:346)
at RUBY.block in copy(C:/Users/yazaki/.embulk/lib/gems/gems/embulk-output-bigquery-0.4.9/lib/embulk/output/bigquery/bigquery_client.rb:289)
at RUBY.with_job_retry(C:/Users/yazaki/.embulk/lib/gems/gems/embulk-output-bigquery-0.4.9/lib/embulk/output/bigquery/bigquery_client.rb:58)
at RUBY.copy(C:/Users/yazaki/.embulk/lib/gems/gems/embulk-output-bigquery-0.4.9/lib/embulk/output/bigquery/bigquery_client.rb:249)
at RUBY.transaction(C:/Users/yazaki/.embulk/lib/gems/gems/embulk-output-bigquery-0.4.9/lib/embulk/output/bigquery.rb:407)
at RUBY.transaction(uri:classloader:/gems/embulk-0.9.8-java/lib/embulk/output_plugin.rb:64)

Error: org.jruby.exceptions.RaiseException: (Error) failed during waiting a Copy job, get_job(fluid-emissary-216806, embulk_copy_job_f19fafe0-795f-4b9d-a49d-35269a460a2f), errors:[{:reason=>"invalid", :message=>"Provided Schema does not match Table fluid-emissary-216806:embulk_test.T_RS_TRAN. FieldORDER_NO has changed type from FLOAT to INTEGER."}]
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

csvファイルの中にテーブル定義と合わない無効なレコードがあると言われています。ファイルの185行目ですね。

NumberformatExceptionが出ているので、本来数値が入る箇所に文字列が入っている、という事はないでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/26 14:04

    一旦、BigQueryにあるテーブルを削除して、再度テーブル作成とバルクインサート処理を実施すると成功しました。

    初回にバルクインサートした際には成功し、2回目以降にバルクインサートした際失敗しました。

    初回(2万レコード)と2回目以降(16万レコード)でcsvファイルのレコード数は違ったのですが、カラム定義は同じです。

    embulkでconfigファイルを作成したときに、初回と2回目以降でカラム定義が何故か?異なっていたようです。

    キャンセル

  • 2018/11/26 17:06

    テーブルのカラム等も合わせる必要がありそうですが、そこは問題ないですか?
    テーブルスキーマがfluid-emissary-216806:embulk_test.T_RS_TRANと一致しないといわれていますが。
    あとは、floatからintegerに変換しているのが気になりますね、embulkでは小数点が含まれる型はdoubleじゃないですかね?

    キャンセル

  • 2018/11/26 17:34

    embulk定義とテーブル定義を見直して成功致しました。
    ご協力有難うございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.09%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる