从BigQuery Streaming Table中删除行

时间:2018-05-11 20:20:56

标签: beam

是否可以在从Apache Beam管道将数据流入其中时从BigQuery表中清除数据? 在我们的用例中,我们只需要保留3天的数据。所以要求是我们需要删除BigQuery Stream Table中超过3天的所有行。 我们遇到的主要问题是,当BigQuery表保存Streaming Buffer时,我们无法应用任何DML命令,停止数据流作业后,BigQuery表至少花费90分钟来释放Streaming Buffer。

1 个答案:

答案 0 :(得分:0)

据我所知,最简单的解决方案可能只是使用:

p.apply(BigQueryIO.writeTableRows()
                  .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_NEVER)
                  .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_TRUNCATE))

因此,每隔三天您就会希望apache作业终止,然后重新启动数据流作业。 (这假设流已经运行过一次)。

BigQueryIO.Write.WriteDisposition.WRITE_TRUNCATE指定写入应该替换正在写入的表。这使您不必担心每次都删除数据。

BigQueryIO.Write.CreateDisposition.CREATE_NEVER确保您不必重新创建架构(假设您拥有固定架构而不是动态架构)。这使您不必在每次重写后再次创建架构。

警告: 替换可能分多步进行 - 例如首先删除现有表,然后创建替换,然后填写。这不是原子操作,并且外部程序可以在任何这些中间步骤中看到该表。

Source