本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 |