雪花上的集群键选择

时间:2019-10-15 21:09:57

标签: snowflake-data-warehouse

(代表雪花用户提交)


问题: 为什么筛选器或搜索键(在where子句中使用的键)比按键排序或按键分组更好的群集键选择。


一种资源建议阅读: https://support.snowflake.net/s/article/case-study-how-clustering-can-improve-your-query-performance


另一个资源提到:

  

查询过滤器的性能会更好,因为对数据进行了排序,它将跳过所有不需要的行。

     

对于具有查询过滤器的场景,该查询过滤器不是排序顺序的一部分,而是group by和order by的列是数据排序顺序的一部分(聚集键),选择这些数据可能需要一些时间,但排序因为数据已经是有序的,所以会很容易。


第三种资源状态:

  

当您只选择表中全部数据的一小部分时,集群键对于WHERE子句很重要,因为它可以减少必须从Storage into the Compute读取的数据量当优化器可以为Query Pruning使用聚类密钥时。

     

您也可以使用聚类键来优化表插入,还可以查询输出(例如排序顺序)。

     

您的选择应取决于您的优先级,除非上面有一个关键内容,否则无法治愈所有问题。


用户回答以下问题的答案:

  

如果我总是按检索顺序插入行,是否还需要创建集群键?例如,如果始终使用date_timestamp查询表,并且如果我确保按date_timestamp按表顺序插入表,是否还需要在date_timestamp上创建集群键?


有什么想法,建议等吗?谢谢!

1 个答案:

答案 0 :(得分:2)

用于基于FILTER / GROUP / SORT选择群集密钥。第一个“资源”是正确的。  如果筛选器将导致修剪,那么可能是最好的选择(以便可以跳过数据。)如果必须读取所有/大部分数据,则在GROUP / SORT键上进行群集可能会很快(因此花费的时间更少)重新排序)These docs状态:

  

通常,当查询过滤或   按表的聚类键排序。排序通常用于   ORDER BY操作,GROUP BY操作以及某些联接。

对于第二个有关自然集群的问题,在那种情况下定义集群密钥几乎没有或没有性能优势。