使用大表的 ETLUtils 从 R 查询 SQL 服务器

Query SQL Server from R with ETLUtils for big tables

通常从 R 查询 sql-server 数据库,我会使用:

library(RODBC)
con <- odbcConnect(dsn = "ESTUDIOS", uid = "estudios", pwd = "yyyy")
sql_trx <- "SELECT [Fecha], [IDServicio]
            FROM [ESTUDIOS].[dbo].[TRX] where MONTH(Fecha) = MONTH('2016-08-01') and YEAR(Fecha) = YEAR('2016-08-01');"
    trx.server <- sqlQuery(channel = con, sql_trx)
    odbcClose(con)

但是当数据库table太大时,我可以使用库:ff和ETLUtils。

所以,正常的做法应该是:

library(RODBC)
library(ff)
library(ETLUtils)  

sql2_trx <- read.odbc.ffdf(query = sql_trx, odbcConnect.args = list(con))

但这并没有给我想要的结果,而是返回了以下错误。

1: In RODBC::odbcDriverConnect("DSN=11") :
  [RODBC] ERROR: state IM002, code 0, message [Microsoft][Administrador de controladores ODBC] No se encuentra el nombre del origen de datos y no se especificó ningún controlador predeterminado
2: In RODBC::odbcDriverConnect("DSN=11") : ODBC connection failed

你能指出使用 read.odbc.ffdf 有什么问题吗?

目前您正在将之前的 RODBC 连接对象 con 传递给 read.odbc.ffdf(),但请记住该方法正在尝试创建 ODBC 连接并调用查询. R docs 提到 odbcConnect.args:

的正确分配

odbcConnect.args a list of arguments to pass to ODBC's odbcConnect (like dsn, uid, pwd)

考虑像在常规 RODBC 连接中那样传递原始 DSN 和凭据:

sql2_trx <- read.odbc.ffdf(query = sql_trx, odbcConnect.args = list(dsn = "ESTUDIOS", uid = "estudios", pwd = "yyyy"))