我想获得一个由我的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,但是没有关于何时数据来自多个来源的信息。