微分区统计雪花

时间:2019-12-12 15:40:03

标签: snowflake-data-warehouse

众所周知,雪花架构中的微分区为优化器查询方法提供了动力,当用户需要了解每列指出的数据时,可以更快地呈现数据结果:

  • 特定范围的数据
  • 统计信息(MAX,MIN,COUNT)

但是,检查documentation微分区也会保留有关不同值数量的信息。我一直在尝试测试何时可以使用查询优化器来避免部署计算层,然后快速呈现数据而无需执行计算任务。

我尝试了MAX,MIN,COUNT,对于这些结果,执行是在没有任何计算层的情况下并且在非常合适的时间内进行的。但是,我尝试执行 COUNT DISTINCT ,但在这里我注意到在显示结果之前已部署了计算层:

enter image description here

那么,微分区如何使查询优化器受益的方式是保持汇总数据可用,但是当查询需要不同的计数或AVG时,仍然需要计算操作?

谢谢。

1 个答案:

答案 0 :(得分:2)

我不是来自Snowflake,但我认为原因是因为将数据摄入表中时要收集不同数量和平均值的统计信息要比MIN复杂得多(需要更多空间+计算), MAX和COUNT。

如果要在元数据层中为每个微分区存储MIN,MAX和COUNT,则每列每个微分区最多只能存储3个值。如果要存储非重复计数,则它完全取决于微分区本身中的数据(例如,许多具有微分区的不同值,每个计数为1)。

我认为存储每个微分区的平均值或不同计数没有多大意义,因为当您执行平均值/差异计算时,无论如何几乎总是会在微分区之间计算它们,这意味着您将拥有一直重新计算该值。另外,您如何平均一个字符串?

还存储MIN / MAX / COUNT的全局值并在新数据进入表时更新这些值可能非常快,并且具有非常可预测的计算和元数据存储占用空间,但是计算AVG和COUNT DISTINCT的全局值却不那么容易