BigQuery - 由于针对 table 的并发更新,事务中止
BigQuery - Transaction is aborted due to concurrent update against table
在 Google BigQuery 上,我在分区 table 上进行了 运行 5 个并发更新,然后出现以下错误:
Transaction is aborted due to concurrent update against table dataset_test.test1
在Google DML docs之后,它说我可以进行并发更新,因为它们不修改同一个分区。
我正在为语句提供分区位置以确保它们修改不同的分区。
这是我的 table:
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'
感谢提前。
已解决!
因为我 运行 这些关于不同 BigQuery 程序的语句,它们各自打开新事务。
根据 transactions docs 并发事务(冲突)被取消。
在 Google BigQuery 上,我在分区 table 上进行了 运行 5 个并发更新,然后出现以下错误:
Transaction is aborted due to concurrent update against table dataset_test.test1
在Google DML docs之后,它说我可以进行并发更新,因为它们不修改同一个分区。
我正在为语句提供分区位置以确保它们修改不同的分区。
这是我的 table:
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'
感谢提前。
已解决!
因为我 运行 这些关于不同 BigQuery 程序的语句,它们各自打开新事务。
根据 transactions docs 并发事务(冲突)被取消。