自動圧縮ありでテーブルをロードする - Amazon Redshift

自動圧縮ありでテーブルをロードする

データの独自の評価に基づいて、テーブルの列に圧縮エンコーディングを手動で適用できます。または、COMPUPDATE を ON に設定して COPY コマンドを使用すると、サンプルデータに基づいて自動的に圧縮を分析および適用できます。

新しいテーブルを作成し、ロードするときに自動圧縮を利用できます。COPY コマンドは、圧縮分析を実行します。また、すでに入力されているテーブルに ANALYZE COMPRESSION コマンドを実行すれば、データをロードしたり、テーブルの圧縮を変更したりすることなく圧縮分析を実行できます。例えば、既存のデータ定義言語 (DDL) ステートメントを保持しながら、将来の使用のためにテーブルの圧縮を分析する場合は、ANALYZE COMPRESSION を実行できます。

自動圧縮では、圧縮エンコードを選択する際に全体的なパフォーマンスの負荷を分散させます。ソートキー列が、同じクエリ内の他の列よりもかなり高度に圧縮される場合、範囲が制限されたスキャンはパフォーマンスが低下する可能性があります。その結果、自動圧縮はソートキー列のデータ分析フェーズをスキップし、ユーザー定義のエンコーディングタイプを保持します。

自動圧縮では、エンコードのタイプを明示的に定義していない場合、RAW エンコードが選択されます。ANALYZE COMPRESSION の動作は同じです。最適なクエリパフォーマンスを得るには、ソートキーに RAW を使用することを検討してください。

自動圧縮の仕組み

COMPUPDATE パラメータが ON になっている場合、COPY コマンドは、空のターゲットテーブルで COPY コマンドを実行し、すべてのテーブル列で RAW エンコーディングかエンコーディングなしが設定されている場合に、自動圧縮を適用します。

現在の圧縮エンコーディングに関係なく、空のテーブルに自動圧縮を適用するには、COMPUPDATE オプションを ON に設定して COPY コマンドを実行します。自動圧縮を無効にするには、COMPUPDATE オプションを OFF に設定して COPY コマンドを実行します。

すでにデータが含まれているテーブルには自動圧縮を適用できません。

注記

自動圧縮分析を実行するには、意味のあるサンプルを生成するために十分な行 (少なくともスライスごとに 100,000 行) がロードデータに含まれている必要があります。

自動圧縮では、ロード処理の一部として次の操作がバックグラウンドで実行されます。

  1. 行の初回サンプルが入力ファイルからロードされます。サンプルサイズは COMPROWS パラメータの値に基づきます。デフォルトは 100,000 です。

  2. 圧縮オプションは列ごとに選択されます。

  3. サンプル行がテーブルから削除されます。

  4. テーブルは、選択した圧縮エンコーディングで再作成されます。

  5. 入力ファイル全体がロードされ、新しいエンコーディングで圧縮されます。

COPY コマンドを実行すると、テーブルが完全にロードされ、圧縮され、使用する準備ができます。その後、追加でデータをロードする場合、追加された行は既存のエンコーディングに基づいて圧縮されます。

圧縮分析のみを実行する場合、ANALYZE COMPRESSION を実行します。完全な COPY を実行するよりも効率的です。その後、結果を評価し、自動圧縮を使用するのか、またはテーブルを手動で再作成するのかを決定できます。

自動圧縮は COPY コマンドでのみサポートされます。代わりに、テーブルを作成するときに圧縮エンコーディングを手動で適用できます。手動圧縮エンコーディングに関する詳細は、「列圧縮の操作」を参照してください。

自動圧縮の例

この例では、TICKIT データベースに「BIGLIST」という名前の LISTING テーブルのコピーが含まれており、約 300 万行をロードするときにこのテーブルに自動圧縮を適用するものと仮定します。

テーブルをロードし、自動的に圧縮するには、次の操作を実行します。
  1. テーブルが空であることを確認します。空のテーブルにのみ自動圧縮を適用できます:

    TRUNCATE biglist;
  2. 単一の COPY コマンドでテーブルをロードします。テーブルは空であっても、以前のエンコーディングが指定されている可能性があります。Amazon Redshift が圧縮分析を実行できるようにするために、COMPUPDATE パラメータを ON に設定します。

    COPY biglist FROM 's3://amzn-s3-demo-bucket/biglist.txt' IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' DELIMITER '|' COMPUPDATE ON;

    COMPROWS オプションを指定していないため、デフォルトであり、推奨のサンプルサイズである 100,000 行 (スライスごとに) が使用されます。

  3. BIGLIST テーブルの新しいスキーマを見て、自動的に選択されたエンコーディングスキームを確認します。

    SELECT "column", type, encoding from pg_table_def where tablename = 'biglist'; Column | Type | Encoding ----------------+-----------------------------+---------- listid | integer | az64 sellerid | integer | az64 eventid | integer | az64 dateid | smallint | none numtickets | smallint | az64 priceperticket | numeric(8,2) | az64 totalprice | numeric(8,2) | az64 listtime | timestamp without time zone | az64
  4. 予想どおりの数の行がロードされたことを確認します。

    select count(*) from biglist; count --------- 3079952 (1 row)

後に COPY または INSERT ステートメントを使用してこのテーブルに行が追加されるとき、同じ圧縮エンコーディングが適用されます。