sqlite - UNIX 将大型 csv 导入 SQLite

标签 sqlite r csv sas

我有一个 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/

相关文章:

php - 处理 CSV 中的逗号

python - Sqlite3 或 QtSql

java - 数据没有被插入并且在 android sqlite 中没有抛出异常

r - 如何在数据框中按行获取值的所有组合

r - 使用 lapply/sapply 创建单级列表,无需强制

r - 将文本和线条添加到图形中的 `image()`

python - 从 csv 添加特定字段

c++ - 提神气缓

sqlite - 火狐扩展开发sqlite

android - 检查 Db 列数据