LoginSignup
29
24

More than 5 years have passed since last update.

Redshiftでの各エンコーディング形式メモ

Posted at

Redshiftは列レベルで圧縮形式を選ぶことができ、これにより以下の効果が得られる。

  • ストレージスペースが節約
  • データのサイズが軽量化 => ディスク I/O の量が減少 => クエリパフォーマンスが向上

このエンコーディングの形式がいろいろあるので、公式の内容を元に軽くメモ。

エンコーディングの指定方法

エンコーディングの指定は、CREATE TABLEALTER TABLE時のみ。
既存のカラムのエンコーディングの変更はむりっぽい。

# 新規作成時
CREATE TABLE products (
  id INT encode delta,
  name CHAR(20) encode bytedict
);
# カラム追加時
ALTER TABLE products ADD created_at date encode delta32k;

各エンコーディングの特色

エンコーディングタイプ キーワード 説明
RAW raw 非圧縮
BYTEDICT bytedict 列のデータドメインが一意の値 256 個未満である場合に最適
DELTA delta, delta32k 列内の連続する値間の差を記録することによりデータを圧縮。
日時列にとって非常に有用
LZO lzo 非常に高い圧縮率と良好なパフォーマンスを実現
文字列などの自由形式テキストに最適
MOSTLY mostly8, mostly16, mostly32 列のデータ型よりも小さなサイズで格納。
値が-128-127であれば INT(4byte) -> MOSTLY8(2byte)
RUNLENGTH runlength 連続して繰り返される値を、値と連続発生数から成るトークンに置き換え、ディクショナリ化
データ値が連続して頻繁に繰り返されるテーブルに最適
ソートキーは非推奨
TEXT text255, text32k ブロックごとに、一意の単語の個別のディクショナリ
同じ単語が頻繁に出現する VARCHAR 列を圧縮する場合に有用

型別チェックリスト

INTEGER (SMALLINT, INT, BIGINT)

  • 同じ値が頻繁に繰り返されている => RUNLENGTH
  • 値が制限されている(256種類以内) => BYTEDICT
  • 値が連続している => DELTA
  • 値の大半が小さな値 => MOSTLY
  • その他 => RAW

REAL, DOUBLE PRECISION

  • 同じ値が頻繁に繰り返されている => RUNLENGTH
  • 値が制限されている(256種類以内) => BYTEDICT
  • その他 => RAW

DECIMAL

  • 同じ値が頻繁に繰り返されている => RUNLENGTH
  • 値が制限されている(256種類以内) => BYTEDICT
  • 値が連続している => DELTA
  • 値の大半が小さな値 => MOSTLY
  • その他 => RAW

DATE, TIMESTAMP

  • 同じ値が頻繁に繰り返されている => RUNLENGTH
  • 値が制限されている(256種類以内) => BYTEDICT
  • 値が連続している => DELTA
  • その他 => LZO

VARCHAR

  • 同じ値が頻繁に繰り返されている => RUNLENGTH
  • 値が制限されている(256種類以内) => BYTEDICT
  • 値が連続している => DELTA
  • 値の大半が小さな値 => MOSTLY
  • 同じ単語が頻繁に出現する => TEXT
  • その他 => LZO

参考

29
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
24