错误:BigQuery 不支持临时表

Posted

技术标签:

【中文标题】错误:BigQuery 不支持临时表【英文标题】:Error: BigQuery does not support temporary tables 【发布时间】:2020-09-11 01:27:15 【问题描述】:

我正在尝试连接来自同一项目中两个不同数据集的表。我该怎么做?

    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

【问题讨论】:

【参考方案1】:

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

见this question和this documentation中的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 将数据集名称与表一起包含在内。如果不了解更多有关数据库结构的信息,就很难确定。

【讨论】:

谢谢。将dataset 留空并在工作表中指定它们。喜欢tbl("dataset_1.A")tbl("dataset_2.B")

以上是关于错误:BigQuery 不支持临时表的主要内容,如果未能解决你的问题,请参考以下文章

使用 Java 从 BigQuery 到 BigQuery 表的表复制中的 JSON 解析错误

是否可以在内存中本地创建和运行 bigquery 临时表?

如何使用 API 在 BigQuery 中获取临时表的名称

BigQuery Storage API 无法读取由有序 (ORDER BY) 查询创建的临时表

对 BigQuery 表实施唯一约束

Redshift 错误:关系“临时表”不存在