Redshift表为我的表分配了分配键和排序键



我有一个表,其中的列像record_id、creation_date、active_time、inactive_time和其他一些数据列。截至目前,该表中约有1200万条记录。表中的distinct'record_id'(varchar(6((值计数为:8M(数据分布在此列上是偶数(表中的不同"creation_date"(日期(值计数为:800(数据分布在此列上是偶数(集群细节-总共有16个切片。

如果我讨论这个表与其他表的联接,它主要基于列"record_id"one_answers"creation_date"。一些时间active_time和inactive_time也参与加入。

问题是:-

  1. 这个表的distribution_key应该取什么,record_id还是creation_Date
  2. 我应该拿什么排序键?正如我上面所说,activetime和inactivetime有时也会参与联接,那么我应该在排序键中包括这2列吗

亚马逊Redshift的一般规则是:

  • DISTKEY设置为JOIN中最常用的列
  • SORTKEY设置为WHERE中最常用的列

对于Redshift来说,一个有1200万行的表不是很大。即使你弄错了,它也会运行得很好。

我建议使用record_id的DISTKEY(因为它似乎经常是JOINed(。

将SORTKEY设置为您通常用来限制结果的值。它只能是一列。Redshift将按给定列的顺序存储行,并在每个1MB存储块中记住该列的最小值和最大值。这允许它"跳过"不包含该值的块。这使得查询运行得很快,因为它可以避免磁盘访问,而磁盘访问是任何数据库中最慢的部分。

请参阅:亚马逊Redshift设计表格的最佳实践-亚马逊Redshift

最新更新