我有一个 5gig 的 csv 文件(也作为 sas 数据文件,如果它更容易的话)我需要将其放入 sql 数据库中以便我可以在 R 中使用它。
变量名都包含在第一个观察行中,并用双引号引起来。有 1000 多个变量,一些是数字其他字符(虽然一些字符变量是数字字符串,但我不太担心,我可以在 R 中修复它)。
我的问题是如何将 csv 文件导入到我的数据库中的一个新表中,而痛苦最小?
我发现要先创建您的表(包括指定所有变量,我有 1000 多个变量),然后使用“.import 文件表”导入数据。 或者,使用一些 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 将从 header 中猜测。索引也不是必需的,但稍后会加快您的查询速度(如果您为查询索引了正确的列)。
我在 SO 上学到了很多这方面的东西,所以如果您查看我在 SQLite 上提出/回答的问题,您可能会发现一些有针对性的东西。
关于sqlite - UNIX 将大型 csv 导入 SQLite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4350131/