2013-05-27 50 views
-1

我有一個小的統計程序,您可以指向一個CSV文件。它試圖確定某些屬性(如i.E.哪些列可能是日期)。最近我一直在閱讀很多關於SQLite的信息,並希望移植我的應用程序來使它成爲可能,因爲這樣可以更容易地創建新的統計信息,因爲只需要編寫新的選擇。CSV文件上的SQLite

現在我想知道的是,我知道SQLite可以在內存中運行,但是我當然不希望將整個文件加載到內存中,因爲這可能會變得相當大。所以我想將SQLite指向CSV文件並提供列信息,以便我可以對其進行查詢。如果我可以在內存(或臨時目錄)中創建一個索引以便統計運行速度更快,它也會很酷。這不需要修改CSV,只做選擇。

這可以開箱即用嗎?如果沒有,我可以寫我自己的文件管理器並將其連接到SQLite,以實現這一目標?編寫我自己的文件管理器只會是一個選項,如果努力不夠大,因爲我不想編寫完整的數據庫代碼。

+0

你的文件有多大? – 2013-05-27 10:46:07

+0

到目前爲止,最大的一個是8MB,但這個工具是通用的,所以它也可能需要處理更大的文件。但是,我不期望真正的大文件在50或100MB的範圍內。你認爲在內存中創建它可能會更好嗎? – Devolus

+1

這並不是那麼大。現代計算機具有4GB +內存。使用SQLite,您始終可以在非常大的文件中創建數據庫。 – 2013-05-27 10:53:10

回答

2

SQLite支持從文件中讀取:

$ cat data.csv 
Cheese,7,12.3 
Bacon,8,19.4 
Eggs,3,20.3 

# With no filename SQLite creates the database in memory. 
$ sqlite3 
sqlite> create table data (name text, units integer, price double); 
sqlite> .separator ',' 
sqlite> .import data.csv data 
sqlite> select * from data; 
Cheese,7,12.3 
Bacon,8,19.4 
Eggs,3,20.3 

您可以在此表中添加約束和indexes,以幫助您分析。

+0

這是什麼?它創建一個單獨的數據庫文件(我想避免)還是它創建它完全在內存中(這可能是可以接受的,取決於大小)?或者它只是像我最初想要的那樣引用這個文件?我想保持這個應用程序自包含,而不在客戶端計算機上傳播文件。 – Devolus

+0

沒有文件名,'sqlite3'在內存中創建數據庫。請參閱[文檔](https://www.sqlite.org/sqlite.html)。 – 2013-05-27 10:56:47

+0

是的,我剛剛注意到了這個評論。 :) 謝謝! – Devolus