如何在排序键中设计具有许多列的表?

时间:2019-04-04 02:51:49

标签: amazon-redshift

我正在对redshift进行原型设计,并且需要一些有关排序键设计的建议。我有一个包含5个数值和20列的表格,可用于过滤。我将日期用作dist键,但由于排序键设计而迷失了。

我根据历史使用情况对排序列进行加权,但是如何在redshift中进行处理。创建排序键(col1,col2,.. col20)似乎不是执行此操作的最佳方法。是否使用前5个最常用的过滤器创建排序键?或其他方法。

2 个答案:

答案 0 :(得分:0)

您有很多选择,一点都不容易:)基于一种感觉以及如何描述表格,我认为您应该使用INTERLEAVED SORTKEY并最多添加8列。如果这些列没有散布,那么例如2列是在同一时间增长的日期,例如start,end或id同步增长的日期,这不是一个好的解决方案。如果数据均匀分布在8列上,那么这是一个非常好的SORTKEY选项。

您需要做很多测试,有很多选择,您是否只有此表或其他表?

另一个问题是,您将使用哪种类型的DISTSTYLE?桌子是小是大吗?您有多个选择,具体取决于每个节点上的可用空间量以及其他因素。如果有足够的空间,请一一尝试。

查看此处:https://docs.aws.amazon.com/redshift/latest/dg/viewing-distribution-styles.html

更多信息可以帮助我更好地指导您。检查此链接:https://docs.aws.amazon.com/redshift/latest/dg/tutorial-tuning-tables.html

GL!

答案 1 :(得分:0)

将日期用作DISTKEY很不常见。

一般规则是:

  • DISTKEY设置为JOIN语句中经常使用的列。这样可以确保两个表中的数据位于同一切片上,因此它们可以联接,而不必在切片之间传输数据。
  • SORTKEY设置为WHERE语句中最常用的列。这样可以更轻松地“跳过”不包含相关数据的磁盘块,因为每个磁盘块均用该列的最小值和最大值标记。

通常,避免使用交错排序,因为在运行VACUUM时它需要太多开销。只需对WHERE中最常用的字段(通常是“日期”列)进行排序。

请参阅:Amazon Redshift Best Practices for Designing Tables

相关问题