Я хотел бы получить список запросов, отправленных в базу данных моим R-сценарием, но мне немного неясно, как / где выполняются некоторые операции с локальными кадрами данных и таблицами базы данных.
Как упомянуто в этого поста , кажется, что при выполнении операции между фреймом данных в локальной среде env и таблицей из соединения DBI (например, left_join(... ,copy=TRUE)
), - copy = ИСТИНА необходима, потому что данные поступают из разных источников данных - операции выполняются на стороне базы данных, работая с временными таблицами.
Я попытался проверить это с помощью 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 , но нет информации о том, когда данные поступают из нескольких источников.