2017-06-18 25 views
3

我有在這種結構約600暢想行數據36GB大文件:如何過濾和排序幾GB的數據?

LogID,SensorID,ValueNumeric,ValueString,DateAdded,VariableName,Name 
1215220724,1182,1,0000,,2016-01-04 12:56:57.7770000,Scan_Frequency,MIC_2 

我只是日期,值,變量名和流(名稱)感興趣。問題是有很多重複的信息,並且數據不是按日期排序的。

我目前的解決方案是,我先倒數第100.000行,讀取變量的名稱(其中833個),然後在數據庫中爲每個變量創建一個表。對於主鍵我使用日期(我已經截斷秒和毫秒),所以我DB將從重複。我知道這不是最好的主鍵字符串。

然後我再次讀取文件並在表格中輸入該數據,但速度很慢。我的估計是,我最終應該至少減少10倍的行數。

有沒有人有更好的主意,如何閱讀這樣一個大文件,並按日期排序並刪除重複項。保存數據每隔5分鐘就足夠了。

+0

這是什麼標記與德比?你不能使用它嗎? –

+0

每個樣本833個變量? – chrylis

+3

我們沒有足夠的能力回答這個問題。我們對數據,最終目標或嘗試解決方案一無所知。因此,我們在這裏建議的任何事情只會是猜測,並不一定對您的需求有所幫助。 –

回答

1

我會使用一個基於Elasticsearch + Logstash的解決方案(它們是免費的,並且在安裝默認情況下工作得很好)。 Logstash旨在從多個來源(包括CSV文件)中提取數據,Elasticsearch是一個NoSql數據庫,它可以爲索引文檔和查詢它們做出令人驚歎的工作。

查看this question and answer的起點,here is the documentation

0

您的數據庫將提供一個直接導入csv文件的工具。這很可能比使用JDBC快得多。此外,機會很高,它還提供了一個工具來刪除您在導入過程中提到的重複。一旦你在數據庫中有數據,它將負責爲你排序數據。 僅舉一個例子:如果您使用的是MySQL,那麼還有MySQL導入實用程序mysqlimport,它還提供了一個選項,用於在導入期間使用--replace刪除重複項。