是否可以在从Apache Beam管道将数据流入其中时从BigQuery表中清除数据? 在我们的用例中,我们只需要保留3天的数据。所以要求是我们需要删除BigQuery Stream Table中超过3天的所有行。 我们遇到的主要问题是,当BigQuery表保存Streaming Buffer时,我们无法应用任何DML命令,停止数据流作业后,BigQuery表至少花费90分钟来释放Streaming Buffer。
答案 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
确保您不必重新创建架构(假设您拥有固定架构而不是动态架构)。这使您不必在每次重写后再次创建架构。
警告: 替换可能分多步进行 - 例如首先删除现有表,然后创建替换,然后填写。这不是原子操作,并且外部程序可以在任何这些中间步骤中看到该表。