私は問題に遭遇しましたが、それを実装するのに最適なテクノロジーがどれであるかわかりません。あなたたちがあなたの経験に基づいて私にいくつかを提案することができれば義務付けられるでしょう。10〜15個のCSVファイルからデータをロードしたいのですが、それぞれが5〜10GBとかなり大きいです。データをロードするということは、CSVファイルをXMLに変換してから、このXMLを使用してOracleに約6〜7個のステージングテーブルを設定することを意味します。XMLの要素、そして最終的にはテーブルの行が複数のCSVファイルから取得されるように、データを入力する必要があります。したがって、たとえば要素Aには、CSVファイル1、ファイル2、ファイル3などからのデータからなるサブ要素があります。
Linux上のJbossであるApacheCamelの上にフレームワークを構築しています。Oracle10Gはデータベースサーバーです。私が検討しているオプション、
- Smooks-ただし、問題は、Smooksが一度に1つのCSVをシリアル化し、Beanの数が非常に多いためにメモリが不足するリスクがあるため、他のCSVファイルが読み取られるまで半分ベイクされたJavaBeanを保持する余裕がないことです。 XMLとしてディスクに書き込まれるように完全に入力される前に、作成して保持する必要があります。
- SQLLoader-XMLの作成をすべてスキップして、SQLLoaderを使用してCSVをステージングテーブルに直接ロードできます。しかし、私ができるかどうかはわかりません。SQLローダーの複数のCSVファイルを同じテーブルにロードして、最初のファイルの後のレコードを更新します。b。ステージングテーブルのロード中にいくつかの変換ルールを適用します。
- CSVをXMLに変換するPythonスクリプト。
- SQLLoaderを使用して、CSVデータに対応する別のステージングテーブルのセットをロードし、ストアドプロシージャを記述して、この新しいステージングテーブルのセット(既存のフレームワークへの変更の量を考慮して避けたいパス)から実際のステージングテーブルをロードします。必要になります)。
前もって感謝します。誰かが私を正しい方向に向けたり、彼/彼女の個人的な経験からいくつかの洞察を与えてくれるなら、それは私が情報に基づいた決定をするのを助けるでしょう。
よろしく、-v-
PS:CSVファイルはかなり単純で、それぞれ約40列です。オブジェクトの深さまたはファイル間の関係は、約2〜3になります。