将dplyr管道转换为SQL字符串

时间:2020-02-25 15:09:10

标签: r dplyr dbplyr

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

2 个答案:

答案 0 :(得分:3)

您可以捕获输出:

df.groupby((df["Change"] == 1).cumsum()).cumcount()

**CriteriaBuilder cbr = session_hiber.getCriteriaBuilder();
cbr.selectCase()
.when(cbr.equal(path.get("status"), "A"), "Login Allowed")
.otherwise("Enable the Login Status")
.alias("UserLoginStatus");**

答案 1 :(得分:1)

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

library(dbplyr)

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