为什么不将时间戳与交错排序键一起使用?

时间:2019-02-11 13:02:38

标签: amazon-redshift

我试图找出Amazon Redshift中不同类型的排序键,但遇到了奇怪的警告here,但没有解释:

  

重要提示:请勿在具有单调递增属性的列(例如标识列,日期或时间戳记)上使用交错式排序键。

但是,Amazon在自己的example中对日期列使用交织键具有良好的性能。

所以,我的问题是-此警告的解释是什么,我应该认真对待吗?更准确地说-在时间戳列上使用交错键是否存在问题?

3 个答案:

答案 0 :(得分:3)

我认为稍后可能会描述吸尘/重新索引问题:

  

表最初加载时,Amazon Redshift会分析   排序键列中值的分布并使用   排序键列的最佳交错信息。作为一个   表增长,排序键列中的值分布   可以尤其是在日期或时间戳记列中进行更改或倾斜。如果   偏斜变得太大,可能会影响性能。

因此,如果这是唯一原因,则仅表示您将对索引进行更多的维护。

答案 1 :(得分:3)

来自https://docs.aws.amazon.com/redshift/latest/dg/t_Sorting_data.html

  

将行添加到已包含数据的排序表中时,   未排序的区域会增长,这会对性能产生重大影响。   当表格使用交错排序时,效果会更大,   尤其是当排序列中包含增加的数据时   单调,例如日期或时间戳列

原始引用中的要点不是数据是日期或时间戳,而是“单调”增加,在这种情况下,这大概意味着顺序增加,例如事件时间戳或ID号。

答案 2 :(得分:0)

当您知道平均每天有X个行被处理并且要基于它进行过滤时,如果将date(不是时间戳记)列作为交错的排序键,则很有意义,如果您不打算使用它,则离开出来。 还要注意真空-当VACUUM进程正在进行时,它需要临时空间才能通过对数据进行排序然后合并成块来完成任务。在飞行途中取消VACUUM过程将导致无法回收多余的空间,因此,如果由于某种原因取消了集群中的任何Vacuum,则可以考虑增加空间。请参见链接https://docs.aws.amazon.com/redshift/latest/dg/r_VACUUM_command.html#r_VACUUM_usage_notes和第3点,最后一点是您特别感兴趣的。 在我看来,与插入的行数相比,表的增长非常迅速,因此不得不使用深度复制来创建自动表创建