当使用dplyr
包来操作数据库中的表时,它会创建一个可以通过show_query
函数查看的sql语句。除非您调用head
,compute
,collect
或collapse
,否则不会执行此sql语句。在某些情况下,dplyr
生成的sql语句比它的执行更重要(例如:为某些数据库包中尚未实现的操作创建函数,如copy (subquery) into file_name;
)
我想知道:如何获取dplyr
创建的sql并将其放入字符串中?
好。查看dbplyr
源代码,我发现dbplyr::sql_render
返回表sql语句,可用于复合另一个sql:
sql_query = dbplyr::sql_render(tbl_table)
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="")