UNIX将LARGE csv导入SQLite

时间:2010-12-03 21:43:43

标签: sqlite r csv sas

我有一个5gig的csv文件(也作为一个sas数据文件,如果它更容易),我需要将它放入一个sql数据库,这样我就可以在R中使用它。

变量名称全部包含在第一个观察行中,并且是双引号。有1000多个变量,其中一些是数字的其他字符(虽然有些字符变量是数字字符串,但我不太担心它我可以在R中修复它。)

我的问题是如何将csv文件导入到我的数据库中的新表中,而且痛苦很小?

我发现首先要创建你的表(其中包括指定所有变量,我有1000+),然后使用“.import文件表”来引入数据。 或者,使用一些gui导入向导,这对我来说不是一个选项。

很抱歉,如果这是sql 101,但感谢您的帮助。

2 个答案:

答案 0 :(得分:9)

这是我的工作流程:

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将从标题中猜测。索引也不是必需的,但稍后会加快您的查询速度(如果您为查询索引正确的列)。

我一直在这里学习很多这样的东西,所以如果你在SQLite上查询我的问题/答案,你可能会发现一些有趣的东西。

答案 1 :(得分:4)

查看sqldf包中的“read.csv.sql”函数。

这会将csv文件转换为SQLite数据库,然后将其读入R,您应该能够保留中间数据库以用于您的目的。