Скажем, у меня открыт удаленный tbl с использованием dbplyr, и я хочу использовать SQL-запрос к нему (возможно, потому что нет перевода dbplyr для того, что я хочу сделать), как мне дать его так, чтобы он возвращал удаленный tblobject?
Функция DBI::dbGetQuery()
позволяет вам отправлять запрос в db, но возвращает фрейм данных в памяти, а не удаленный объект tbl.
Например, скажем, вы ужеЕсли у вас есть соединение con
, открытое для БД, вы можете создать таблицу, подобную этой:
library(tidyverse)
x_df <- expand.grid(A = c('a','b','c'), B = c('d','e','f', 'g','h')) %>%
mutate(C = round(rnorm(15), 2))
DBI::dbWriteTable(conn = con,
name = "x_tbl",
value = x_df,
overwrite = TRUE)
x_tbl = tbl(con, 'x_tbl')
sql_query <- build_sql('SELECT a, b, c, avg(c) OVER (PARTITION BY a) AS mean_c FROM x_tbl')
y_df <- DBI::dbGetQuery(con, sql_query) # This returns a data frame on memory
y_tbl <- x_tbl %>%
group_by(a) %>%
mutate(mean_c = mean(c))
show_query(y_tbl) # This is a remote tbl object
В этом случае я мог бы просто использовать y_tbl
.Но есть случаи, когда функция не была переведена на dbplyr (например, квантиль не работает), и мне нужно использовать код SQL.Но я не хочу собирать результат, я хочу, чтобы он создал удаленный объект TBL.Есть ли способ, которым я могу дать SQL-запрос (например, с dbGetQuery()
), но он возвращает удаленную таблицу?
Спасибо