是在数据库端还是在本地执行不同数据源之间的dplyr连接?

时间:2019-06-13 07:55:17

标签: r dplyr dbi

我想获得一个由我的R脚本发送到数据库的查询的列表,但是我不清楚如何/在何处执行某些涉及本地数据帧和数据库表的操作。

this post中所述,似乎在执行本地环境中的数据帧与来自DBI连接的表(例如left_join(... ,copy=TRUE))之间的操作时,-copy = TRUE之所以需要这样做,是因为数据来自不同的数据源-这些操作是在数据库端执行的,使用临时表。

我尝试使用show_query()进行验证,以查看发送到数据库的内容和未发送到数据库的内容。

由于涉及数据库连接,我无法给出适当的可复制示例,但这是逻辑:

con <- DBI::dbConnect(odbc::odbc(),
                      Driver   = "SQL Server",
                      Server   = "server",
                      Database = "database",
                      UID      = "user",
                      PWD      = "pwd",
                      Port     = port)

db_table <- tbl(con, "tbl_A")

local_df <- read.csv("/.../file.csv",stringsAsFactors = FALSE)

q1 <- local_df %>% inner_join(db_table ,by=c('id'='id'),copy=TRUE) 

下面是show_query()语句的输出:

> db_table %>% show_query()
<SQL>
SELECT *
FROM "tbl_A"

q1 %>% show_query()

Error in UseMethod("show_query") : 
  no applicable method for 'show_query' applied to an object of class "data.frame"

这使我认为按此顺序,在数据库侧执行的唯一操作是SELECT * FROM "tbl_A",而q1是使用local_df和数据库表的本地副本在本地环境上执行的。

我试图看一下dplyr documentation,但是没有关于何时数据来自多个来源的信息。

0 个答案:

没有答案