google-cloud-platform - 合并 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
解决方案
ON 条件是您需要在其中编写子句的 Where 语句。
ON target.id = "123" AND DATE(t.shard_id) BETWEEN date1 and date2
推荐阅读
- javascript - 即使在html,css,js中更改父级的宽度大小,如何防止坐标折叠
- database - 在运行时在数据库上下文之间切换(ASP.NET Core、依赖注入)
- python - 抑制 matplotlib 中的科学记数法 offsetText
- c# - C# 中 DDD 枚举的 swagger 文档和 swag 客户端代码
- python - 如何通过函数传递矩阵?
- sanity - Sanity.io CMS – 编写模式类型
- android - Flutter 地点选择器应用程序在运行时崩溃(Android)
- docker - 到端口 54663(bamboo tcp 端口)的连接问题
- python - Jetson Nano UART 将损坏的字符 CH340G UART 传输到串行
- php - SQLite3 选择 * 从表排序