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

Posted

技术标签:

【中文标题】如何在没有数据库连接的情况下从 dbplyr 生成 SQL?【英文标题】:how to generate SQL from dbplyr without a database connection? 【发布时间】:2018-03-02 22:14:04 【问题描述】:

我目前可以通过 beeline CLI 访问 Apache Hive 数据库。我们仍在与 IT 部门协商以在服务器上获取R。在那之前,我想(ab)使用 R dbplyr 包在另一台机器上生成 SQL 查询,复制它们,然后将它们作为原始 SQL 运行。我过去在dbplyr 中使用过sql_render,在我有一个有效的数据库连接的情况下,但我不知道如何在没有有效数据库连接的情况下执行此操作。对我来说,理想的情况是这样的:

con <- dummy_connection('hive')   # this does not exist, I think
qry <- tbl(con,'mytable') %>%     # complex logic to build a query
  select(var1,var2) %>%
  filter(var1 > 0)   # etc...
sql_render(qry) %>%               # cat it to a file to be used on another machine.
  as.character() %>%
  cat() 

有没有办法建立这种“虚拟”连接?并且可以以我可以指定 SQL 变体的方式完成吗?

【问题讨论】:

你为什么不试试sqldf 包来进行sql 查询? 我对@9​​87654331@和dbplyr比较熟悉,宁愿不写SQL,这才是重点。除非我误解了你。你的意思是我应该使用sqldf 来创建一个模型数据库,就像在 sqlite 中一样? 这可能会有所帮助:cran.r-project.org/web/packages/dbplyr/vignettes/… 【参考方案1】:

您可以仅使用 R 生成内存中的 SQLite 数据库:

library(DBI)
library(odbc)
library(RSQLite)
library(tidyverse)
library(dbplyr)

con <- dbConnect(RSQLite::SQLite(), ":memory:")

data("diamonds")

dbWriteTable(con, "diamonds", diamonds)

使用内存中的 SQL 数据库和数据库连接,您应该能够(ab)使用 dbplyr 连接到数据库来让 R 为您编写 SQL。

这只是 SQLite,而不是 Hive。但希望它仍然是从 R 到 SQLite 再到 Hive(或您喜欢的 SQL 版本)的加速器。

另见以下链接:

SQLite vingette Bradley's demo(以上代码来源)

【讨论】:

以上是关于如何在没有数据库连接的情况下从 dbplyr 生成 SQL?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有互联网连接的情况下从位置获取地址

如何在没有浏览器运行的情况下从php生成pdf?

如何在不使用 sudo 的情况下从终端窗口关闭 Internet 连接?

如何在没有互联网的情况下从多个设备到单个设备进行通信[关闭]

如何在这种情况下从多个csv文件读取数据并生成报告?

是否可以在没有原始 .fla 的情况下从 documentClass 文件 (.as) 生成 SWF?