从 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 生成 SQL?
通过 dbplyr/bigRquery 将 summarise() 调用中的分位数返回到 BigQuery SQL 数据库