簡體   English   中英

如何使用R和dplyr連接來自不同SQL數據庫的表?

[英]How to join tables from different SQL databases using R and dplyr?

我使用的是dplyr (0.7.0)dbplyr (1.0.0)DBI 0.6-1odbc (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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM