使用dplyr 0.7和R连接到Microsoft SQL数据库

时间:2017-06-23 18:32:36

标签: r database dplyr dbplyr

我正在尝试将dplyr / dbplyrversion 0.7)与数据库(Microsoft SQL Server 2014)一起使用。我已经能够连接到此并使用RODBCDBIodbc包提取数据。当我尝试直接使用dplyr动词与基础时出现问题。

当我尝试使用dplyr时,出现以下错误:

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

我在dplyr repo上提出了这个问题,Hadley告诉我,这很可能是odbc错误。当我在odbc回购中raised问题时,Jim非常乐于助人,但无法解决问题。

要明确:

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

然而,凭借我的基础,我无法做到这一点。任何帮助都会很多赞赏。

2 个答案:

答案 0 :(得分:1)

叹息。 (对任何遇到类似问题的人的答案。)

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

此表格可以很好地解决RODBCDBI/odbc,但是只要我使用dplyr就会出现此错误。

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

答案 1 :(得分:1)

我在Sybase中有一个非常相似的问题。原来,我的问题与odbcDBI软件包完全无关。

对我来说,解决方案是确保我使用的是支持8字节SQLLEN数据类型的ODBC驱动程序。在Linux上,运行命令odbcinst -j向我显示,对于在64位RHEL Server 7.5上运行的已安装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