使用read.odbc.ffdf查询大型数据库会耗尽R中的内存

时间:2013-07-24 17:31:45

标签: r memory-management rodbc

我正在尝试查询大型数据库,然后使用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选项一起使用?

0 个答案:

没有答案