Snowflake cloud data platform 删除如何在雪花分区中工作
我问了一个关于删除在snowflake中如何工作的问题。由于分区是不可变的,当我删除记录(从多个不可变对象)时,它将创建新的分区,我这里的问题是分配的剩余空白空间(16mb压缩),它将保持原样还是整个微分区将重新构造(重新排列,碎片整理…)再次?执行删除或更新操作时,Snowflake会删除分区文件,并用更改后的新文件替换它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
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的内部结构的人来回答这个问题,但实际情况并非如此,“删除/删减的分区”将保留“时间旅行时间”,然后保留“故障安全时间”。因此,即使是临时表,您也要为此付费。