2016-10-20 9 views
1

私の要件は、エクスターナルファイル(160KB以上のデータと約150カラム)をファイルサーバーに置いてoracle DBテーブルにロードすることです。これは、しかし制約のカップルを持っている -大規模なエクセルをOracle DBにロードするためのETL

  1. 2列の位置はエクセル上で異なる場合があります[「のEmpID」&「AcctNum」を言うことができます] - 回「のEmpID」で列「A」で発生する可能性がありますように他の時には列 'E'で起こることもある。従って、データマッピングは動的でなければならない。

  2. ファイルは1日中いつでも使用でき、ファイルサーバーでの作成から1時間以内に処理する必要があり、複数のファイルが1日に送信される可能性があります。したがって、私はoracleでバッチを作成する必要があります。[SQLサーバージョブを介してdtsxを実行する]

OSバッチが実行されるOSはUnixです。

  1. パフォーマンスはここで重要な課題であるため、パフォーマンスを向上させるための基準としてご利用ください。

おかげ&に関して、 アルカ

+0

まず、Excelファイルを各行に適切な値を持つCSV形式に正規化する必要があります。次に、データベースに一括挿入するためにこの手順を実行します。http://stackoverflow.com/質問/ 22241428/oracle-bulk-import – Hackerman

+0

[Apache POI](http://poi.apache.org/spreadsheet/)を使用してExcelファイルを処理し、次にビジネスロジックを実装して、データベース表の列を作成し、JDBCを使用してデータをデータベースに挿入します。 – sanastasiadis

+0

この関連する質問を調べることもできます。http://stackoverflow.com/questions/120001/load-excel-data-sheet-to-oracle-database – sanastasiadis

答えて

1

は個人的に私はそれから呼び出すことができJavaプログラムを記述し

[好ましく/フリーウェアのオープンソースツールを使用して]私たちはこれを行うことができますどのようにアドバイスしてください。 Unixのシェルスクリプト。 Javaプログラムは非常に簡単になります:

  • 自動コミット偽でDB接続が電子プリペアドステートメント
  • を作成開くtryブロックを開くには、ファイルを読んで、ラインライン
  • によってのために各行、
  • そのフィールドをトークン化する
    • ここではあなたを処理するためにスマートにする必要がありますもちろん
  • ルールがあるように持っているダイナミックフィールドは、プリペアドステートメント内の値
  • がファイル
  • リーチエンドが
  • をブロックし、最後に試してみて、開く近い
  • をコミットし、それを実行して置きます
  • ロールバック

自動コミットを実行すると、実行が高速になります。

+0

要件が延期されました。したがって、POCを行う機会は決してありませんでした。しかし、本当にあなたのコメントに感謝します。私はチャンスを得るたびにそれに取り組むだろう。ありがとう! – animark

関連する問題