Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

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