【问题标题】:BigQuery - Transaction is aborted due to concurrent update against tableBigQuery - 由于对表的并发更新,事务被中止
【发布时间】:2021-12-14 17:39:31
【问题描述】:

在 Google BigQuery 上,我在分区表上运行 5 个并发更新,然后出现以下错误:

由于对表 dataset_test.test1 的并发更新,事务被中止

Google DML docs 之后,它说我可以进行并发更新,因为它们不会修改同一个分区。

我为语句提供分区位置,以确保它们修改不同的分区。

这是我的桌子:

    CREATE TABLE `dataset_test.test1`
(
  partition_id INT64,
  familia_g STRING,
  target STRING,
  status STRING,
  datetime DATETIME
)
PARTITION BY RANGE_BUCKET(partition_id, GENERATE_ARRAY(0, 5, 1))

这是一个语句示例:

UPDATE `dataset_test.test1` 
            SET status = 'processing',
                datetime = current_datetime
            WHERE partition_id = 2 
            AND familia_g = 'familia1' 
            AND target = 'df'

由于我正在运行 5 个语句,partition_id 为每个语句接收 0 到 4。

这是另一个分区的另一个声明:

UPDATE `dataset_test.test1` 
                SET status = 'processing',
                    datetime = current_datetime
                WHERE partition_id = 4 
                AND familia_g = 'familia3' 
                AND target = 'df'

感谢提前。

【问题讨论】:

  • 您是否同时安排了 UPDATE 查询,因此您有 5 个并发更新?另外,如果可能的话,您能否提供另一个更新其他分区的语句?
  • 是的。我同时安排了 5 个 UPDATE 查询。我提供了另一个分区 UPDATE 的查询。

标签: sql database concurrency google-bigquery


【解决方案1】:

解决了!

由于我在不同的 BigQuery 程序上运行这些语句,它们会分别打开新事务。

根据transactions docs并发事务(冲突)被取消。

【讨论】:

    猜你喜欢
    • 2016-04-11
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 2023-02-13
    • 2012-12-06
    相关资源
    最近更新 更多