如何使用 dbplyr 在 Oracle 临时 table 中存储查询而不在本地存储数据?
How to use dbplyr to store a query in an Oracle temporary table without ever storing the data locally?
我要查询的数据集太大,无法存储在我的个人计算机上。我想使用 dbplyr 将数据存储在临时 table 中,但我 运行 遇到了尝试执行此操作的问题。
这是我的代码:
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)
这段代码给我以下错误信息:
Error in .oci.SendQuery(conn, statement, data = data, prefetch = prefetch, :
ORA-14459: missing GLOBAL keyword
有没有人能够使用 Oracle 数据库和 dbplyr 完成这项任务,如果是,能否请您分享一下您是如何让它工作的?
最新版本的 dbplyr
自动识别 ROracle
连接并将其翻译重新路由到我们的 Oracle 翻译,因此您无需在代码顶部使用解决方法升级后不再。此外,copy_to()
命令可用于缓存查询结果而无需下载数据。 copy_to()
命令足够智能,可以知道何时将数据帧传递给它以上传,或者需要缓存的 SQL 语句。
我在 dbplyr 存储库中为此提交了 an issue。感谢 mgirlich 链接了一个 pull request,它应该很快被更正。
我要查询的数据集太大,无法存储在我的个人计算机上。我想使用 dbplyr 将数据存储在临时 table 中,但我 运行 遇到了尝试执行此操作的问题。
这是我的代码:
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)
这段代码给我以下错误信息:
Error in .oci.SendQuery(conn, statement, data = data, prefetch = prefetch, :
ORA-14459: missing GLOBAL keyword
有没有人能够使用 Oracle 数据库和 dbplyr 完成这项任务,如果是,能否请您分享一下您是如何让它工作的?
最新版本的 dbplyr
自动识别 ROracle
连接并将其翻译重新路由到我们的 Oracle 翻译,因此您无需在代码顶部使用解决方法升级后不再。此外,copy_to()
命令可用于缓存查询结果而无需下载数据。 copy_to()
命令足够智能,可以知道何时将数据帧传递给它以上传,或者需要缓存的 SQL 语句。
我在 dbplyr 存储库中为此提交了 an issue。感谢 mgirlich 链接了一个 pull request,它应该很快被更正。