雪花:2个相关的列有非常不同的聚类信息(一个具有完美的信息,另一个具有糟糕的信息)



我们有一个带有120m行的表(超过2222个微分十字),该表具有2个重要列,record_id,值为 prefix|<account_id>|<uuid>(unique)和counter_ID,其值为<account_id>。请注意,所有记录的前缀相同。当然,当然是一些事实列,但这与此无关。

Snowflake通过clustering_information函数显示record_id列的完美聚类(由SF自动选择,未由我们设置指定的聚类):

"total_partition_count" : 2222,
 "total_constant_partition_count" : 2222,
 "average_overlaps" : 24.0,
 "average_depth" : 25.0,

然而,对于列counture_id,群集非常糟糕

 "total_constant_partition_count" : 0,
 "average_overlaps" : 2221.0,
 "average_depth" : 2222.0,

大约有130个不同的帐户ID,这意味着一个Account_ID的记录应超过17个分区。即使雪花簇按记录_ID簇,该列的开头(prefix|<account_id>)与account_id列相关。因此,具有相同帐户的记录应最终进入同一分区。因此,我无法弄清楚为什么Account_ID列有100%重叠的微分类。就像雪花对record_id列使用了一些奇怪的排序,因此每个分区中每个帐户的散布行。这可能吗?

这对性能产生负面后果,因为使用coundy_id滤波器进行查询会导致所有分区的扫描。

注意:还在雪花论坛上提出了这个问题has-terible

在Snowflake的聚类报告功能中,如上所述,只有一个限制,只有VARCHAR的前6个字符才被考虑用于评估聚类深度。因此,我不会相信record_id报告的出色结果,因为即使后续帐户是随机的,前6个字符也可能是由于前缀而相同的。

最好的解决方案是明确声明councel_id上的聚类并激活表上的自动聚类。

相关内容

最新更新