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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Embulk

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

BigQuery

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

Oracle Database

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

Java

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

SQL

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

Q&A

解決済

1回答

495閲覧

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

raccoondog

総合スコア77

Embulk

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

BigQuery

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

Oracle Database

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

Java

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

SQL

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

0グッド

0クリップ

投稿2018/11/21 06:29

編集2018/11/26 00:58

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

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

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

投稿2018/11/21 07:43

ronin

総合スコア89

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raccoondog

2018/11/21 08:10

ご回答有難うございます。 embulkの定義:- {name: PS_YAZAKI_HINBAN, type: long} oracleの定義:varchar2(40) となっていまして、同じstringになります スキップされたレコード内の該当列の値は、7273243550M
ronin

2018/11/21 08:13

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

2018/11/21 08:59

有難うございます。 定義ファイルのカラム属性を見直し、再実行させて頂きます。 embulkでcsvファイルの解析(embulk guess ./seed.yml -o config.yml)をしたときに、oracle側の定義と異なってしまうのは、embulkの仕様なんでしょうか。
raccoondog

2018/11/21 09: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."}]
ronin

2018/11/21 09:27

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

2018/11/21 10:09

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

2018/11/26 00:55

ご回答有難うございます。 csvファイルのデータ型と、embulk側のデータ型を一致させたのですが まだバルクインサート失敗します。 エラー内容を質問項目に記載させて頂きます。
raccoondog

2018/11/26 05:04

一旦、BigQueryにあるテーブルを削除して、再度テーブル作成とバルクインサート処理を実施すると成功しました。 初回にバルクインサートした際には成功し、2回目以降にバルクインサートした際失敗しました。 初回(2万レコード)と2回目以降(16万レコード)でcsvファイルのレコード数は違ったのですが、カラム定義は同じです。 embulkでconfigファイルを作成したときに、初回と2回目以降でカラム定義が何故か?異なっていたようです。
ronin

2018/11/26 08:06

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

2018/11/26 08:34

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問