首页 > 解决方案 > 删除聚集表中的性能

问题描述

我的桌子大小详细信息如下:

  Size : 8.5 TB,  
    total columns : 20 
    Rows : 520,712,026,254
    Cluster by Date_Period(varchar 50) : different values are 'Mar 2019' , 'Apr 2019', 'May 2019' ..... 'Apr 2021' total 25 months of data.
    
    clustering_information 
    total_partition_count : 725451
    total_constant_partition_count : 725440
    average_overlap : 0
    average_depth : 1.0

我想删除第 25 个月的数据并保留到第 24 个月。到目前为止,我正在使用硬编码值测试删除操作。这个过程是每月一次。 delete from table_name where date_period = 'Mar 2019'.

但它需要超过 4 小时,最后超时。为什么即使字段是聚集的,简单的删除也需要时间。我该如何改进它。

注意:我正在测试对从 QA 到 dev 的克隆数据的查询。

标签: snowflake-cloud-data-platform

解决方案


我认为这可能是一个边缘案例,也是一个让支持人员参与您案例细节的好机会。

同时,我创建了一个 100 亿行的聚簇表,同时尝试重现该问题:

create or replace temp table ten_billionv2
cluster by (m)
as
select to_char(dateadd(minute, seq8(), '1990-01-01'), 'mon yyyy') m, seq8() seq, uniform(1, 10000, random()) value, uniform(1, 10000, random()) value2
from table(generator(rowcount=>100000)) a, table(generator(rowcount=>100000)) b;

select *
from ten_billionv2
limit 10;

在此处输入图像描述

这比您描述的表格要小,但它为我们提供了一个很好的机会来查看其他答案和评论中的任何建议是否适用。

  • 用 L 仓库创建这张表用了不到 10 分钟。
  • 它由一个字符串聚集在一起。
  • 克隆它很快。
  • 从中删除数据很快 - 无论是从原始数据还是从克隆数据。
create temp table ten_billionv2_clone_2
clone ten_billionv2
--2s
;

delete from ten_billionv2_clone_2
where m='Apr 2021'
--18s
;

delete from ten_billionv2
where m='Apr 2021'
--17s
;

delete from ten_billionv2_clone_2
where m='Apr 2190'
--9s
;

delete from ten_billionv2
where m='Dec 11576'
--25s
;

delete from ten_billionv2_clone_2
where m='Dec 11576'
--28s
;

在此处输入图像描述

我将在这里停止我的实验——但接下来我会尝试每月获得更多数据——也许时间会随着所涉及的分区数量而增加。到目前为止,我了解到的是,Snowflake 很聪明地使用聚类算法仅扫描某些分区。


推荐阅读