运行长度编码
运行长度编码将连续反复出现的值替换为一个包含该值及连续出现次数(连续出现长度)的令牌。系统会为磁盘上的每个列数值数据块创建单独的唯一值词典。(一个 Amazon Redshift 磁盘数据块占用 1 MB 的空间。) 该编码最适合数据值经常反复连续出现的表,例如,当表按这些值排序时。
例如,假设某个大型维度表中的列具有可预测的小型域,如可能值不足 10 个的 COLOR 列。即使没有对数据进行排序,这些值很可能会在整个表中按长序列排列。
我们不建议对指定为排序键的任何列应用运行长度编码。当数据块中包含相似的行数时,范围限制扫描可更好地执行。如果排序键列的压缩率远高于同一查询中的其他列,则范围限制扫描的执行效率可能会很差。
下表使用 COLOR 列的示例来讲解运行长度编码的工作原理。
原始数据值 | 原始大小(字节) | 压缩值(标记) | 压缩大小(字节) |
---|---|---|---|
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 |