2010-12-03 3 views
5

में बड़ी CSV आयात कर रहा है मैं (, यह भी एक sas datafile जैसे कि यह आसान होगा) एक 5gig csv फ़ाइल है जो मैं एक SQL डेटाबेस में डाल करने की आवश्यकता है तो मैं आरयूनिक्स SQLite

में

इसके साथ काम कर सकते हैं चर नाम सभी पहली अवलोकन रेखा में निहित हैं और दोहरे उद्धृत हैं। संख्यात्मक अन्य वर्णों में से कुछ 1000+ चर हैं (हालांकि कुछ चरित्र चर अंक की तार हैं, लेकिन मैं इसके बारे में बहुत चिंतित नहीं हूं मैं इसे आर में ठीक कर सकता हूं)।

मेरा सवाल यह है कि मैं सीएसवी फ़ाइल को न्यूनतम डेटाबेस के साथ अपने डेटाबेस में एक नई तालिका में कैसे आयात कर सकता हूं?

मुझे आपकी तालिका पहले बनाने के लिए कह रही चीजें मिली हैं (जिसमें सभी चर निर्दिष्ट करना शामिल है, जिनमें से 1000+ है) और फिर डेटा लाने के लिए ".import फ़ाइल तालिका" का उपयोग करना। या, कुछ gui आयात विज़ार्ड का उपयोग करने के लिए, जो मेरे लिए एक विकल्प नहीं है।

क्षमा करें अगर यह एसक्यूएल 101 है लेकिन मदद के लिए धन्यवाद।

+1

आपको कितनी रैम के साथ काम करना है? –

+0

हमने अभी एक नए शोध क्लस्टर पर स्विच किया है, इसलिए मुझे विशिष्टताओं पर व्यवस्थापक से जांच करनी होगी, लेकिन मुझे डिफ़ॉल्ट नौकरी जमा करने के विकल्पों के साथ विश्वास है कि मुझे 16 जीबी मिलती है, और निश्चित रूप से मैं आवश्यकतानुसार अधिक अनुरोध कर सकता हूं। –

+0

बस स्मृति में सबकुछ छोड़ने का विकल्प जांचना सुनिश्चित करें। अपने कार्यक्रम से समय-समय पर वर्कस्पेस को सहेजें। 16 जीबी पर्याप्त से अधिक है। बहुत तेज और आसान हो सकता है, और आपके पास ऑपरेटर से आवश्यक होने पर अधिक रैम का अनुरोध करने का विकल्प भी है। (और आप LINUX चला रहे हैं, है ना?) – mrsteve

उत्तर

8

यहाँ मेरी कार्यप्रवाह है। यदि आप इस सूची को प्रदान नहीं करते हैं तो RSQLite शीर्षलेख से अनुमान लगाएगा। इंडेक्स की आवश्यकता नहीं है, लेकिन बाद में आपके प्रश्नों को तेज कर देगा (यदि आप अपने प्रश्नों के लिए सही कॉलम इंडेक्स करते हैं)।

मैं एसओ पर यहां बहुत सारी चीज़ें सीख रहा हूं, इसलिए यदि आप SQLite पर मेरे प्रश्न पूछे/उत्तर देते हैं, तो आपको कुछ टैगिक सामग्री मिल सकती है।

+0

यह बहुत अच्छा लग रहा है। धन्यवाद –

+0

+1। ध्यान दें कि यदि आपकी अल्पविराम से अलग फ़ाइल में एक अलग एक्सटेंशन है (कभी-कभी ...), 'dbWriteTable' विफल हो जाएगा। बस '.csv' का नाम बदलें। – Ryogi

4

sqldf पैकेज में "read.csv.sql" फ़ंक्शन देखें।

यह एक सीएसवी फ़ाइल को SQLite डेटाबेस में परिवर्तित करता है, फिर इसे आर में पढ़ता है, तो आप अपने उद्देश्यों के लिए इंटरमीडिएट डेटाबेस को रखने में सक्षम होना चाहिए।

library("RSQLite") 
setwd("~/your/dir") 
db <- dbConnect(SQLite(), dbname="your_db.sqlite") ## will make, if not present 
field.types <- list(
     date="INTEGER", 
     symbol="TEXT", 
     permno="INTEGER", 
     shrcd="INTEGER", 
     prc="REAL", 
     ret="REAL") 
dbWriteTable(conn=db, name="your_table", value="your_file.csv", row.names=FALSE, header=TRUE, field.types=field.types) 
dbGetQuery(db, "CREATE INDEX IF NOT EXISTS idx_your_table_date_sym ON crsp (date, symbol)") 
dbDisconnect(db) 

field.types आवश्यक नहीं है:

+2

आप sqldf डेटाबेस में csv फ़ाइल को पढ़ने के लिए sqldf का उपयोग करने का उदाहरण पा सकते हैं उदाहरण में 13d sqldf होम पेज पर: http://code.google.com/p/sqldf/#Example_13._read.csv.sql_and_read। csv2.sql –