Apache Beam:使用BigQueryIO更新BigQuery表行

Dar*_*hta 4 google-bigquery google-cloud-platform google-cloud-dataflow

我们正在使用以下代码将记录写入BigQuery:

BigQueryIO.writeTableRows()
    .to("table")
    .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED)
    .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND)
    .withSchema(schema);
Run Code Online (Sandbox Code Playgroud)

使用此代码,当我们进行回填时,一些记录会再次发送到该数据流,从而导致BigQuery表中的重复项。有什么方法可以upsert根据数据流中的字段名称配置操作?

gil*_*tic 5

我有一个非常相似的用例,我们决定通过在表顶部创建一个视图以对数据进行重复数据删除来解决此问题,并指出正在访问原始表的所有内容现在都可以从该视图中查询。

BigQuery重复数据删除和分区表是一个很好的参考。就像https://wecode.wepay.com/posts/bigquery-wepay

本质上,您需要确保您具有某种last_updated列,以及一个ID列,该ID唯一地标识该行。然后,您可以创建一个视图,以获取每个ID的最新版本的所有数据。由于您正在查询视图,因此可能会有一些小的性能损失,但是我们发现它可以忽略不计。