将 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')"
我想将(短)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')"