1

我正在尝试将dplyr/ dbplyr( version 0.7) 与数据库 ( Microsoft SQL Server 2014) 一起使用。我已经能够连接到这个并使用RODBC,DBIodbc包提取数据。当我尝试将 dplyr 动词直接与基础一起使用时,就会出现问题。

当我尝试使用dplyr时,我收到以下错误:

Error in new_result(connection@ptr, statement) : std::bad_alloc

我在dplyr repo上提出了这个问题,Hadley 告诉我这很可能是一个odbc错误。当我在 repo 上提出问题时,Jim 非常有帮助odbc,但无法解决问题。

要清楚:

RODBC::sqlQuery()并且DBI::dbGetQuery()两者都有效:我得到了一个我期望的数据框,我可以使用SQL查询来取回我想要的任何东西。我只在尝试使用dplyr动词时遇到内存分配错误(实际上,即使我尝试tbl())。有很多数据,但我正在查询其中的一个子集,它很适合 R 内存。

理想情况下,如果可能的话,我宁愿将数据完全保留R 的内存之外。这样做的原因是我正在构建一个Shiny应用程序,该应用程序将根据用户选择的数据的各个方面生成绘图等。可以想象,每次用户执行此操作时连接到数据库、发送查询和接收数据都会使应用程序有些无用,因为它太慢了。我的理想情况是这样的RStudio例子:

my_db <- src_mysql(
  dbname = "shinydemo",
  host = "shiny-demo.csa7qlmguqrf.us-east-1.rds.amazonaws.com",
  user = "guest",
  password = "guest"
)

> my_db %>% tbl("City") %>% head(5)
# Source:   lazy query [?? x 5]
# Database: mysql 10.0.17-MariaDB [guest@shiny-demo.csa7qlmguqrf.us-east-1.rds.amazonaws.com:/shinydemo]
     ID           Name CountryCode      District Population
  <dbl>          <chr>       <chr>         <chr>      <dbl>
1     1          Kabul         AFG         Kabol    1780000
2     2       Qandahar         AFG      Qandahar     237500
3     3          Herat         AFG         Herat     186800
4     4 Mazar-e-Sharif         AFG         Balkh     127800
5     5      Amsterdam         NLD Noord-Holland     731200

但是,以我的基础,我无法做到这一点。任何帮助将不胜感激。

4

2 回答 2

1

叹。(为遇到类似情况的任何人提供答案。)

原来这是我试图访问的特定表的问题。

RODBC该表可以正常返回,并且没有问题DBI/odbc,但是一旦我使用dplyr它就会吐出这个错误。

数据库中的其他表可以正常工作dplyr,因此它必须与此特定表有关。更糟糕的是,我不知道为什么。

于 2017-06-27T14:41:33.900 回答
1

我对 Sybase 有一个非常相似的问题。我的问题原来与odbcorDBI包完全无关。

我的解决方案是确保我使用的是支持 8 字节 SQLLEN 数据类型的 ODBC 驱动程序。在 Linux 上运行该命令odbcinst -j向我显示,对于我在 RHEL Server 7.5 64 位上运行的已安装 unixODBC 版本 2.3.1,SQLLEN 大小为 8。

默认情况下,Sybase 驱动程序符号链接到 4 字节版本。按照下面的说明,我确保我链接到了 8 字节版本并且我的问题得到了解决。奇怪的是,我在通过但发出命令时从未遇到过这些问题isql……也许这适用于带有 SQL Server 的@robertmc。

http://infocenter.sybase.com/help/topic/com.sybase.infocenter.dc20155.1600/doc/html/san1361915533650.html

也将此发布在相关的 GitHub 问题之一中: https ://github.com/r-dbi/odbc/issues/174#issuecomment-403106647

于 2018-07-06T18:08:15.843 回答