partition_depth_histogram实际展示内容及相关技术疑问解析
关于Snowflake
partition_depth_histogram的疑问解答 partition_depth_histogram是SYSTEM$CLUSTERING_INFORMATION函数中的一项指标,用于展示表中微分区的重叠深度分布,官方对其的定义如下:
该直方图展示了表中每个微分区(micro-partition)的重叠深度分布情况。直方图包含以下宽度的桶(bucket):
- 0到16,步长为1,每个值对应一个独立桶;
- 大于16的桶,步长为前一个桶宽度的两倍(例如32、64、128……),每个桶对应一个数值范围。
针对该指标,常见疑问及解答如下:
疑问1:为何始终是17个桶?如果微分区数量多于或少于17个该怎么办?
实际上桶的数量并非固定为17个。0-16的单值桶共17个,这是基础划分;当存在重叠深度大于16的微分区时,会自动生成更大的范围桶(如32、64、128等),直到覆盖所有微分区的最大重叠深度。
微分区的数量和桶的数量没有直接关联:哪怕表中只有1个微分区,直方图仍会列出所有基础的17个单值桶(对应数值为0,除了该微分区对应的深度桶);如果有大量深度超过16的微分区,会按需添加更多范围桶。
疑问2:直方图中的微分区与桶之间存在何种关系?
每个微分区会根据自身的重叠深度被分配到对应的桶中:
- 若微分区的重叠深度在0-16之间,会被归入对应数值的单值桶;
- 若重叠深度大于16,会被归入对应的范围桶(例如深度为20的微分区进入"00032"桶,深度为40的进入"00064"桶)。
这里的重叠深度指:针对指定的聚类键执行查询时,该微分区与其他微分区在键值范围上产生重叠的数量。
疑问3:直方图中的数值代表什么含义?
直方图中每个桶对应的数值,代表属于该桶的微分区数量:
- 单值桶(如"00002")的数值,代表重叠深度恰好等于该桶数值的微分区数量;
- 范围桶(如"00064")的数值,代表重叠深度落在
(上一个桶最大值, 当前桶值]区间内的微分区数量(例如"00064"对应深度17-64的微分区数量)。
示例参考
以下是SYSTEM$CLUSTERING_INFORMATION函数的返回示例:
{ "cluster_by_keys" : "LINEAR(COL1, COL3)", "total_partition_count" : 1156, "total_constant_partition_count" : 0, "average_overlaps" : 117.5484, "average_depth" : 64.0701, "partition_depth_histogram" : { "00000" : 0, "00001" : 0, "00002" : 3, "00003" : 3, "00004" : 4, "00005" : 6, "00006" : 3, "00007" : 5, "00008" : 10, "00009" : 5, "00010" : 7, "00011" : 6, "00012" : 8, "00013" : 8, "00014" : 9, "00015" : 8, "00016" : 6, "00032" : 98, "00064" : 269, "00128" : 698 }, "clustering_errors" : [ { "timestamp" : "2023-04-03 17:50:42 +0000", "error" : "(003325) Clustering service has been disabled." } ] }
内容的提问来源于stack exchange,提问作者Sahand
相关产品推荐
相关产品推荐

