首页 > 解决方案 > Redshift 表适用于我的表的分配键和排序键

问题描述

我有一个表,其中列像 record_id、creation_date、active_time、inactive_time 和更多数据列。截至目前,表中有大约 12M 条记录。distinct 'record_id' (varchar(6)) values count in table is : 8M (data distribution is even on this column) distinct 'creation_date' (date) values count in table is : 800 (data distribution is even on this column) cluster详细信息 - 总切片为 16。

如果我谈论这个表与其他表的连接,它主要基于列'record_id'和'creation_date'。并且有一段时间 active_time 和 inactive_time 也参与了加入。

问题是:-

  1. 我应该将什么作为该表的 distribution_key,record_id 或 creation_Date ?
  2. 我应该拿什么排序键?正如我上面所说的 active_time 和 inactive_time 也参与了一段时间的连接,所以我应该在排序键中包含这 2 列吗?

标签: amazon-web-servicesamazon-redshift

解决方案


Amazon Redshift 的一般规则是:

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

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

我会推荐一个 DISTKEY record_id(因为它似乎经常被加入)。

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

请参阅:用于设计表的 Amazon Redshift 最佳实践 - Amazon Redshift


推荐阅读