首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用dbplyr连接跨数据库

使用dbplyr连接跨数据库
EN

Stack Overflow用户
提问于 2018-05-14 09:31:28
回答 2查看 3.1K关注 0票数 3

我正在使用dbplyr处理数据库表。

我有一个本地表,并希望将它与数据库中的一个大(150 m行)表连接起来。

数据库PRODUCTION是只读的

代码语言:javascript
复制
# Set up the connection and point to the table

library(odbc); library(dbplyr)    

my_conn_string <- paste("Driver={Teradata};DBCName=teradata2690;DATABASE=PRODUCTION;UID=",
                            t2690_username,";PWD=",t2690_password, sep="")

t2690 <- dbConnect(odbc::odbc(), .connection_string=my_conn_string)

order_line <- tbl(t2690, "order_line") #150m rows

我还有一张本地的桌子,我们就叫它订单吧

代码语言:javascript
复制
# fill df with random data

orders <- data.frame(matrix(rexp(50), nrow = 100000, ncol = 5))

names(orders) <- c("customer_id", paste0(rep("variable_", 4), 1:4))

假设我想加入这两个表,我得到以下错误:

代码语言:javascript
复制
complete_orders <- orders %>% left_join(order_line)

> Error: `x` and `y` must share the same src, set `copy` = TRUE (may be slow)

问题是,如果我设置copy = TRUE,它将尝试下载整个order_line,而我的计算机将很快耗尽内存。

另一种选择可以是将orders表上载到数据库。这里的问题是,PRODUCTION数据库是只读的-我将不得不上传到另一个数据库。试图在dbplyr中跨数据库进行复制会导致相同的错误。

我找到的唯一解决方案是上传到可写数据库并使用sql连接它们,这是远远不够理想的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-22 08:19:33

我已经找到了答案,您可以使用tbl指针中的in_schema()函数在同一连接中跨模式工作。

代码语言:javascript
复制
# Connect without specifying a database
my_conn_string <- paste("Driver={Teradata};DBCName=teradata2690;UID=",
                            t2690_username,";PWD=",t2690_password, sep="")    

# Upload the local table to the TEMP db then point to it
orders <- tbl(t2690, in_schema("TEMP", "orders"))

order_line <-  tbl(t2690, in_schema("PRODUCTION", "order_line"))

complete_orders <- orders %>% left_join(order_line)
票数 4
EN

Stack Overflow用户

发布于 2021-06-17 14:20:55

另一种选择可以是将orders表上载到数据库。这里的问题是,PRODUCTION数据库是只读的-我将不得不上传到另一个数据库。试图在dbplyr中跨数据库进行复制会导致相同的错误。

在您的用例中,似乎(基于公认的答案)您的数据库位于同一台服务器上,这只是一个使用in_schema的问题。如果不是这样的话,另一种方法就是给定here,它实际上提供了一个在只读连接上工作的copy_to版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50327140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档