减少 BigQuery 中删除语句的大小

问题描述 投票:0回答:1

我有以下删除语句作为计划查询,执行需要约 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))
sql google-bigquery query-optimization sql-delete delete-row
1个回答
0
投票

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 的流式插入专门用于管理实时数据,而批量插入可能会带来额外的开销。

© www.soinside.com 2019 - 2024. All rights reserved.