2014-04-06 152 views
0

我從一家零售商處收到了超過100GB的數據和6700萬條記錄。我的目標是做一些市場籃子分析和CLV。此數據是來自70列中的一個表的直接sql轉儲。我試圖找到一種方法來從這些數據中提取信息,因爲在小型筆記本電腦/桌面設備中管理本身變得非常耗時。我考慮了以下選項從Oracle到MySQL的大數據遷移

  • 解析數據並將其轉換爲CSV格式。由於每條記錄中超過一半的信息是列名,因此文件大小可能會降至35-40GB左右。但是,我可能仍然需要使用db,因爲我無法使用R或Excel和6600萬條記錄。
  • 將數據遷移到mysql數據庫。不幸的是,我沒有該表的模式,我試圖重新創建查看數據的模式。我可能需要將數據轉儲中的to_date()替換爲str_to_date()以匹配MySQL格式。

有沒有什麼更好的辦法來處理呢?我需要做的就是通過運行一些查詢從SQL轉儲中提取數據。 Hadoop等是選項,但我沒有基礎設施來設置羣集。我正在考慮mysql,因爲我有存儲空間和一些內存。

假設我在MySQL的路徑走,我將如何導入數據?我正在考慮以下

  • 使用sed之一,並與相應的str_to_date()在線更換to_date()。請注意,我需要爲100GB文件執行此操作。然後使用mysql CLI導入數據。
  • 編寫將讀取文件,轉換數據並直接寫入mysql的python/perl腳本。

什麼是快?感謝您的幫助。

回答

0

在我看來寫劇本會更快,因爲你要跳過SED的一部分。

我認爲你需要安裝一個單獨的PC上的服務器,並且從你的筆記本電腦運行該腳本。

也用尾巴更快擺脫這個大文件的底部的一部分,以測試對部分腳本,你對這個文件100GB運行之前。

+0

發現'gshuf'或'shuf'從文件中獲取隨機樣本更有效。 – donnie

0

我決定去用MySQL路徑。我創建了查看數據的模式(由於數據中存在意外的變化,必須增加一些列大小),並使用MySQLdb模塊編寫了python腳本。我的2011年MacBook Pro在4小時40分鐘內完成導入,在6700萬條記錄中發生了8154次故障。這些失敗主要是數據問題。客戶端和服務器都在我的MBP上運行。

@kpopovbg,是的,寫腳本更快。謝謝。