2015-11-14 18 views
0

有關可能對此有幫助的包(或方法)的任何建議?我需要每週接收一個〜40MB的文件,並確定從前一個文件到當前文件的變化。無論這些更改是什麼,都需要對一個簡單的數據庫表進行操作。在以前的生活中,我通過使用Linux的「diff」和-Hae參數完成了類似的操作,結果產生了「ed腳本」。內容然後由PERL程序處理,使用Tie :: File引用前一個文件中已更改的記錄。爲了加強我的Go技能,我正在嘗試將它用於當前的任務。 https://github.com/sergi/go-diff看起來可能是票據,但我不確定「修補程序」輸出會完成我所需要的工作(很容易)。比較數據庫更新的分隔文件

固定寬度和/或分隔文本文件仍然是常用的,沒有人有任何樣本或指針或包裝上的建議,可能有助於以這種方式處理它們?

回答

0

你確定你需要的中間步驟嗎? 40 MB是不是非常多,你的數據庫引擎是專門在處理這樣的數據..

比如PostgreSQL的只是新的數據加載到一個臨時表:

create table temptable (
a varchar, 
b varchar, 
c varchar 
); 
copy temptable from '/path/to/csv/newdata.txt' delimiter ',' csv; 

然後你可以使用簡單的SQL查詢來獲取沒有在舊數據精確匹配的線條,例如:

select * 
from temptable t 
where not exists (
select 1 
from oldtable o 
where t.a=o.a and t.b=o.b and t.c=o.c 
) 

如果沒有保存從此前一週的批量數據,然後只記得它複製到其他表存儲。現在真正的問題是你想要對信息做什麼,但你應該能夠處理大多數場景。