BigQuery为查询作业提供了哪些原子性保证?

时间:2014-05-02 08:54:00

标签: google-bigquery

我正在调查我编写的定期运行的作业中的数据正确性问题,而这个问题似乎是由BigQuery以非原子方式两次覆盖同一个表引起的。更具体地说,我有两个同时运行的同一个查询的副本(由于重试逻辑),两个都设置为覆盖同一个表(使用WRITE_TRUNCATE选项),结果表有每个行的两个副本。我期待一个查询用查询结果编写一个表,另一个查询用相同的结果覆盖它,而不是用一个双倍大小的表结束。

我在设计系统时的理解是所有BigQuery操作都是原子的(基于atomic inserts in big queryCan I safely query a BigQuery table being replaced with WRITE_TRUNCATEViews are failing when their underlying table is repopulated)。问题是我遇到了一个错误,还是我误解了我可以期待的确切保证?

纵观历史,过去一周内至少发生了4起案件。

以下是导致此情况发生的时间表(具体细节适用于最明显的案例):

  1. 在UTC时间4月30日18:07左右,我的代码同时提交了82个查询。每个查询一个以conversions_2014_04_30_14结尾的表和另一个表,并写入以conversions_2014_04_30_16结尾的表(指定WRITE_TRUNCATE)。
  2. 大约25分钟后,25个查询仍然没有完成(这比平常更多),所以它触发了#34;重试"这个逻辑放弃了所有仍在运行的查询,只是再次提交它们(这是为了解决一个问题,我已经看到查询将在未运行的情况下等待几个小时,我在这里提到过:https://code.google.com/p/google-bigquery/issues/detail?id=83&can=1 )。这意味着50个查询一次完成,25个查询中的每个查询中有两个尚未完成。
  3. 在所有查询完成后,82个结果表中的6个是它们应该的两倍大。
  4. 以下是一个例子:

    首次查询工作:124072386181:job_tzqbfxfLmZv_QMYL6ozlQpWlG5U

    第二个查询工作:124072386181:job_j9_7uJEjtvYbyeVmEVP0u2er9Lk

    结果表:124072386181:bigbingo_history.video_task_companions_conversions_2014_04_30_16

    另一个例子:

    首次查询职位:124072386181:job_TQJzGabFT9FtHI05ftTkD5O8KKU

    第二个查询工作:124072386181:job_5hogbjnLX_5a2opEJl9Jacnn53s

    表:124072386181:bigbingo_history.Item_repetition__Elimination_conversions_2014_04_27_16

    自从这些查询运行以来,尚未触及表(除了第一个表的模式添加之外),因此它们仍然包含重复的行。确认这一点的一种方法是查看所有查询都有" GROUP BY替代,bingo_id",但这些表有两个(alternative,bingo_id)对。

1 个答案:

答案 0 :(得分:3)

我们遇到了一个错误,其中write-truncate可能会在某些情况下最终附加。我们昨天(5月22日)发布了修复程序,从那以后还没有看到任何问题的进一步发生。