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

标签 sql r database hive dbplyr

我目前可以通过 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 变体的方式完成?

最佳答案

您可以仅使用 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 版本)的加速器。

另请参阅以下链接:

关于sql - 如何在没有数据库连接的情况下从 dbplyr 生成 SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49078185/

相关文章:

sql - 如何获取点击前的点击次数?

sql - 如果更新值为空,则不更新列

r - 在 R 中,按具有客队和主队的体育数据分组 - 一个常见的挫败感

r - ggplot2 在直方图中查找计数最大值

database - 插入 ORM 数据固定装置

ruby - 如何处理 'lock' 数据库行

php - Ajax 读取数据库

php - MySQL连接表一对多关系

r - R中两个3D点之间的距离

java - 在 JDBC 中,何时使用时间、日期和时间戳