使用 dplyr 0.7 和 R 连接到 Microsoft SQL 数据库
Connect to Microsoft SQL database with dplyr 0.7 and R
我正在尝试将 dplyr
/dbplyr
(version 0.7
) 与数据库 (Microsoft SQL Server 2014
) 一起使用。我已经能够连接到它并使用 RODBC
、DBI
和 odbc
包提取数据。当我尝试直接将 dplyr 动词与基础一起使用时,问题就出现了。
当我尝试使用 dplyr
时,出现以下错误:
Error in new_result(connection@ptr, statement) : std::bad_alloc
我在 dplyr repo, where Hadley told me it was most likely an odbc
error. Jim was super helpful when I raised 问题 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
但是,以我的基础,我无法做到这一点。如果有任何帮助,我们将不胜感激 much。
唉。 (任何遇到类似问题的人的答案。)
原来这是我尝试访问的特定 table 的问题。
这个 table 可以正常使用 RODBC
和 DBI/odbc
,但是当我使用 dplyr
时,它就会出现这个错误。
数据库中的其他 tables 与 dplyr
一起工作正常,所以它一定与这个特定的 table 有关。更糟糕的是,我不知道为什么。
我在使用 Sybase 时遇到了非常相似的问题。结果证明我的问题与 odbc
或 DBI
包完全无关。
我的解决方案是确保我使用的是支持 8 字节 SQLLEN 数据类型的 ODBC 驱动程序。在 Linux 运行 命令 odbcinst -j
上显示 SQLLEN 大小是 8 对于我在 RHEL Server 7.5 64- 上安装的 unixODBC 版本 2.3.1 运行少量。
默认情况下,Sybase 驱动程序符号链接到 4 字节版本。按照下面的说明,我确保链接到 8 字节版本并且我的问题得到解决。奇怪的是,我在通过 isql
发出命令时从未遇到过这些问题,但是......也许这适用于带有 SQL 服务器的@robertmc。
也在相关的 GitHub 问题之一中发布了此内容:
https://github.com/r-dbi/odbc/issues/174#issuecomment-403106647
我正在尝试将 dplyr
/dbplyr
(version 0.7
) 与数据库 (Microsoft SQL Server 2014
) 一起使用。我已经能够连接到它并使用 RODBC
、DBI
和 odbc
包提取数据。当我尝试直接将 dplyr 动词与基础一起使用时,问题就出现了。
当我尝试使用 dplyr
时,出现以下错误:
Error in new_result(connection@ptr, statement) : std::bad_alloc
我在 dplyr repo, where Hadley told me it was most likely an odbc
error. Jim was super helpful when I raised 问题 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
但是,以我的基础,我无法做到这一点。如果有任何帮助,我们将不胜感激 much。
唉。 (任何遇到类似问题的人的答案。)
原来这是我尝试访问的特定 table 的问题。
这个 table 可以正常使用 RODBC
和 DBI/odbc
,但是当我使用 dplyr
时,它就会出现这个错误。
数据库中的其他 tables 与 dplyr
一起工作正常,所以它一定与这个特定的 table 有关。更糟糕的是,我不知道为什么。
我在使用 Sybase 时遇到了非常相似的问题。结果证明我的问题与 odbc
或 DBI
包完全无关。
我的解决方案是确保我使用的是支持 8 字节 SQLLEN 数据类型的 ODBC 驱动程序。在 Linux 运行 命令 odbcinst -j
上显示 SQLLEN 大小是 8 对于我在 RHEL Server 7.5 64- 上安装的 unixODBC 版本 2.3.1 运行少量。
默认情况下,Sybase 驱动程序符号链接到 4 字节版本。按照下面的说明,我确保链接到 8 字节版本并且我的问题得到解决。奇怪的是,我在通过 isql
发出命令时从未遇到过这些问题,但是......也许这适用于带有 SQL 服务器的@robertmc。
也在相关的 GitHub 问题之一中发布了此内容: https://github.com/r-dbi/odbc/issues/174#issuecomment-403106647