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

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

ただいまの
回答率

90.40%

  • Java

    16443questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • SQL

    3144questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • Oracle Database

    152questions

    Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

  • BigQuery

    110questions

    BigQueryは、Google Cloud Platformが提供しているビッグデータ解析サービス。数TB(テラバイト)またはPB(ペタバイト)の膨大なデータに対し、SQL風のクエリを実行し、高速で集計・分析を行うサービスです。

  • Embulk

    39questions

    Embulkは、CSVデータやアクセスログなどの構造化データを高い信頼性で転送することができる、プラグインベースのバルクデータローダーです。

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

解決済

回答 1

投稿 編集

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

raccoondog

score 13

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/21 17:10

    ご回答有難うございます。

    embulkの定義:- {name: PS_YAZAKI_HINBAN, type: long}
    oracleの定義:varchar2(40)

    となっていまして、同じstringになります

    スキップされたレコード内の該当列の値は、7273243550M

    キャンセル

  • 2018/11/21 17:13

    embulkの定義はlong型なので数値型ですよね。そこをstringにしてあげれば良いのではないでしょうか。

    キャンセル

  • 2018/11/21 17:59

    有難うございます。
    定義ファイルのカラム属性を見直し、再実行させて頂きます。

    embulkでcsvファイルの解析(embulk guess ./seed.yml -o config.yml)をしたときに、oracle側の定義と異なってしまうのは、embulkの仕様なんでしょうか。

    キャンセル

  • 2018/11/21 18:10

    無効なレコードについてのエラーは解消されました。
    次に、以下のエラーが出力されました。

    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."}]

    キャンセル

  • 2018/11/21 18:27

    内容からするとembulkのデータ定義とoracleのテーブル定義が(データ型)が適当でない為、エラーとなっていると読めます。
    embulkの自動解析がどの程度の精度であるのか、私にはわからないのですが、エラーにつどつど対応するのではなく、一度目視で突合せ確認をした方がいいと思いますよ。
    検証目的であればなおさら検証方法が正確である事を保障する必要もありますしね。

    今のメッセージだけ見ると、

    キャンセル

  • 2018/11/21 19:09

    あれ、なんか途切れてますけど、まぁ気にしないでください。

    キャンセル

  • 2018/11/26 09:55

    ご回答有難うございます。

    csvファイルのデータ型と、embulk側のデータ型を一致させたのですが
    まだバルクインサート失敗します。

    エラー内容を質問項目に記載させて頂きます。

    キャンセル

  • 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で質問しよう!

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

同じタグがついた質問を見る

  • Java

    16443questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • SQL

    3144questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • Oracle Database

    152questions

    Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

  • BigQuery

    110questions

    BigQueryは、Google Cloud Platformが提供しているビッグデータ解析サービス。数TB(テラバイト)またはPB(ペタバイト)の膨大なデータに対し、SQL風のクエリを実行し、高速で集計・分析を行うサービスです。

  • Embulk

    39questions

    Embulkは、CSVデータやアクセスログなどの構造化データを高い信頼性で転送することができる、プラグインベースのバルクデータローダーです。