详细地说,
我在bigquery中有一个名为tableA的表,其中有一个名为date_key (整型)(大小为500G)的分区列。我希望每天删除基于date_key列的数据,以保持数据质量。
以下是我尝试执行以下操作的关键点:
delete from tableA where date_key in (20200729);
查询成本是2.5 gb,因此我在分区列上执行delete操作,我对此很满意
因此,这里出现了应该动态传递日期键的问题,所以我编写了一个子查询来传递date_key,如下所示
delete from tableA where date_key in (select distinct date_key in stg_tableA)--which will give you 2020029 as output from the subquery
在这种情况下,查询成本是500 GB,奇怪,不知道为什么?
我已经尝试过设置变量,但它的代码也不起作用:
--declare a,b int64;
DECLARE a DEFAULT (select distinct date_key from stg_tableA);
delete from TableA where date_key in(a)
我尝试过这种方式,因为当我硬编码date_key值时,它是有效的--声明a,b int64;
DECLARE a DEFAULT 20200727;
delete from tableA where date_key in(a)
发布于 2020-07-29 05:32:31
声明一个变量应该可以。您看到的估算成本来自于预演脚本。在模拟运行中,所有脚本变量都不会被设置,因此不会发生分区修剪。这是设计好的。当您实际运行脚本时,该变量将被设置为第一个查询的值,并且分区修剪应该在第二个查询中发生。
https://stackoverflow.com/questions/63142103
复制相似问题