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

6

我目前可以通过beeline CLI访问Apache Hive数据库。我们正在与IT商议将R安装在服务器上。在此期间,我想要 (滥用)R dbplyr包在另一台机器上生成SQL查询语句,将它们复制过来,并作为原始SQL运行。在以前,我使用过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() 

有没有一种方法可以建立这个“dummy”连接?而且,是否可以以这样的方式执行,以便我可以指定SQL的变量?


1
为什么不尝试使用sqldf包来进行实践性的sql查询呢? - MKR
我更熟悉dplyrdbplyr,不太想写SQL,这也是这里的重点。除非我误解了你的意思。你是不是想让我使用sqldf来创建一个模拟数据库,就像在sqlite中一样? - steveo'america
这可能会有所帮助:https://cran.r-project.org/web/packages/dbplyr/vignettes/sql-translation.html - moodymudskipper
1个回答

5

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

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

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

data("diamonds")

dbWriteTable(con, "diamonds", diamonds)

使用内存中的SQL数据库和数据库连接,您应该能够(滥用)dbplyr连接到数据库,让R为您编写SQL。
这只是SQLite而不是Hive。但希望它仍然可以加速从R到SQLite再到Hive(或您首选的SQL版本)。
还请参阅以下链接:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接