我有一个5gig的csv文件(如果更容易的话,也可以作为sas数据文件),我需要将其放入sql数据库中,以便可以在R中使用它。
变量名称全部包含在第一观察行中,并用双引号引起来。有1000多个变量,其中一些数字为其他字符(尽管某些字符变量是数字字符串,但是我不太担心可以在R中修复它)。
我的问题是如何以最小的代价将csv文件导入数据库中的新表?
我发现有很多事情要说要首先创建您的表(包括指定所有变量,我拥有1000多个变量),然后使用“.import file table”引入数据。
或者,要使用某些gui导入向导,这对我来说不是一个选择。
抱歉,如果这是sql 101,但感谢您的帮助。
最佳答案
这是我的工作流程:
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
。如果您不提供此列表,RSQLite将从标题中进行猜测。索引也不是必需的,但是稍后将加快查询速度(如果您为查询的正确列编制索引)。我在SO上已经学习了很多此类内容,因此,如果您在SQLite上查询/回答了我的问题,则可能会发现一些潜在的内容。
关于sqlite - UNIX将大csv导入SQLite,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4350131/