假设我有一个使用 dbplyr 打开的远程 tbl,并且我想对其使用 SQL 查询(可能是因为没有 dbplyr 翻译来实现我想要做的事情),我该如何给它返回一个远程 tbl 对象?
The 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()
)但是它返回一个远程表吗?
谢谢