私はdplyr (0.7.0)
,dbplyr (1.0.0)
,DBI 0.6-1
およびodbc (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
を使用すると、コードが別のデータベースを考慮に入れずに2つのテーブルを結合するSQLクエリを作成しようとしているようです。
x <- tbl(db1, "Table1") %>%
dplyr::left_join(tbl(db2, "Table2"), by = "JoinColumn", copy = TRUE)
をしかし出力またはエラーメッセージの変更はありません。dplyr::left_join
のドキュメントごとに、私も試してみました。同じサーバー上の別々のデータベースからテーブルを結合する別の方法はありますか?
'dbplyr :: collect()'を使用して、各データベースからデータを強制的に取り込み、ローカルRインスタンスで結合することができます。これは、データを過度にプルしないために、 'collect()'コールの前にフィルタリングと基本選択を行うべきであることを示唆しています。 – r2evans
私のバックアップ計画では、両方のデータセットをプルインし、Rでローカルに結合します。問題は、データセットが非常に大きく、別のデータベースの列を使用して結果をフィルタリングしたい場合ですデータはローカルに格納されます。 –
正直言って、このようなマルチDBMSの結合/フィルタリングは、(foreign keyを持つネイティブSQL以外の)どの言語でも難しいです。各テーブルから代表的なサンプルデータを提供する場合(つまり、最小限ではあるが十分な変動性を表す場合)、私たちは助けてくれるかもしれませんが、少なくとも1つのDBMSから多くのデータを取得しようとしていると思います。 – r2evans