首页 > 解决方案 > 错误:BigQuery 不支持临时表

问题描述

我正在尝试在同一个项目中连接来自两个不同数据集的表。我怎样才能做到这一点?

    library(tidyverse)
    library(bigrquery)
    
    con1 <- 
      bConnect(
        drv = bigrquery::bigquery(),
        project = PROJECT,
        dataset = "dataset_1"
      )
    con2 <- 
      bConnect(
        drv = bigrquery::bigquery(),
        project = PROJECT,
        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

标签: rdplyrgoogle-bigquerydbibigrquery

解决方案


问题很可能是您使用不同的连接来连接这两个表。当您尝试这样做时,R 会尝试将数据从一个源复制到另一个源上的临时表中。

请参阅此问题本文档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在连接到远程表时将数据集名称与表一起包含在内。如果不了解更多关于数据库结构的信息,就很难确定。


推荐阅读