从 dbplyr 中的给定 SQL 查询开始使用 dbplyr

Posted

技术标签:

【中文标题】从 dbplyr 中的给定 SQL 查询开始使用 dbplyr【英文标题】:Using dbplyr starting from a given SQL query in dbplyr 【发布时间】:2020-11-18 15:26:28 【问题描述】:

我有一个相当长且复杂的查询,我将其用作进行一些分析的起点。我已经使用 dbplyr 从头开始​​复制了那个,因此我可以使用 dplyr 动词而无需将数据库放入内存。如何在不使用 dbplyr 复制起始查询的情况下实现这一点?

【问题讨论】:

您是否在寻求一种将 SQL 自动转换为 dplyr 的方法(以便 dbplyr 可以将其转换回 SQL)?一个例子会有所帮助。 【参考方案1】:

看看this的回答。它为 dbplyr 表显式设置 SQL 查询。您可以使用相同的想法:

# read file containing existing query
start_query = your_favorite_way_to_read_file_here(file_name)

# create connection
con = DBI::dbConnect(...)

# initial table
my_table = tbl(con, sql(start_query))

要验证它是否按预期工作,请尝试 show_query(my_table)head(my_table)

请注意,dbplyr 不会将 dplyr 转换为高度优化的查询。因此,如果您的初始查询复杂/运行缓慢,则通过 dbplyr 添加进一步操作可能会表现不佳。在这种情况下,最好将复杂的查询写入另一个表。

【讨论】:

"通过dbplyr 添加进一步的操作可能会表现不佳。"确实! “将复杂查询写入另一个表”的一种方法是将%>% compute() 附加到创建my_table 的行的末尾。

以上是关于从 dbplyr 中的给定 SQL 查询开始使用 dbplyr的主要内容,如果未能解决你的问题,请参考以下文章

dbplyr:从数据库中的表中删除行

如何在没有数据库连接的情况下从 dbplyr 生成 SQL?

通过 dbplyr/bigRquery 将 summarise() 调用中的分位数返回到 BigQuery SQL 数据库

如何将 R 会话中的值替换为 SQL 绑定变量占位符?

将 purrr::map2() 与 dbplyr 一起使用

选择数组包含 bigquery 中多个值之一的行(最好使用 dbplyr)