错误:BigQuery不支持临时表

问题描述

我试图将来自同一项目中两个不同数据集的表联接起来。我该怎么办?

    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 documentationhttps://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在表中包含数据集名称。很难确定是否不了解您的数据库结构。