如何在字符串中捕获dplyr查询

问题描述 投票:6回答:2

当使用dplyr包来操作数据库中的表时,它会创建一个可以通过show_query函数查看的sql语句。除非您调用headcomputecollectcollapse,否则不会执行此sql语句。在某些情况下,dplyr生成的sql语句比它的执行更重要(例如:为某些数据库包中尚未实现的操作创建函数,如copy (subquery) into file_name;

我想知道:如何获取dplyr创建的sql并将其放入字符串中?

r dplyr
2个回答
8
投票

好。查看dbplyr源代码,我发现dbplyr::sql_render返回表sql语句,可用于复合另一个sql:

sql_query = dbplyr::sql_render(tbl_table)

2
投票

show_query()输出由dplyr生成的sql查询作为诊断消息。如果对象res是使用dplyr进行sql查询的结果,则可以使用capture.output()提取sql查询并将其强制转换为字符向量。查询的每个新行都存储为output向量中的元素,因此可以使用paste(tail(output, -1),collapse="")将结果作为长度一个字符向量,如您所愿。 (我正在删除最终输出的输出向量的第一个元素,因为它似乎只是不必要的标记“”。)

## Capture 
output <- capture.output(res %>% show_query(), type="message")
## Concatenate character vector to a one length character vector
final_output <- paste(tail(output, -1), collapse="")
© www.soinside.com 2019 - 2024. All rights reserved.