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

增量编码

对于 datetime 列,增量编码非常有用。

增量编码通过记录列中各个相邻值之间的差异来压缩数据。这种差异记录在磁盘上每个列值数据块的单独词典中。(一个 Amazon Redshift 磁盘数据块占用 1 MB 的空间。)例如,如果该列包含按 1 到 10 顺序排列的 10 个整数,则第一个值存储为 4 个字节的整数(加上 1 个字节的标志),后面的 9 个整数每个存储成值为 1(表明该值较前一个值大 1)的单个字节。

增量编码有两个版本:

  • DELTA 使用 1 字节的值(8 位整数)记录差值。

  • DELTA32K 使用 2 字节值(16 位整数)记录差值。

如果列中的大多数值可用单字节压缩,则 1 字节版本会非常高效;但是,如果增量较大,则在最坏情况下,这种编码甚至会比直接存储未压缩数据的效率还低。相似的逻辑也适用于 16 位版本。

如果两个值的差值超出 1 字节范围 (DELTA) 或 2 字节范围 (DELTA32K),则存储完整的原始值,并包含一个前置的 1 字节标志。1 字节的范围为 -127 到 127;2 字节的范围为 -32K 到 32K。

下表显示了对数值列应用增量编码的原理:

原始数据值 原始大小(字节) 差值(增量) 压缩值 压缩大小(字节)
1 4 1 1+4(标志 + 实际值)
5 4 4 4 1
50 4 45 45 1
200 4 150 150 1+4(标志 + 实际值)
185 4 -15 -15 1
220 4 35 35 1
221 4 1 1 1
总计 28 15