Snowflake cloud data platform 删除如何在雪花分区中工作

Snowflake cloud data platform 删除如何在雪花分区中工作,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我问了一个关于删除在snowflake中如何工作的问题。由于分区是不可变的,当我删除记录(从多个不可变对象)时,它将创建新的分区,我这里的问题是分配的剩余空白空间(16mb压缩),它将保持原样还是整个微分区将重新构造(重新排列,碎片整理…)再次?执行删除或更新操作时,Snowflake会删除分区文件,并用更改后的新文件替换它 Jim Partition P1 John Partition P1 Andy Partition P1 Joe Partition P2 Mike

我问了一个关于删除在snowflake中如何工作的问题。由于分区是不可变的,当我删除记录(从多个不可变对象)时,它将创建新的分区,我这里的问题是分配的剩余空白空间(16mb压缩),它将保持原样还是整个微分区将重新构造(重新排列,碎片整理…)再次?

执行删除或更新操作时,Snowflake会删除分区文件,并用更改后的新文件替换它

Jim    Partition P1
John   Partition P1
Andy   Partition P1

Joe    Partition P2
Mike   Partition P2
Jeff   Partition P2


New Partition P3

Jim    Partition P3
John   Partition P3
例如,我们将一个表的数据存储在中,我们删除了所有名为“Andy”的记录。现在,Snowflake删除整个分区文件P1,并将其替换为包含更改的新分区文件P3

Jim    Partition P1
John   Partition P1
Andy   Partition P1

Joe    Partition P2
Mike   Partition P2
Jeff   Partition P2


New Partition P3

Jim    Partition P3
John   Partition P3

Delete只是insert&update的一个特例。这是最好的变化

Simon和hkandpal提出了一些非常好的观点。关于一般生命周期

正如small end I和over stack overflow用户所测试的那样,许多对微小表的微小更改最终仍然只有一个分区。因此,正如Simon提到的,似乎有一些关于附加/重写小分区的形式

但是在大的一端,没有免费的午餐来进行大的改变。我们注意到,如果批量删除,那么输出占用的分区更少,这意味着如果有50个分区,每个分区容纳5000行,并且删除每一个奇数行,那么最终会有25个分区。因此,写操作是聚集分区

但同时,如果启用了自动集群,则删除/更新写入是无序的,因此在删除数据后,我们会有巨大的集群“重新调整”成本。因为要查找要删除的行的过滤器会对数据进行重新排序,这就是数据的写入方式,然后自动集群可以花费5倍于原始写入成本的时间对数据进行重新排序。所以,在某些情况下,使用ORDERBY子句“删除”100+GB表中30分之一的数据,并将order Create Table设置为Select会更便宜


指出这种免费午餐缺乏的其他事实是,自动集群也执行分区碎片整理任务,支持工程师在过去提到过这一点,这可能是它自己的特点。和重新订购。我们每天都会重建一些小表,以保持秩序的完美,因为它对我们有巨大的影响,依赖于自动集群,因为后者对大多数情况都很满意,但对性能的影响(它是一个处理几乎所有信息的表)表的大小、有序性和可缓存性对我们来说是有意义的。

我不确定,但我假设新分区的记录数较少,因此比以前的分区小。我认为分区可以附加到(至少s3中的文件可以附加到)中,因此随后传入的任何新数据都可能会填满分区中未使用的空间。。需要了解Snowflake的内部结构的人来回答这个问题,但实际情况并非如此,“删除/删减的分区”将保留“时间旅行时间”,然后保留“故障安全时间”。因此,即使是临时表,您也要为此付费。