【问题标题】:RODBC connection- limited rowsRODBC 连接限制行
【发布时间】:2013-06-15 08:40:06
【问题描述】:

我设置了一个到 Netezza(SQL 数据库)的 ODBC 连接。连接很好。但是,R 默认只拉出 256 行,并且限制了它可以拉出的行数。

如果我在 Netezza 中运行查询,它将返回总行数 (300k)。我期望 R 中的行数相同。但是,它只返回了 256 行,与 300k 相比有点短。

我使用的驱动程序是 NetezzaSQL 版本 7.00.02 NSQLODBC.DLL

我尝试在“驱动程序选项”中将预取计数更改为零 控制面板 > 管理工具 > 数据源(OBBC) > 系统 DNS

没有用。有什么想法吗?

【问题讨论】:

  • 您期望有多少行?您使用的是哪个 ODBC 连接库?
  • 全尺寸 (300k)。我想您的意思是 ODBC 数据源管理器 > 系统 DSN
  • 什么样的驱动程序?
  • 我不确定你的意思...
  • 当我通过 RODBC 连接到 Oracle 时,系统 DSN 通过 Oracle 驱动程序连接。它是 Windows 用来管理连接的 DLL。

标签: r odbc netezza


【解决方案1】:

我认为 RODBC 与 Netezza 的表现不佳。一个解决方案http://datamining.togaware.com/survivor/Database_Connection.html

只需将believeNRows=FALSE 添加到您的sqlQueryodbcConnect 呼叫(如果您也使用sqlFetch,请使用后者。

【讨论】:

  • 正确,只需将参数添加到您的查询中,例如results = sqlQuery(dbhandle, "SELECT * FROM TABLE", believeNRows=FALSE)
【解决方案2】:

您也可以尝试使用JDBC驱动:

library(RJDBC)
drv <- JDBC("org.netezza.Driver", "nzjdbc.jar", "'")

conn <- dbConnect(drv, "jdbc:netezza://host:5480/database", "user", "password")

res <- dbSendQuery(conn, "select * from mytable")

这样您就不必处理 DSN 等问题了。

【讨论】:

  • Alex,我已经在 Mac 上使用 nzjdbc.jar 尝试过这种方法,但仍然可以返回 256 行。有什么想法吗?
  • @FrankP.,256 是驱动程序预取缓冲区的默认长度。您是否使用fetch(res, n = -1) 下载数据? -1 将强制检索所有记录。
  • 当我 fetch(res, n = -1) 我仍然得到 256 行。如果我先 fetch(res, n = 10) 然后 fetch(res, n = -1) 那么我首先得到 10 行,然后是 246 行。因此,查询似乎只包含 256 行。
  • 如果您更改 SQL 查询以显式添加上限 RJDBC::dbGetQuery(conn, "select * from mytable LIMIT 2147483647"),这对我有用
【解决方案3】:

我知道这有点过时了,但问题不在于 RODBC 包。问题在于如何设置 ODBC 连接,如果您在 Windows 中配置连接,您将在设置中看到最后一个选项卡,您可以在其中指定它将获取的行数。并且默认是 256。

【讨论】:

    猜你喜欢
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多