如何设计排序键中有许多列的表?
Posted
技术标签:
【中文标题】如何设计排序键中有许多列的表?【英文标题】:How to design table with many columns in sort key? 【发布时间】:2019-04-04 02:51:48 【问题描述】:我正在制作 redshift 原型,需要一些关于排序键设计的建议。我有一个包含 5 个数值和 20 列的表,可用于过滤。我使用日期作为 dist 键,但我迷失了排序键的设计。
我根据历史使用情况对排序列有权重,但是如何在 redshift 中处理这个问题。创建排序键 (col1, col2,.. col20) 似乎不是最好的方法。我是否使用前 5 个最常用的过滤器创建排序键?或者其他方法。
【问题讨论】:
【参考方案1】:您有很多选择,一点也不容易:) 基于感觉和您描述表格的方式,我认为您应该使用 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 !
【讨论】:
【参考方案2】:使用日期作为DISTKEY
是很不寻常的。
一般规则是:
将DISTKEY
设置为JOIN
语句中经常使用的列。这可确保两个表中的数据位于同一个切片上,因此它们可以 JOIN 而无需在切片之间传输数据。
将SORTKEY
设置为WHERE
语句中最常用的列。这使得“跳过”不包含相关数据的磁盘块更容易,因为每个块都标有列的最小值和最大值。
一般来说,避免使用交错排序,因为在运行VACUUM
时它需要太多开销。只需对WHERE
中最常用的字段进行排序,这通常是日期列。
见:Amazon Redshift Best Practices for Designing Tables
【讨论】:
以上是关于如何设计排序键中有许多列的表?的主要内容,如果未能解决你的问题,请参考以下文章