2017-06-22 25 views
3

我使用dplyr (0.7.0),dbplyr (1.0.0),DBI 0.6-1odbc (1.0.1.9000)。我想這樣做如下:如何使用R和dplyr從不同的SQL數據庫連接表?

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) 

但有輸出或錯誤信息沒有變化。在同一臺服務器上是否有不同的方式來連接不同數據庫中的表?

+1

您可以使用'dbplyr :: collect()'強制/從每個數據庫提取數據,然後在本地R實例中進行加入。這表明你應該在'collect()'調用之前進行過濾和基本選擇,以避免過度拉取數據。 – r2evans

+1

我的備份計劃是拉入兩組數據,然後在R中進行本地連接。問題是,有時數據集非常大,我想在使用一個單獨的數據庫中的列時過濾結果,然後再拉入數據在本地。 –

+0

坦率地說,像這樣進行多DBMS連接/過濾在任何語言中都很難(除了使用外鍵的本地SQL等)。如果您提供來自每個表格的代表性樣本數據(即代表最小但足夠的可變性),我們可能會提供幫助,但我認爲您將被卡住從至少一個DBMS拉取大量數據。 – r2evans

回答

0

我會使用merge()函數來執行表中的左連接。這將是像​​。

+2

我不相信'merge()'能夠像''''''''''''''一樣使用dbplyr和數據庫連接。 –

0

我面臨同樣的問題,我無法用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%>% ...

希望它能幫助。

相關問題