[英]How to join tables from different SQL databases using R and dplyr?
我使用的是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)
但輸出或錯誤消息沒有變化。 是否有不同的方法從同一服務器上的不同數據庫連接表?
我假設您提供的代碼(a)您有興趣在運行collect()
之前通過dplyr
的語法加入兩個tbl
對象並將結果拉入本地內存並且(b)您想要引用直接調用tbl()
的數據庫對象。
如果您想利用dplyr
以編程方式構建查詢邏輯,同時利用數據庫服務器將大量數據下載到您感興趣的集合中,這些選擇很重要。(或者至少這就是為什么我在這里結束了。)
我找到的解決方案使用一個連接而不指定數據庫,並使用in_schema()
數據庫和架構信息(我無法在任何地方找到此文檔或in_schema()
暈):
conn <- DBI::dbConnect(
odbc::odbc(),
Driver = "SQL Server",
Server = "MyServer"
)
x <- tbl(src_dbi(conn),
in_schema("DB1.dbo", "Table1")) %>%
dplyr::left_join(tbl(src_dbi(conn),
in_schema("DB1.dbo", "Table2")),
by = "JoinColumn")
我會使用merge()
函數來執行表上的左連接。 它將類似於x <- merge(df1, df2, by = "JoinColumn", all.x = TRUE)
。
我遇到了同樣的問題,我無法用dplyr :: left_join解決它。
至少我能夠使用以下解決方法完成這項工作。 我連接到SQL Server而沒有聲明默認數據庫,然后我用sql()運行查詢。
con <- dbConnect(odbc::odbc(), dsn="DWH" , uid="", pwd= "" )
data_db <- tbl( con, sql("SELECT *
FROM DB1..Table1 AS a
LEFT JOIN DB2..Table2 AS b ON a.JoinColumn = b.JoinColumn") )
data_db%>%...
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.