Соединения dplyr между различными источниками данных выполняются на стороне базы данных или локально? - PullRequest
0 голосов
/ 13 июня 2019

Я хотел бы получить список запросов, отправленных в базу данных моим 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 , но нет информации о том, когда данные поступают из нескольких источников.

...