首页 > 解决方案 > 将数据推送到 BigQuery 中的现有表

问题描述

我正在使用 Java 和 SQL 将数据推送到 BigQuery 中的时间戳分区表。在我的代码中,我指定了目标表:

.setDestinationTable(TableId.of("MyDataset", "MyTable"))

当我运行它时,它会完美地创建一个表。但是,当我尝试插入新数据时,它会抛出 BigQueryException 声称该表已存在:

Exception in thread "main" com.google.cloud.bigquery.BigQueryException: 
Already Exists: Table MyProject:MyDataset.MyTable

标签: javasqlgoogle-bigquery

解决方案


经过一些文档挖掘后,我找到了一个可行的解决方案:

.setWriteDisposition(WriteDisposition.WRITE_APPEND)

添加上述内容会附加任何数据(即使它是重复的)。我不确定为什么 .setDestinationTable() 的默认设置等同于 WRITE_EMPTY,它会返回重复错误。.setDestinationTable() 的谷歌文档是:

描述应存储查询结果的表。如果不存在,将创建一个新表来存储结果。

文档可能应该澄清默认值。


推荐阅读