【发布时间】: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