メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012年12月1日)

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

データの自己評価に基づき、テーブルの列に圧縮エンコーディングを手動で適用できます。または、COPY コマンドを使用して自動的に圧縮を分析および適用できます。COPY コマンドを使用して自動圧縮を適用することを強くお勧めします。

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

自動圧縮では、圧縮エンコードを選択する際に全体的なパフォーマンスの負荷を分散させます。ソートキー列が、同じクエリ内の他の列よりもかなり高度に圧縮される場合、範囲が制限されたスキャンはパフォーマンスが低下する可能性があります。その結果、自動圧縮では、効率が低い圧縮エンコードを選択してソートキー列が他の列とのバランスの取れた状態を維持します。ただし、ANALYZE COMPRESSION はソートキーを考慮しないため、自動圧縮が選択するものよりもソートキーに別のエンコードを勧める場合があります。ANALYZE COMPRESSION を使用する場合、ソートキーのエンコードを RAW に変更することを検討してください。

自動圧縮の仕組み

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. テーブルが空であることを確認します。空のテーブルにのみ自動圧縮を適用できます:

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

    Copy
    copy biglist from 's3://mybucket/biglist.txt' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' delimiter '|' COMPUPDATE ON;

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

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

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

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

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

このページの内容: