Изменить запрос к базе данных 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)) запустить новый запрос.

Другие вопросы по тегам