当前位置: 首页 > 知识库问答 >
问题:

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

韶弘壮
2023-03-14

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

我在设计系统时的理解是,所有BigQuery操作都是原子的(基于big query中的原子插入,我可以安全地查询被WRITE_TRUNCATE替换的BigQuery表,并且在重新填充其基础表时视图失败)。我遇到的问题是一个bug,还是我误解了我所能期望的确切保证?

回顾历史,过去一周至少发生了4起不同的案件。

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

  1. 大约在UTC 4月30日18:07,我的代码同时提交了82个查询。每一个查询一个以conversions_2014_04_30_14结尾的表和另一个表,并写入以conversions_2014_04_30_16结尾的表(指定WRITE_TRUNCATE)

这里有一个例子:

第一个查询作业:124072386181:job_tzqbfxfLmZv_qmyl6ozlqplg5u

第二个查询作业: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

自从这些查询运行以来(除了第一个表的模式添加之外),这些表还没有被触及过,所以它们仍然包含重复的行。确认这一点的一种方法是查看所有查询都有“groupbyalternative,bingo_id”,但每个表都有两个(alternative,bingo_id)对。

共有1个答案

薛坚
2023-03-14

我们遇到了一个bug,在某些情况下,write truncate可能会追加。我们昨天(5月22日)发布了修复程序,自那时以来,再也没有看到任何问题的实例。

 类似资料:
  • 本文向大家介绍npm提供了哪些钩子?各有什么作用?相关面试题,主要包含被问及npm提供了哪些钩子?各有什么作用?时的应答技巧和注意事项,需要的朋友参考一下 npm 拥有以下的钩子命令:对于任何在 package.json 的 scripts 字段中定义的命令,可以通过 pre 以及 post 名称前缀,额外定义该任务在执行前、后的额外执行的钩子命令。例如: { "scripts": { "prem

  • 问题内容: Java中的哪些操作被视为原子操作? 问题答案: 除long和double以外的所有基本类型分配 所有参考文献的分配 易变变量的所有分配 java.concurrent.Atomic 类的所有操作 也许还有更多。看看jls。 如评论中所述,原子性并不意味着可见性。因此int,即使保证另一个线程看不到部分写入的内容,也可能永远看不到新值。

  • 本文向大家介绍HTML5标准提供了哪些新的API?你有用过哪些?相关面试题,主要包含被问及HTML5标准提供了哪些新的API?你有用过哪些?时的应答技巧和注意事项,需要的朋友参考一下 两个选择器API 地理定位API 多媒体API 拖放API 文件API XHR2 本地储存API canvas svg

  • (是的,我意识到我的超时机制不准确)

  • 问题内容: 我有2张桌子,和。用户可以有很多游戏。我需要所有有人数的人,以及他们的人数(有专栏的)。 附言:我需要将所有数据加载到管理表中。由于游戏太多。我决定对数据进行分页和限制。但是,甚至限制以下查询也需要花费相同的时间。如何更好地查询? 问题答案: 您可以在下面尝试使用表达式

  • 问题内容: 给定一个简化的表结构,如下所示: 我可以使用这样的子查询插入记录而不会导致竞争条件吗? 还是子查询不是原子的?我担心同时s获取相同的值,然后导致唯一约束冲突。 问题答案: 是的,这肯定可以创建竞争条件,因为尽管保证所有语句都是原子的,但这并不要求它们在查询执行的各个部分中对不变的数据集进行操作。 客户提交您的上述查询。只要引擎找到只持有与其他读取器兼容的锁的锁,则另一个客户端可以在执行