

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# 自動圧縮ありでテーブルをロードする
<a name="c_Loading_tables_auto_compress"></a>

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

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

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

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

## 自動圧縮の仕組み
<a name="c_Loading_tables_auto_compress-how-automatic-compression-works"></a>

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

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

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

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

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

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

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

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

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

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

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

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

自動圧縮は COPY コマンドでのみサポートされます。代わりに、テーブルを作成するときに圧縮エンコーディングを手動で適用できます。手動圧縮エンコーディングに関する詳細は、「[保存データのサイズを削減するための列圧縮](t_Compressing_data_on_disk.md)」を参照してください。

## 自動圧縮の例
<a name="r_COPY_COMPRESS_examples"></a>

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

**テーブルをロードし、自動的に圧縮するには、次の操作を実行します。**

1. テーブルが空であることを確認します。空のテーブルにのみ自動圧縮を適用できます:

   ```
   TRUNCATE biglist;
   ```

1. 単一の 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 行 (スライスごとに) が使用されます。

1. 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
   ```

1. 予想どおりの数の行がロードされたことを確認します。

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

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