Snowflake cloud data platform 微分区和数据集群之间有什么区别

Snowflake cloud data platform 微分区和数据集群之间有什么区别,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我在读这个。试图理解两者之间的关系,这是相当令人困惑的。请解释雪花存储在微分区中的数据。每个微分区包含50 MB到500 MB的未压缩数据。如果您熟悉传统数据库上的分区,微分区与它们非常相似,但微分区是由Snowflake自动生成的。您不需要像在传统数据库系统中那样对表进行分区 数据集群是基于集群密钥将数据分发到这些微分区中。如果未为表启用集群,则表仍将具有微分区,但不会基于特定键分发数据 假设我们在表t中有X列的A、B、C、D唯一值,我们有5个分区: P1: AABBC P2: ABDAC P

我在读这个。试图理解两者之间的关系,这是相当令人困惑的。请解释雪花存储在微分区中的数据。每个微分区包含50 MB到500 MB的未压缩数据。如果您熟悉传统数据库上的分区,微分区与它们非常相似,但微分区是由Snowflake自动生成的。您不需要像在传统数据库系统中那样对表进行分区

数据集群是基于集群密钥将数据分发到这些微分区中。如果未为表启用集群,则表仍将具有微分区,但不会基于特定键分发数据

假设我们在表t中有X列的A、B、C、D唯一值,我们有5个分区:

P1: AABBC
P2: ABDAC
P3: BBBCA
P4: CBDCC
P5: BBCCD
如果我们尝试从t运行SELECT*,其中X=一个查询,Snowflake需要读取P1、P2、P3分区。如果此表是基于X列进行聚类的,则数据的分布理论上如下所示:

P1: AAAAA
P2: BBBBB
P3: BBBBC
P4: CCCCC
P5: CCDDD
在本例中,当我们运行SELECT*fromt,其中X=A查询时,Snowflake将需要只读P1分区


当访问大表中的一部分数据时,微分区或分区非常重要,因为Snowflake可以根据查询中的筛选条件修剪分区。如果为集群定义了一个右键列,分区修剪将更加有效。

很像Gokhan的答案,但我会用不同的方式来描述它

微分区:

P1: AABBC
P2: ABDAC
P3: BBBCA
P4: CBDCC
P5: BBCCD
每次向snowflake写入数据都会写入一个新文件,因为这些文件是不可变的。这意味着你有很多碎片。但由于保留表的元数据,当您查询时,Snowflake可以删除已知不包含正在查找的数据的表。否则,它将加载所选列的所有数据,并强制执行完整表扫描。 雪花微分区与经典分区没有任何关系,除非幸运的话,您可能会得到修剪。 此外,微分区是以加载数据的方式写入的,当写入超过阈值时,微分区会被拆分成更多的分区。很像WinZip/7Zip/Gzip中的max file chunk size参数。。 接下来要注意的是,如果更新分区中的一行,则整个分区都将被重写。并且更新行的顺序是不可控的,可以根据表连接逻辑随机进行。 因此,如果您进行了多次写入,或者进行了多次小的更新,您的分区就会出现非常糟糕的碎片,这会对编译时间产生非常负面的影响,因为需要加载所有元数据。他们现在正在为此收费。 这是因为S3是不可变的文件存储,但这也是为什么可以分离计算表单数据的原因。这也是timetravel和history days数据保留的工作方式,因为此时表的先前状态不会被删除,因此您需要为S3存储付费。这也意味着,当你为数天累计写入的所有数据付费时,要注意你的客户流失

数据聚类:

是一种指示您希望如何对数据进行排序的方法。传统的手动集群命令或自动集群将重写分区以改进集群。如果你是老派,想想诺顿SpeedDisk 按照您希望的顺序写入表,即插入时始终有一个order BY,这将改善情况。但是您只能将一个表聚集在一组键上,因此在对数据进行聚集之前,您需要考虑如何使用数据。或者使用我们需要的最小子集/排序行为创建多个数据副本。 警告:当前更新不尊重此群集,通过运行自动群集,您可以支付高达4倍的完整表重写成本,您需要注意这一点,因为这可能是无限的成本

因此,简而言之,集群就像穷人的索引,雪花基本上是一个大规模的全表扫描/映射/减少处理。但它真的很擅长,当你了解它是如何工作的,使用起来非常有趣