google-cloud-platform - 优化繁重的 BigQuery DELETE 查询
问题描述
以下 BigQueryDELETE
查询因超时而失败,因为它达到了6 小时的执行时间限制:
DELETE animals A WHERE EXISTS
(SELECT id from pets P WHERE A.id = P.id)
餐桌动物有约 50.000.000.000 条记录。
餐桌宠物有大约 300.000 条记录。
表没有分区。
编辑:
似乎这个查询没有任何改进:
DELETE animals WHERE id IN
(SELECT id from pets)
解决方案
SELECT id FROM(
SELECT id, tbl, DENSE_RANK OVER(PARTITION BY id ORDER BY tbl) AS rk FROM (
SELECT id, 1 AS tbl FROM animals
UNION ALL
SELECT id, 0 AS tbl FROM pets)
)
) WHERE rk = 1 AND tbl = 1;
此代码将为您提供宠物中不存在的动物的所有 ID。
如果 id 在动物中是唯一的,您可以使用 ROW_NUMBER() 而不是 DENSE_RANK()。
推荐阅读
- php - 在 WooCommerce 产品页面中显示自定义挂钩
- html - 如何在引导导航中从左侧删除填充/边距?
- sql - Elastic seach 分组并获得第一条记录
- python - 通过列表迭代重命名 Pandas DataFrame
- python - Python。硒。上传没有输入标签的文件
- java - Selenium - 当元素包含文本+元素时如何获取文本
- python - 在 Jupyter Python 中连接 PostgreSQL
- ajax - 在 Firefox 中为 WCF POST REST 请求获取 CORS 错误
- android - 稍后初始化要传递的变量时,如何在 onCreate 中设置回收器视图适配器?
- r - 为什么将 filter() 放在不同的位置会给出不同的直方图?