BigQuery - 由于表并发更新而导致事务中止

问题描述 投票:0回答:2

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

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

遵循 Google DML 文档,它说我可以进行并发更新,因为它们不会修改同一分区。

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

这是我的桌子:

    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'

感谢提前。

sql database concurrency google-bigquery
2个回答
1
投票

解决了!

由于我在不同的 BigQuery 过程上运行这些语句,因此它们各自打开新事务。

根据交易文档并发交易(冲突)被取消。


0
投票

你可以分享更多细节吗?我也有类似的场景。如果更新影响不同的分区,为什么不同分区仍然具有并发性?谢谢

© www.soinside.com 2019 - 2024. All rights reserved.