Apache Beam:使用BigQueryio更新BigQuery Table Row



我们使用以下代码将记录写入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或正常更新....

最新更新