Amazon Redshift
数据库开发人员指南 (API 版本 2012-12-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

Runlength 编码

Runlength 编码将连续反复出现的值替换为一个包含该值及连续出现次数(连续出现长度)的标记。系统会为磁盘上的每个列数值数据块创建单独的唯一值词典。(一个 Amazon Redshift 磁盘数据块占用 1 MB 的空间。)该编码最适合数据值经常反复连续出现的表,例如,当表按这些值排序时。

例如,如果某个大维度表中的列具有可预测的小型域(如可能值不足 10 个的 COLOR 列),则这些值很可能在表中出现较长的序列(即使并未排序数据)。

我们不建议对指定为排序键的任何列应用 runlength 编码。当数据块中包含相似的行数时,范围限制扫描可更好地执行。如果排序键列的压缩率远高于同一查询中的其他列,则范围限制扫描的执行效率可能会很差。

下表使用 COLOR 列的示例来讲解 runlength 编码的工作原理:

原始数据值 原始大小(字节) 压缩值(标记) 压缩大小(字节)
Blue 4 {2,Blue} 5
Blue 4 0
Green 5 {3,Green} 6
Green 5 0
Green 5 0
Blue 4 {1,Blue} 5
Yellow 6 {4,Yellow} 7
Yellow 6 0
Yellow 6 0
Yellow 6 0
总计 51 23