在 R 中将平面文件保存为 SQL 数据库,而不将其 100% 加载到 RAM 中

lar*_*y77 4 sqlite r sqldf dbplyr

我希望我要写的内容有意义。\n如果你看看

\n

r语言如何处理50GB大的csv文件?

\n

解释了如何查询 \xc3\xa0 la SQL(来自 R 的 csv 文件)。\n就我而言,我有大量数据存储为大型(或大于我的 RAM)平面文件。

\n

例如,我想将其中一个存储为 SQLite 数据库,而不将其完全加载到内存中。\n想象一下,如果您可以自动读取该文件中适合您的 RAM 的有限块,将其存储到 SQL 中,然后释放一些内存,处理下一个块,依此类推,直到所有文件都在数据库中。\n这在 R 中可行吗?如果表格可以存储为 tibble,那就更好了,但这并不重要。\n任何建议表示赞赏。\n谢谢!

\n

G. *_*eck 5

1) dbWriteTable dbWriteTable 可以将文件读入数据库,而无需通过 R。如果数据库尚不存在,则创建该数据库。

library(RSQLite)

cat("a,b\n1,2\n", file = "myfile.csv")  # create test file

con <- dbConnect(SQLite(), "mydb") 

dbWriteTable(con, "mytable", "myfile.csv")
dbGetQuery(con, "select count(*) from mytable")  # ensure it is there

dbDisconnect(con)
Run Code Online (Sandbox Code Playgroud)

2) SQLite CLI我们也可以使用 sqlite cli 来完成此操作,它可以从 sqlite 下载站点下载。

https://www.sqlite.org/download.html

这根本不涉及 R 来创建数据库。如果 mydb 不存在,则会创建它。第一行是在 shell 或 cmd 提示符下输入的,它将提供自己的提示符,可以在其中输入其余的行。

sqlite3 mydb
.mode csv
.import myfile.csv mytable
.quit
Run Code Online (Sandbox Code Playgroud)

3) 其他数据库另一种选择是使用能够直接读取 csv 文件的数据库。H2 有csvread,MySQL 有load data infile,PostgreSQL 有copy