我正在尝试查询一个大型数据库,然后使用 read.odbc.ffdf 函数将返回的结果保存为 ff 对象。下面的代码应该允许我一次拉入一千行,将数据保存为 ff 对象,然后移动到下一千行,将这些附加到上一个文件,以便我可以保留内存:
library(ff);
library(ffbase);
library(ETLUtils);
library(RODBC);
sqlcode <- "SELECT f.*
FROM table1 AS f;";
data <-read.odbc.ffdf(query = sqlcode,
odbcConnect.arg = list('data1; db=research'),
nrows = 1000,
next.rows = 1000,
BATCHBYTES = 100000;
dim(data);
但是,当我这样做时,R 最终会耗尽我所有的 RAM,并最终在对象“数据”完全填充之前终止进程。检查“数据”会显示以下错误消息:
read.odbc.ffdf 1.. () odbc-read=822.06secError in if (nrow(dat) == 0) { : argument is of length zero
任何想法此错误消息的含义是什么?如何在不耗尽内存(4 GB RAM)的情况下查询该数据库?我希望选项“BATCHBYTES”与“first.rows”和“next.rows”结合使用,以保持我的内存使用率较低(在 100,000 字节内,这对于我的系统来说应该足够了)。
我只是不理解函数 read.odbc.ffdf 如何与 first.rows、next.rows 和 BATCHBYTES 选项一起使用吗?