我在Redshift上有一张约3亿条记录的表。
无论如何,我们可以将年月指定为分发密钥而不是时间戳。如果我选择键diststyle 会提高性能,因为大多数情况下我们需要查询季度数据。
最佳答案
您要做而不是想要这样做。
在Amazon Redshift中,分发密钥(DISTKEY
)用于在 slice 之间分发数据(每个节点有多个 slice )。当查询使用DISTKEY联接两个表时,由于两个表中与该键相关的数据都在同一片上,因此它的运行速度要快得多–无需在片之间移动数据,并且片可以并行操作。 DISTKEY应该是您最经常用于将 JOIN 表一起使用的字段。
还有一个排序键(SORTKEY
)对存储在 slice 上的数据进行排序。在WHERE
子句中使用此SORTKEY的查询将更有效地工作,因为该查询可以跳过磁盘上的块。每个1MB磁盘块都包含与一个表中的一列有关的值。每个块都有一个区域图,用于标识块中的最小值和最大值。如果该块不包含与WHERE子句匹配的值,则Redshift不需要读取该块。这使得查询非常快。
因此,如果您主要查询季度数据,则应将表的 SORTKEY 设置为timestamp字段。这将允许每个片并行处理数据,同时跳过无关的磁盘块。 请勿为DISTKEY 使用日期值-这将导致仅一个 slice 执行查询,并且运行速度会变慢。而是将DISTKEY设置为将该表与其他表(例如,客户ID)联接所常用的内容。