我们使用以下代码将记录写入BigQuery:
BigQueryIO.writeTableRows()
.to("table")
.withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED)
.withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND)
.withSchema(schema);
使用此代码,当我们进行回填时,一些记录再次发送到此数据流,从而在BigQuery表中产生重复。有什么方法可以根据数据流中的字段名称配置upsert
操作?
我有一个非常相似的用例从此视图查询。
BigQuery重复数据删除和分区表是一个很好的参考。如https://wecode.wepay.com/posts/bigquery-wepay
本质上,您需要确保拥有某种last_updated列,以及一个唯一标识该行的ID列。然后,您可以创建一个视图,该视图获取每个ID的最新版本的所有数据。由于您正在查询视图,因此可能会有一些小小的性能损失,但我们发现它可以忽略不计。
这仍然是Bigqueryio作家的差距...似乎是一个主要限制,大多数工作负载每天晚上都会加载更多的数据,但是在任何给定的夜晚都可能需要重新运行该设置。永远不要截断整个表格,但是也许只是截断了运行/集合的键是可以的,然后附加实际更新。因此,理想情况下,有一些truncate_key_set或正常更新....