我正在尝试查询大型数据库,然后使用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,并最终在对象“data”完全填满之前终止进程。检查“数据”会显示以下错误消息:
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选项一起使用?