我正在使用 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 ()))
如何执行此修改后的查询?