java - 将数据推送到 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
解决方案
经过一些文档挖掘后,我找到了一个可行的解决方案:
.setWriteDisposition(WriteDisposition.WRITE_APPEND)
添加上述内容会附加任何数据(即使它是重复的)。我不确定为什么 .setDestinationTable() 的默认设置等同于 WRITE_EMPTY,它会返回重复错误。.setDestinationTable() 的谷歌文档是:
描述应存储查询结果的表。如果不存在,将创建一个新表来存储结果。
文档可能应该澄清默认值。
推荐阅读
- powerbi - Microsoft Power BI:RANKX 和结果聚合
- typescript - 如何声明具有可变数量属性的 TypeScript 接口?
- python - 如何在特定索引后将数字附加到 txt 文件
- unity3d - AR Foundation 4.0.2 使用 Unity2019.3 更新问题 TestCameraImage
- azure - Azure IoT 中心 - 如果在 IoT 中心设置了路由,则 IoTHubTrigger Azure 函数不会执行
- c - 在 C 中调用 abort() 时如何指定消息?
- google-bigquery - 使用 gmail 日志和 BQ 审核 SMTP 中继中的条目
- python - 我可以在转换为 dict 时省略的数据类中的可选参数吗?
- python - 预期输入 batch_size (32) 与目标 batch_size (19840) BERT 分类器匹配
- cassandra - Cassandra 环境设置中的 replace_address first_boot 与 replace_address 有什么不同?