Изменить запрос к базе данных dplyr
Я использую dplyr для выполнения запроса Redshift через соединение с базой данных src
, lag
В Redshift работает немного по-другому (см. https://github.com/tidyverse/dplyr/issues/962), поэтому мне интересно, можно ли изменить запрос, сгенерированный из цепочки dplyr, чтобы удалить третий параметр (NULL
) в LAG
, Пример:
res <- tbl(src, 'table_name') %>%
group_by(groupid) %>%
filter(value != lag(value)) %>%
collect()
дает
Error in postgresqlExecStatement(conn, statement, ...) :
RS-DBI driver: (could not Retrieve the result : ERROR: Default
parameter not be supported for window function lag)
Я вижу переведенный sql:
translated <- dbplyr::translate_sql(
tbl(src, 'table_name') %>%
group_by(groupid) %>%
filter(value != lag(value)) %>%
collect()
)
# <SQL> COLLECT(FILTER(GROUP_BY(TBL("src", 'table_name'), "groupid"), "value" != LAG("value", 1, NULL) OVER ()))
И я могу изменить его, чтобы удалить NULL
Параметр, который, я думаю, решит проблему:
sub("(LAG\\(.*), NULL), "\\1", translated)
# <SQL> COLLECT(FILTER(GROUP_BY(TBL("src", 'table_name'), "groupid"), "value" != LAG("value", 1) OVER ()))
Как я могу выполнить этот измененный запрос?
1 ответ
Вы должны быть в состоянии использоватьDBI::dbGetQuery(con, sub("(LAG\\(.*), NULL), "\\1", translated))
запустить новый запрос.