Amazon Redshift で列エンコーディングを設計したいと考えています。
簡単な説明
Amazon Redshift で列エンコーディングを設定するには、ENCODE AUTO および ANALYZE COMPRESSION コマンドを使用します。詳細については、「圧縮のエンコード」を参照してください。
ソートキー列に圧縮を適用すると、特定のクエリタイプに対するブロックスキャンが追加されるため、クエリのパフォーマンスが低下する可能性があります。テーブルのエンコーディングタイプを手動で指定する場合は、ソートキー列に RAW エンコーディングを設定します。
詳細については、「Amazon Redshift でのテーブル設計のベストプラクティス」を参照してください。
解決策
ENCODE AUTO を使用して列圧縮の効果を最大化する
ENCODE AUTO を使用すると、Amazon Redshift テーブルの列圧縮が自動的に最適化されます。デフォルトでは、ENCODE AUTO はクラスターのワークロードパターンを継続的に分析してクエリのパフォーマンスを最大化し、手動での圧縮管理の必要性を軽減します。
テーブル内のいずれかの列にエンコーディングタイプを指定すると、ENCODE AUTO は無効になります。
テーブルで ENCODE AUTO が有効かどうかを確認するには、次のクエリを使用します。
SELECT "table", encoded FROM svv_table_info WHERE "table" = 'table_name';
注: table_name を使用するテーブルの名前に置き換えてください。
ANALYZE COMPRESSION コマンドを実行し、テーブルの分析情報を確認する
圧縮分析を行い、テーブルの圧縮エンコーディングに関する提案を含むレポートを作成するには、ANALYZE COMPRESSION コマンドを実行します。
ANALYZE COMPRESSION lineitem;
注: lineitem を実際のテーブル名に置き換えてください。
出力例:
Table | Column | Encoding | Est_reduction_pct
----------+-----------------+----------+-------------------
lineitem | l_orderkey | raw | 0.00
lineitem | l_partkey | az64 | 33.34
lineitem | l_suppkey | az64 | 45.46
lineitem | l_linenumber | az64 | 87.88
lineitem | l_quantity | az64 | 80.00
lineitem | l_extendedprice | az64 | 60.32
lineitem | l_discount | az64 | 90.77
lineitem | l_tax | az64 | 90.77
lineitem | l_returnflag | zstd | 80.99
lineitem | l_linestatus | zstd | 86.86
lineitem | l_shipdate | az64 | 61.15
lineitem | l_commitdate | az64 | 61.26
lineitem | l_receiptdate | az64 | 61.15
lineitem | l_shipinstruct | zstd | 96.50
lineitem | l_shipmode | bytedict | 88.89
lineitem | l_comment | zstd | 70.36
lineitem | l_dummy | zstd | 99.97
(17 rows)
注: レポートには、各列について、RAW エンコーディングと比較して削減できる可能性のあるディスク容量の推定値が含まれています。
(オプション) テーブル定義を確認し、ANALYZE COMPRESSION コマンドの出力を把握しやすくします。次のコマンドを実行します。
SHOW TABLE lineitem;
注: lineitem を実際のテーブル名に置き換えてください。
出力例:
Show Table DDL statement
-------------------------------------------------
CREATE TABLE public.lineitem (
l_orderkey integer ENCODE raw,
l_partkey integer ENCODE raw,
l_suppkey integer ENCODE raw,
l_linenumber integer ENCODE raw,
l_quantity numeric(15,2) ENCODE raw,
l_extendedprice numeric(15,2) ENCODE raw,
l_discount numeric(15,2) ENCODE raw,
l_tax numeric(15,2) ENCODE raw,
l_returnflag character(1) ENCODE raw,
l_linestatus character(1) ENCODE raw,
l_shipdate date ENCODE raw,
l_commitdate date ENCODE raw,
l_receiptdate date ENCODE raw,
l_shipinstruct character(25) ENCODE raw,
l_shipmode character(10) ENCODE raw,
l_comment character varying(44) ENCODE raw,
l_dummy character varying(10) ENCODE raw
)
DISTSTYLE AUTO
SORTKEY ( l_orderkey );
(1 row)
ANALYZE COMPRESSION は提案ツールとして機能するため、テーブルの列エンコーディングを変更することはありません。推奨エンコーディングを適用するには、テーブルを再作成するか、ALTER TABLE コマンドを実行します。
ALTER TABLE lineitem ALTER COLUMN l_dummy ENCODE example_compression;
注: lineitem をテーブル名に、l_dummy を列名に、example_compression を使用する圧縮エンコーディングに置き換えてください。
関連情報
Amazon Redshift でロックを検出して解放する方法を教えてください
列圧縮を行い、保存されるデータサイズを削減する