如何使用dbplyr在Oracle临时表中存储查询而不在本地存储数据?

时间:2018-04-03 17:09:27

标签: r oracle dplyr roracle dbplyr

我有一个我查询的数据集太大而无法存储在我的个人计算机上。我想使用dbplyr将数据存储在临时表中,但我在尝试执行此操作时遇到了问题。

这是我的代码:

{
    "presets": [
        "env",
        "react"
    ],
    "plugins": [
        "transform-object-rest-spread",
        "transform-class-properties",
        "transform-regenerator"
    ]
}

此代码给出了以下错误消息:

library("ROracle")
library("dplyr")

## Let dbplyr know that we're in an Oracle environment
sql_translate_env.OraConnection <- dbplyr:::sql_translate_env.Oracle
sql_select.OraConnection <- dbplyr:::sql_select.Oracle
sql_subquery.OraConnection <- dbplyr:::sql_subquery.Oracle

## Connect to database
drv = dbDriver("Oracle")
host = "myHost"
port = 1521
sid = "myServerName"
connect.string = paste(
  "(DESCRIPTION=",
  "(ADDRESS=(PROTOCOL=tcp)(HOST=", host, ")(PORT=", port, "))",
  "(CONNECT_DATA=(SID=", sid, ")))", sep = "")
con = dbConnect(drv, username="myUsername", password="myPassword", dbname=connect.string)

## Create the query
remote = tbl(con, "myTable") %>%
  filter(GRP_ID == 12345)

## Attempt to run the query and store it in a temporary table, but this fails!
compute(remote)

是否有人能够使用Oracle数据库和dbplyr完成此任务,如果是这样,您能否分享一下如何使用它?

2 个答案:

答案 0 :(得分:1)

最新版本的dbplyr会自动识别ROracle个关联,并将其翻译重新路由到我们的Oracle翻译,因此您无需使用此处的解决方法升级后的代码顶部。此外,copy_to()命令将用于缓存查询结果而无需下载数据。 copy_to()命令足够聪明,可以知道它何时被传递数据帧进行上传,或者需要缓存的SQL语句。

答案 1 :(得分:0)

我在 dbplyr 存储库中为此提交了 an issue。感谢链接拉取请求的 mgirlich,它应该很快得到纠正。