将平面文件保存为 R 中的 SQL 数据库而不将其 100% 加载到 RAM 中
Saving a flat file as an SQL database in R without loading it 100% into RAM
我希望我即将写的内容有一定的道理。
如果你看
解释了如何查询 à la SQL,一个来自 R 的 csv 文件。
就我而言,我有大量数据存储为大型(或大于我的 RAM)平面文件。
我想将其中一个存储为 SQLite 数据库,而不是将其完全加载到内存中。
想象一下,如果您可以自动读取该文件的有限块,即 suitable 用于您的 RAM,将其存储到 SQL,然后释放一些内存,处理下一个块,依此类推直到所有文件都在数据库中。
这在 R 中可行吗?如果 table 可以存储为 tibble,那就更好了,但这并不重要。
任何建议表示赞赏。
谢谢!
显然已经有相应的功能
https://raw.githubusercontent.com/inbo/inborutils/master/R/csv_to_sqlite.R
我正在测试。即使选择了相应的选项,我也没有看到任何进度条,但它似乎完成了工作。
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)
2) SQLite CLI 我们也可以使用可以从 sqlite 下载站点下载的 sqlite cli 来完成。
https://www.sqlite.org/download.html
这根本不涉及 R 创建数据库。如果 mydb 不存在,将创建它。第一行是在 shell 或 cmd 提示符下输入的,它将提供自己的提示符,可以在该提示符下输入其余行。
sqlite3 mydb
.mode csv
.import myfile.csv mytable
.quit
3) 其他数据库 另一种选择是使用能够直接读取csv 文件的数据库。 H2 有 csvread
,MySQL 有 load data infile
,PostgreSQL 有 copy
.
我希望我即将写的内容有一定的道理。 如果你看
解释了如何查询 à la SQL,一个来自 R 的 csv 文件。 就我而言,我有大量数据存储为大型(或大于我的 RAM)平面文件。
我想将其中一个存储为 SQLite 数据库,而不是将其完全加载到内存中。 想象一下,如果您可以自动读取该文件的有限块,即 suitable 用于您的 RAM,将其存储到 SQL,然后释放一些内存,处理下一个块,依此类推直到所有文件都在数据库中。 这在 R 中可行吗?如果 table 可以存储为 tibble,那就更好了,但这并不重要。 任何建议表示赞赏。 谢谢!
显然已经有相应的功能
https://raw.githubusercontent.com/inbo/inborutils/master/R/csv_to_sqlite.R
我正在测试。即使选择了相应的选项,我也没有看到任何进度条,但它似乎完成了工作。
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)
2) SQLite CLI 我们也可以使用可以从 sqlite 下载站点下载的 sqlite cli 来完成。
https://www.sqlite.org/download.html
这根本不涉及 R 创建数据库。如果 mydb 不存在,将创建它。第一行是在 shell 或 cmd 提示符下输入的,它将提供自己的提示符,可以在该提示符下输入其余行。
sqlite3 mydb
.mode csv
.import myfile.csv mytable
.quit
3) 其他数据库 另一种选择是使用能够直接读取csv 文件的数据库。 H2 有 csvread
,MySQL 有 load data infile
,PostgreSQL 有 copy
.