snowflake-cloud-data-platform - 删除聚集表中的性能
问题描述
我的桌子大小详细信息如下:
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 的克隆数据的查询。
解决方案
我认为这可能是一个边缘案例,也是一个让支持人员参与您案例细节的好机会。
同时,我创建了一个 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 很聪明地使用聚类算法仅扫描某些分区。
推荐阅读
- azure-cosmosdb - Azure Cosmos SQL - 使用嵌套数组并使用 LIKE 关键字
- terminal - 带有 Windows 终端限制的 Azure Cloud Shell?
- sql - 具有多个左连接的查询需要很长时间才能运行
- javascript - 在 JavaScript 中使用 include() 访问对象的数据
- r - 如何修复 ggplot() 中丢失的对象/变量
- android - 当用户更换手机并重新安装 Google Account All App 时,是否会传输 AsyncStorage 数据?
- c++ - 如何使用 libmosquitto 发出请求并使用 MQTT v5 获得响应?
- css - 通过 dart-sass 编译运行时,css 变量值被引用/字符串化的问题
- typescript - 为什么实现接口的类中的泛型成员函数不能接受类类型(而不是接口)的参数?
- c++ - 使用命名空间 fltk 在我的 FLTK 程序中不起作用