Google bigquery BigQuery为查询作业提供了什么原子性保证?
我正在调查我编写的一个定期运行的作业中的一个数据正确性问题,这个问题似乎是由BigQuery以非原子方式两次覆盖同一个表引起的。更具体地说,我在同一时间运行了同一查询的两个副本(由于重试逻辑),两个副本都设置为覆盖同一个表(使用WRITE_TRUNCATE选项),结果表的每一行都有两个副本。我希望一个查询用查询结果编写一个表,而另一个查询用相同的结果覆盖它,而不是以一个双倍大小的表结束 我在设计系统时的理解是,所有BigQuery操作都是原子的(基于、和)。我遇到的问题是一个bug,还是我误解了我所能期望的确切保证 纵观历史,在过去的一周里,至少有4起案件发生了这种情况 以下是导致这种情况发生的时间线(具体细节适用于最引人注目的案例):Google bigquery BigQuery为查询作业提供了什么原子性保证?,google-bigquery,Google Bigquery,我正在调查我编写的一个定期运行的作业中的一个数据正确性问题,这个问题似乎是由BigQuery以非原子方式两次覆盖同一个表引起的。更具体地说,我在同一时间运行了同一查询的两个副本(由于重试逻辑),两个副本都设置为覆盖同一个表(使用WRITE_TRUNCATE选项),结果表的每一行都有两个副本。我希望一个查询用查询结果编写一个表,而另一个查询用相同的结果覆盖它,而不是以一个双倍大小的表结束 我在设计系统时的理解是,所有BigQuery操作都是原子的(基于、和)。我遇到的问题是一个bug,还是我误解了
自从这些查询运行以来(除了第一个表的模式添加之外),这些表还没有被触及过,所以它们仍然包含重复的行。确认这一点的一种方法是查看所有查询都有“分组方式,bingo_id”,但每个表都有两个(可选方式,bingo_id)对。我们有一个错误,在某些情况下,写入截断可能会追加。我们昨天(5月22日)发布了修复程序,自那时以来,再也没有看到该问题的任何实例。对此有任何更新吗?我能够更改代码以提交更少的查询,这避免了触发此问题的奇怪重试逻辑的需要,但我相信我的代码仍然可以在发生某些罕见错误时提交查询的多个副本,所以WRITE_TRUNCATE必须是幂等的,我的代码才能100%正确。我们昨天隔离了这个问题并推出了一个修复方案。