【发布时间】:2017-06-22 15:26:29
【问题描述】:
我正在使用dplyr (0.7.0)、dbplyr (1.0.0)、DBI 0.6-1 和 odbc (1.0.1.9000)。我想做类似以下的事情:
db1 <- DBI::dbConnect(
odbc::odbc(),
Driver = "SQL Server",
Server = "MyServer",
Database = "DB1"
)
db2 <- DBI::dbConnect(
odbc::odbc(),
Driver = "SQL Server",
Server = "MyServer",
Database = "DB2"
)
x <- tbl(db1, "Table1") %>%
dplyr::left_join(tbl(db2, "Table2"), by = "JoinColumn")
但我不断收到一个似乎没有任何实质内容的错误。当我使用show_query 时,似乎代码正在尝试创建一个连接两个表的 SQL 查询,而不考虑单独的数据库。根据dplyr::left_join 的文档,我也尝试过:
x <- tbl(db1, "Table1") %>%
dplyr::left_join(tbl(db2, "Table2"), by = "JoinColumn", copy = TRUE)
但输出或错误消息没有变化。是否有不同的方法可以在同一台服务器上连接来自不同数据库的表?
【问题讨论】:
-
您可以使用
dbplyr::collect()从每个数据库中强制/拉取数据,然后在本地 R 实例中进行连接。这建议您应该在调用collect()之前进行过滤和基本选择,以免过度拉取数据。 -
我的备份计划是拉入两组数据,然后在 R 中进行本地连接。问题是有时数据集非常大,我想使用来自的列过滤结果在本地拉入数据之前,一个单独的数据库。
-
坦率地说,像这样的多 DBMS 连接/过滤在任何语言中都很难(除了带有外键的原生 SQL 等)。如果您提供来自每个表的代表性样本数据(即,最小但足够的可变性来表示),我们可能会提供帮助,但我认为您将无法从至少一个 DBMS 中提取大量数据。
标签: sql-server r dplyr dbplyr