如何从RODBC读取300万条记录并写入文本文件

时间:2017-06-19 16:30:35

标签: r rodbc

我正在从一张表中读取300万条记录,我想把它写入一个文本文件,但我正面临着程序内存耗尽的错误

  

超出内存3096 MB的最大空间。

我的系统配置是具有4 GB RAM的i5处理器。

请查看以下代码。

library(RODBC)
con  <- odbcConnect("REGION", uid="", pwd="")

a <- sqlQuery(con, "SELECT * FROM dbo.GERMANY where CHARGE_START_DATE = '04/01/2017'");
write.table(a,"C:/Users/609354986/Desktop/R/Data/1Germany.txt",na="",sep="|",row.names = FALSE,col.names = FALSE)

close(con)

1 个答案:

答案 0 :(得分:0)

你可以做的是在db表中添加一个索引,这样你就可以循环遍历它并逐个提取/写入你的数据,而不会填满你的记忆 这是一个例子

   # create that index
    sqlQuery(channel, 'alter table dbo.GERMANY ADD MY_COL NUMBER')

    sqlQuery(channel, 'update dbo.GERMANY set MY_COL = rownum ')

    # the function
    g <- function(a) {

      for (i in (1:length(a))) {
      query <- gsub('\n',' ', paste( "SELECT * FROM dbo.GERMANY where 
                         CHARGE_START_DATE = '04/01/2017 and
                       my_col between",a[i] ," and ", a[i+1], collapse = ' '));

      df <- sqlQuery(channel, query) ; 

      write.csv(df, paste('my_',i,'_df.csv')) ;
      }
    }

    # use reasonable chunks 
    a <- seq(1,3000000,250000)


    g(a)