我正在对redshift进行原型设计,并且需要一些有关排序键设计的建议。我有一个包含5个数值和20列的表格,可用于过滤。我将日期用作dist键,但由于排序键设计而迷失了。
我根据历史使用情况对排序列进行加权,但是如何在redshift中进行处理。创建排序键(col1,col2,.. col20)似乎不是执行此操作的最佳方法。是否使用前5个最常用的过滤器创建排序键?或其他方法。
答案 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
中最常用的字段(通常是“日期”列)进行排序。