将 dplyr 管道转换为 SQL 字符串

Convert dplyr pipeline into SQL string

我想将(短)dplyr 管道转换为其等效 SQL 的字符串表示形式。例如:

library(dplyr)
dbplyr::lazy_frame() %>% filter(foo == 'bar')

基本上会打印出我要查找的内容,即:

<SQL>
SELECT *
FROM `df`
WHERE (`foo` = 'bar')

问题是这只是 打印 出来的。特别是我不知道如何将它分配给一个字符串。我试过附加 %>% show_query() 但我相信结果相同(即显示查询而不是转换为字符串)。附加 %>% as.character() 确实会产生一些东西,但它不是 SQL(它是一个字符向量,其第一个元素是 "list(name = \"filter\", x = list(x = list(), vars = character(0)), dots = list(~foo == \"bar\"), args = list())")。

您可以捕获输出:

library(dplyr)
x<-capture.output(dbplyr::lazy_frame() %>% filter(foo == 'bar'))
x
[1] "<SQL>"                 "SELECT *"              "FROM `df`"             "WHERE (`foo` = 'bar')"

dbplyr::lazy_frame() %>% filter(foo == 'bar')%>%capture.output

使用 remote_query 得到一个 c("sql", "character"),然后将其转换为 character

library(dbplyr)

lazy_frame() %>%
  filter(foo == 'bar') %>%
  remote_query %>%
  as.character
## [1] "SELECT *\nFROM `df`\nWHERE (`foo` = 'bar')"