首页 > 解决方案 > 优化繁重的 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)

标签: google-cloud-platformgoogle-bigquerybigdatasql-optimization

解决方案


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()。


推荐阅读