我有以下删除语句作为计划查询,执行需要约 270GB。相同日期的插入语句要小得多。
删除语句这么大有什么原因吗?可以通过某种方式优化吗?
DELETE FROM `TABLE`
WHERE date BETWEEN FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 5 DAY))
AND FORMAT_DATE( "%Y%m%d",DATE_SUB(CURRENT_DATE(), INTERVAL 2 DAY))
BigQuery 中 DELETE 语句的资源使用情况可能会受到多种因素的影响。在您的情况下,所提供的声明看起来相对简单,侧重于删除目的的特定日期范围。还要尝试考虑小批量删除它们。这可以帮助防止资源耗尽并更好地管理事务影响。
此代码修订版消除了日期间隔中对
FORMAT_DATE
函数的需要,因为仅 DATE_SUB
函数就足以计算所需的日期范围。建议不要在 WHERE
子句中使用诸如 FORMAT_DATE之类的函数,因为它们可能会阻碍查询优化器有效地利用分区修剪。
DELETE FROM `project.dataset.table`
WHERE date BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 5 DAY)
AND DATE_SUB(CURRENT_DATE(), INTERVAL 2 DAY);
如果您的
INSERT
语句涉及流插入,与批量插入相比,它可能在资源消耗方面表现出更高的效率。 BigQuery 的流式插入专门用于管理实时数据,而批量插入可能会带来额外的开销。