在 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'
感谢提前。
你可以分享更多细节吗?我也有类似的场景。如果更新影响不同的分区,为什么不同分区仍然具有并发性?谢谢