Mostly エンコード - Amazon Redshift

Mostly エンコード

Mostly エンコードは、列のデータ型が、格納された大部分の値で必要なサイズより大きい場合に有用です。このタイプの列に Mostly エンコードを指定して、列内の大部分の値を、より小さい標準ストレージサイズに圧縮することができます。圧縮できない残りの値は、raw 形式で格納されます。例えば、INT2 列などの 16 ビット列を 8 ビットストレージに圧縮できます。

一般的に、Mostly エンコードは次のデータ型に対して使用します。

  • SMALLINT/INT2 (16 ビット)

  • INTEGER/INT (32 ビット)

  • BIGINT/INT8 (64 ビット)

  • DECIMAL/NUMERIC (64 ビット)

列のデータ型のサイズに見合う Mostly エンコードの適切なバージョンを選択します。例えば、16 ビット整数列として定義された列に MOSTLY8 を適用します。MOSTLY16 を 16 ビットデータ型の列に適用したり、MOSTLY32 を 32 ビットデータ型の列に適用したりすることはできません。

列内の比較的多くの値を圧縮できない場合、Mostly エンコードは非圧縮の場合よりも効果が低くなります。これらのエンコードの 1 つを列に適用する前に、確認してください。現在ロードしようとしている (そして今後ロードする可能性が高い) 値のほとんどは、次のテーブルに示す範囲に収まるはずです。

エンコード 圧縮ストレージサイズ 圧縮できる値の範囲 (範囲外の値は raw として格納される)
MOSTLY8 1 バイト (8 ビット) -128~127
MOSTLY16 2 バイト (16 ビット) -32768~32767
MOSTLY32 4 バイト (32 ビット) -2147483648~+2147483647
注記

10 進値では、値が範囲内にあるかどうかを判断する場合に小数点を無視します。例えば、1,234.56 は 123,456 として扱われ、MOSTLY32 列で圧縮できます。

例えば、VENUE テーブルの VENUEID 列が raw 整数列として定義されている場合は、その値が 4 バイトのストレージを消費することを意味します。しかし、列の値の現在の範囲は 0309 です。したがって、VENUEID に対して MOSTLY16 エンコードを使用してこのテーブルを再作成および再ロードすると、その列の各値のストレージが 2 バイトに減少します。

別のテーブルで参照される VENUEID 値のほとんどが 0~127 の範囲内にある場合、その外部キー列を MOSTLY8 としてエンコードすることは妥当と言えます。選択を行う前に、参照テーブルデータに対していくつかのクエリを実行して、ほとんどの値が 8 ビット、16 ビット、または 32 ビットの範囲内にあるかどうかを確認する必要があります。

次の表は、MOSTLY8、MOSTLY16、および MOSTLY32 エンコードが使用される場合の特定の数値の圧縮サイズを示しています。

元の値 元の INT または BIGINT (バイト) MOSTLY8 圧縮サイズ (バイト) MOSTLY16 圧縮サイズ (バイト) MOSTLY32 圧縮サイズ (バイト)
1 4 1 2 4
10 4 1 2 4
100 4 1 2 4
1,000 4 raw データサイズと同じ 2 4
10000 4 2 4
20000 4 2 4
40000 8 raw データサイズと同じ 4
100000 8 4
2000000000 8 4