2012-10-25 29 views
3

我遇到了一個問題,我不確定哪個是最適合實現它的技術。如果你們可以根據你的經驗給我推薦一些,我們將不得不承擔責任。 我想加載10-15個CSV文件中的數據,每個文件都是相當大的5-10 GB。通過加載數據,我的意思是將CSV文件轉換爲XML,然後在Oracle中使用此XML填充6-7個停滯表。 需要填充數據,以便XML的元素以及表格的最終行來自多個CSV文件。因此對於例如元素A會有來自CSV文件1,文件2和文件3等數據的子元素。將大型CSV文件加載到Oracle表中的技術選擇

我有一個構建在Linux上的Apache Camel,Jboss之上的框架。 Oracle 10G是數據庫服務器。 選項我正在考慮,

  1. 的Smooks - 但問題是,Smooks的序列化一個CSV的時間和我不能能留住一半烤的Java bean直到其他CSV文件被讀,因爲我跑了考慮到我需要在完全填充XML之前將它們創建並保存到磁盤上的絕對數量,因此存在內存用盡的風險。
  2. SQLLoader - 我可以一起跳過XML創建,並使用SQLLoader將CSV直接加載到登臺表。但我不確定我能不能。將SQL Loader中的多個CSV文件加載到更新第一個文件後記錄的相同表中。灣加載登臺表時應用一些翻譯規則。
  3. Python腳本將CSV轉換爲XML。
  4. SQLLoader用於加載與CSV數據對應的一組不同的登臺表,然後編寫存儲過程以從這組新的登臺表中加載實際的登臺表(這是一個我想避免給出的更改量它需要的現有框架)。

在此先感謝。如果有人能夠指引我正確的方向,或者通過他/她的個人經歷給我一些見解,這將有助於我做出明智的決定。

問候, -V-

PS:CSV文件時,每個大約40列相當簡單。對象的深度或文件之間的關係大約在2到3之間。

回答

2

除非您可以使用一些全面的ETL工具(例如Informatica PowerCenter,Pentaho數據集成),否則我建議您使用第四種解決方案 - 它很簡單,性能應該很好,因爲Oracle將處理最複雜的部分任務。

2

在Informatica PowerCenter中,您可以導入/導出XML的+ 5GB ..作爲Marek響應,請嘗試它,因爲它的工作速度非常快。here是一個簡短的介紹,如果您不熟悉此工具。

1

創建一個進程/腳本,該進程/腳本將調用將csv文件加載到外部Oracle表的另一個腳本以將其加載到目標表。
您也可以添加cron作業來調用這些腳本,這些腳本將跟蹤傳入的csv文件到目錄中,處理它並將csv文件移動到輸出/處理文件夾。
也可以通過記錄或發送電子郵件來處理異常。祝你好運。