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

字节词典编码

在字节词典编码中,会为磁盘上的每个列值数据块创建单独的唯一值词典。(一个 Amazon Redshift 磁盘数据块占用 1 MB 的空间。)词典最多包含 256 个单字节值,它们作为原始数据值的索引存储。如果单个数据块中存储的值多于 256 个,则多余的值会以原始、未压缩的形式写入该数据块中。针对每个磁盘数据块重复这一过程。

当列包含有限数量的唯一值时,该编码非常有效。如果列的数据域少于 256 个唯一值,则该编码是最佳的编码。当 CHAR 列包含长字符串时,字节词典编码的空间效率会非常高。

注意

用于 VARCHAR 列时,字节词典编码有时并不高效。将 BYTEDICT 用于大型 VARCHAR 列可能导致占用的磁盘空间过多。对于 VARCHAR 列,我们强烈建议您使用 LZO 等其他编码。

假设某个表包含数据类型为 CHAR(30) 的 COUNTRY 列。在加载数据时,Amazon Redshift 会创建词典并使用索引值填充 COUNTRY 列。该词典包含已建立索引的唯一值,而表本身则只包含相应值的下标(只占一个字节)。

注意

固定长度字符列存储有尾随空格。因此,对 CHAR(30) 列使用字节词典编码时,每个压缩值可节约 29 个字节的存储空间。

下表列出了 COUNTRY 列的词典:

唯一数据值 词典索引 大小(固定长度,每个值 30 个字节)
England 0 30
United States of America 1 30
Venezuela 2 30
Sri Lanka 3 30
Argentina 4 30
Japan 5 30
总计 180

下表列出了 COUNTRY 列中的值:

原始数据值 原始大小(固定长度,每个值 30 个字节) 压缩值(索引) 新的大小(字节)
England 30 0 1
England 30 0 1
United States of America 30 1 1
United States of America 30 1 1
Venezuela 30 2 1
Sri Lanka 30 3 1
Argentina 30 4 1
Japan 30 5 1
Sri Lanka 30 3 1
Argentina 30 4 1
总计 300 10

本示例中的总计压缩大小按照如下方式计算:词典中存储着 6 个不同的条目 (6 * 30 = 180),表包含 10 个 1 字节的压缩值,总共占用 190 个字节。