3

私は問題に遭遇しましたが、それを実装するのに最適なテクノロジーがどれであるかわかりません。あなたたちがあなたの経験に基づいて私にいくつかを提案することができれば義務付けられるでしょう。10〜15個のCSVファイルからデータをロードしたいのですが、それぞれが5〜10GBとかなり大きいです。データをロードするということは、CSVファイルをXMLに変換してから、このXMLを使用してOracleに約6〜7個のステージングテーブルを設定することを意味します。XMLの要素、そして最終的にはテーブルの行が複数のCSVファイルから取得されるように、データを入力する必要があります。したがって、たとえば要素Aには、CSVファイル1、ファイル2、ファイル3などからのデータからなるサブ要素があります。

Linux上のJbossであるApacheCamelの上にフレームワークを構築しています。Oracle10Gはデータベースサーバーです。私が検討しているオプション、

  1. Smooks-ただし、問題は、Smooksが一度に1つのCSVをシリアル化し、Beanの数が非常に多いためにメモリが不足するリスクがあるため、他のCSVファイルが読み取られるまで半分ベイクされたJavaBeanを保持する余裕がないことです。 XMLとしてディスクに書き込まれるように完全に入力される前に、作成して保持する必要があります。
  2. SQLLoader-XMLの作成をすべてスキップして、SQLLoaderを使用してCSVをステージングテーブルに直接ロードできます。しかし、私ができるかどうかはわかりません。SQLローダーの複数のCSVファイルを同じテーブルにロードして、最初のファイルの後のレコードを更新します。b。ステージングテーブルのロード中にいくつかの変換ルールを適用します。
  3. CSVをXMLに変換するPythonスクリプト。
  4. SQLLoaderを使用して、CSVデータに対応する別のステージングテーブルのセットをロードし、ストアドプロシージャを記述して、この新しいステージングテーブルのセット(既存のフレームワークへの変更の量を考慮して避けたいパス)から実際のステージングテーブルをロードします。必要になります)。

前もって感謝します。誰かが私を正しい方向に向けたり、彼/彼女の個人的な経験からいくつかの洞察を与えてくれるなら、それは私が情報に基づいた決定をするのを助けるでしょう。

よろしく、-v-

PS:CSVファイルはかなり単純で、それぞれ約40列です。オブジェクトの深さまたはファイル間の関係は、約2〜3になります。

4

3 に答える 3

2

Informatica PowerCenterでは、XMLの+ 5GBをインポート/エクスポートできます。Marek応答として、非常に高速に動作するため、試してみてくださいこのツールに慣れていない場合は、簡単に紹介します。

于 2013-01-12T21:56:34.263 に答える
2

本格的なETLツール(Informatica PowerCenter、Pentaho Data Integrationなど)を使用できない限り、4番目のソリューションをお勧めします。Oracleがタスクの最も複雑な部分を処理するため、これは簡単でパフォーマンスは良好です。

于 2012-10-25T06:22:19.670 に答える
1

csvファイルを外部のOracleテーブルにロードするプロシージャと、それを宛先テーブルにロードする別のスクリプトを呼び出すプロセス/スクリプトを作成します。
cronジョブを追加して、これらのスクリプトを呼び出し、ディレクトリへの着信csvファイルを追跡し、それを処理して、csvファイルを出力/処理済みフォルダーに移動することもできます。
例外は、ログに記録するか、電子メールを送信することによって、それに応じて処理することもできます。幸運を。

于 2013-01-21T23:24:41.190 に答える