问题描述
我试图将来自同一项目中两个不同数据集的表联接起来。我该怎么办?
library(tidyverse)
library(bigrquery)
con1 <-
bConnect(
drv = bigrquery::bigquery(),project = PROJECT,dataset = "dataset_1"
)
con2 <-
bConnect(
drv = bigrquery::bigquery(),dataset = "dataset_2"
)
A <- con1 %>% tbl("A")
B <- con2 %>% tbl("B")
inner_join(A,B,by = "key",copy = T) %>%
collect()
然后我得到错误:Error: BigQuery does not support temporary tables
解决方法
问题很可能是您使用不同的连接来连接两个表。尝试执行此操作时,R尝试将数据从一个源复制到另一个源上的临时表中。
请参见this question中的this documentation和https://caiorss.github.io/C-Cpp-Notes/compiler-flags-options.html中的copy
参数(其包装不同,但原理相同)。
解决方案是仅对所有表使用单个连接。像这样:
con <-
bConnect(
drv = bigrquery::bigquery(),project = PROJECT,dataset = "dataset_1"
)
A <- con %>% tbl("A")
B <- con %>% tbl("B")
inner_join(A,B,by = "key") %>%
collect()
在连接到远程表时,您可能需要在连接字符串中将dataset
参数保留为空白,或使用in_schema
在表中包含数据集名称。很难确定是否不了解您的数据库结构。