メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012-12-01)

デルタエンコード

デルタエンコードは、日時列にとって非常に有用です。

デルタエンコードは、列内の連続する値間の差を記録することにより、データを圧縮します。この差は、ディスク上の列値の各ブロックに対する個別のディクショナリに記録されます (Amazon Redshift ディスクブロックは 1 MB を占有します)。たとえば、連続する 10 個の整数 1~10 が列に含まれる場合、最初の整数は 4 バイト整数 (+ 1 バイトのフラグ) として格納され、次の 9 個の整数は、前の値よりも 1 大きいことを示す値 1 の単一バイトとしてそれぞれ格納されます。

デルタエンコードには、次の 2 つのバージョンがあります。

  • 差を 1 バイト値 (8 ビット整数) として記録する DELTA

  • 差を 2 バイト値 (16 ビット整数) として記録する DELTA32K

単一バイトを使用して列のほとんどの値を圧縮できる場合は、1 バイトバージョンが非常に効果的です。ただし、デルタがより大きい場合、このエンコードは非圧縮データを格納する場合よりも多少効果が低くなる可能性もあります。16 ビットバージョンにも同様の論理が当てはまります。

2 つの値間の差が 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