首页 > 解决方案 > 合并 DML 扫描的 BigQuery 限制行数

问题描述

给定下面的 DML 语句,有没有办法限制目标表扫描的行数?例如,假设我们有一个字段 shard_id ,表是用它来分区的。我事先知道所有更新都应该发生在某个 shard_id 范围内。有没有办法为 target 指定 where 子句来限制需要扫描的行数,这样 update 就不必进行全表扫描来查找 id?

MERGE dataset.table_target target
USING dataset.table_source source
ON target.id = "123"
WHEN MATCHED THEN
UPDATE SET some_value = source.some_value
WHEN NOT MATCHED BY SOURCE AND id = "123" THEN
DELETE

标签: google-cloud-platformgoogle-bigquerydml

解决方案


ON 条件是您需要在其中编写子句的 Where 语句。

ON target.id = "123" AND DATE(t.shard_id) BETWEEN date1 and date2

推荐阅读