Snowflake cloud data platform 大分区数对性能的影响

Snowflake cloud data platform 大分区数对性能的影响,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我有数百万个分区的表。 我应该减少分区数量以提高性能吗? 根据我在spark应用程序或hive查询系统中的经验,太多的分区对性能不利。在Snowflake中,有微分区,它们是自动管理的。因此,您不必担心微分区的数量 它说: 对所有雪花表自动执行微分区。 表是使用数据的顺序进行透明分区的 它被插入/加载 从这一页,我了解到微分区是由Snowflake管理的,您不需要关注减少分区数(这是最初的问题) 这也有助于理解集群和微分区之间的区别: 如果您阅读了上面的链接,您会发现即使是在大型表上定义集群

我有数百万个分区的表。 我应该减少分区数量以提高性能吗?
根据我在spark应用程序或hive查询系统中的经验,太多的分区对性能不利。

在Snowflake中,有微分区,它们是自动管理的。因此,您不必担心微分区的数量

它说:

对所有雪花表自动执行微分区。 表是使用数据的顺序进行透明分区的 它被插入/加载

从这一页,我了解到微分区是由Snowflake管理的,您不需要关注减少分区数(这是最初的问题)

这也有助于理解集群和微分区之间的区别:

如果您阅读了上面的链接,您会发现即使是在大型表上定义集群也不一定能获得良好的查询性能


作为关于减少分区数的最初问题,我还必须说,群集并不总是减少分区的数量,但这是另一回事。

如果表上没有自动群集,它将不会被自动碎片整理。因此,如果您经常以较小的行数写入表,它的状态将非常糟糕

分区计数严重影响编译时,因为每个分区都有元数据,可以加载元数据来规划/优化查询。我建议做一个重建测试(选择到一个新的临时表中),并运行一些可比较的查询,以查看编译时的差异

我们有许多表排序(因此自动集群)没有意义,因为使用模式总是满表扫描,因此我们只是按计划重建这些表以保持分区计数,对我们来说,重建成本值得性能提升


和Snowflake一样,您应该运行一个测试,看看它对您有什么好处。并尽可能地监控热点并进行更改。

它们不是自动管理的。除非您已启用自动群集。微分区和群集不是一回事。Snowflake没有传统的分区。总是为任何表生成微分区,它们由Snowflake管理(是否为表创建分区?否)。集群是一种将数据分发到这个微分区的功能。它们是严格相关的,但不是相同的东西。你的观点本身是正确的。但仍然不是这个问题的正确答案。“很多分区会影响性能吗?”“是”是答案。。。接下来的问题是“Snowflake是否为您自动管理这些分区?”答案是“否”“如果您使用自动群集,您的分区也将被碎片整理、重新排序”上周我与Snowflake的自动群集产品经理讨论了这件事……以帮助翻译gap,如果mirco分区被称为微碎片,你会发现我说的不是经典分区,而是S3/Azure/GC文件系统中的许多小文件。如果不重写表,这些文件就不会发生任何神奇的变化,所以它们仍然很多。现在,如果您有自动聚类功能(或者如果您有一个旧帐户,您可能有手动聚类功能,或者您可能是一个足够大的帐户,您可以使用零聚类功能,并且必须自己重写表以解决此碎片问题),那么启用自动聚类功能将“有帮助”。使用自动聚类功能的方法“有帮助”如果你有一个
insert\u time
列,那么你会自动对它进行聚类,最终的效果就是碎片整理。在与PM交谈时,他们说snowflake正在考虑将碎片整理与自动集群分离,以帮助不需要排序但碎片严重的表。如果这对您很重要,我会写信给您的客户帐户经理,告诉他们您感兴趣。您对碎片整理的看法肯定是对的,因为它需要重新分发数据。我已经说过,这是集群。另一方面,你的样品是错误的。您会说“如果您经常以较小的行数向表中写入数据,那么它的状态将非常糟糕。”。创建一个表,插入100行20次,然后选择所有行,您将看到查询将只读(1个分区)。所以Snowflake创建微分区(这是必须的),并维护它们(如果需要,删除和合并)。如果你说它也必须进行碎片整理才能算作“管理”,那没关系:)看来我们经历过不同的雪花。就在上周,我与Snowflake产品经理就自动群集进行了交谈,他们谈到了他们如何考虑将碎片整理作为自动群集的一部分(一种相对较新的行为添加到自动群集作为一项长期功能),因为客户的表是碎片化的,而重写的TB级表也不是免费的。但是,如果你有一个2000行的表,它可能看起来像变魔术了。