

 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/)を参照してください。

# CTAS の使用に関する注意事項
<a name="r_CTAS_usage_notes"></a>

## 制限
<a name="r_CTAS_usage_notes-limits"></a>

Amazon Redshift は、ノードタイプごとにクラスターあたりのテーブル数のクォータを適用します。

テーブルの最大文字数は 127 です。

1 つのテーブルで定義できる列の最大数は 1,600 です。

## 列属性とテーブル属性の継承
<a name="r_CTAS_usage_notes-inheritance-of-column-and-table-attributes"></a>

CREATE TABLE AS (CTAS) テーブルは、作成元のテーブルから制約、ID 列、デフォルトの列値、またはプライマリキーを継承しません。

CTAS テーブルの列圧縮エンコードは指定できません。Amazon Redshift では、次のように圧縮エンコードが自動的に割り当てられます。
+ ソートキーとして定義されている列には、RAW 圧縮が割り当てられます。
+ BOOLEAN、REAL、DOUBLE PRECISION、GEOMETRY、もしくは GEOGRAPHY の各データ型で定義されている列には、RAW 圧縮が割り当てられます。
+ SMALLINT、INTEGER、BIGINT、DECIMAL、DATE、TIME、TIMETZ、TIMESTAMP、または TIMESTAMPTZ として定義された列には AZ64 圧縮が割り当てられます。
+ CHAR、VARCHAR、または VARBYTE として定義されている列には、LZO 圧縮が割り当てられます。

詳細については、「[圧縮エンコード](c_Compression_encodings.md)」および「[データ型](c_Supported_data_types.md)」を参照してください。

列エンコーディングを明示的に割り当てるには、[CREATE TABLE](r_CREATE_TABLE_NEW.md) を使用します。

CTAS は、SELECT 句のクエリプランに基づいて新しいテーブルの分散スタイルとソートキーを決定します。

結合、集計、ORDER BY 句、LIMIT 句を含むクエリなど、複雑なクエリの場合、CTAS はクエリプランに基づいてベストエフォートで最適な分散スタイルとソートキーを選択します。

**注記**  
大きいデータセットや複雑なクエリで最良のパフォーマンスを得るために、テストの際には、通常のデータセットを使用することをお勧めします。

多くの場合、クエリプランを調べて、クエリオプティマイザがデータのソートと分散に使用する列 (ある場合) を確認することにより、CTAS が選択する分散キーとソートキーを予測できます。クエリプランの最上位ノードが単一のテーブルからのシンプルなシーケンシャルスキャンである場合 (XN Seq Scan)、CTAS は通常ソーステーブルの分散スタイルとソートキーを使用します。クエリプランの最上位ノードがシーケンシャルスキャン以外である場合 (XN Limit、XN Sort、XN HashAggregate など)、CTAS はクエリプランに基づいてベストエフォートで最適な分散スタイルとソートキーを選択します。

例えば、次のタイプの SELECT 句を使用して 5 つのテーブルを作成するとします。
+ シンプルな SELECT ステートメント 
+ Limit 句 
+ LISTID を使用した ORDER BY 句 
+ QTYSOLD を使用した ORDER BY 句 
+ GROUP BY 句を使用した SUM 集計関数です。

次の例は、各 CTAS ステートメントのクエリプランを示しています。

```
explain create table sales1_simple as select listid, dateid, qtysold from sales;
                           QUERY PLAN
----------------------------------------------------------------
 XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(1 row)


explain create table sales2_limit as select listid, dateid, qtysold from sales limit 100;
                              QUERY PLAN
----------------------------------------------------------------------
 XN Limit  (cost=0.00..1.00 rows=100 width=8)
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(2 rows)


explain create table sales3_orderbylistid as select listid, dateid, qtysold from sales order by listid;
                               QUERY PLAN
------------------------------------------------------------------------
 XN Sort  (cost=1000000016724.67..1000000017155.81 rows=172456 width=8)
   Sort Key: listid
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(3 rows)


explain create table sales4_orderbyqty as select listid, dateid, qtysold from sales order by qtysold;
                               QUERY PLAN
------------------------------------------------------------------------
 XN Sort  (cost=1000000016724.67..1000000017155.81 rows=172456 width=8)
   Sort Key: qtysold
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(3 rows)


explain create table sales5_groupby as select listid, dateid, sum(qtysold) from sales group by listid, dateid;
                              QUERY PLAN
----------------------------------------------------------------------
 XN HashAggregate  (cost=3017.98..3226.75 rows=83509 width=8)
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(2 rows)
```

各テーブルのディストリビューションキーとソートキーを表示するには、次に示すように PG\$1TABLE\$1DEF システムカタログテーブルのクエリを実行します。

```
select * from pg_table_def where tablename like 'sales%';

      tablename       |   column   | distkey | sortkey
----------------------+------------+---------+---------
 sales                | salesid    | f       |       0
 sales                | listid     | t       |       0
 sales                | sellerid   | f       |       0
 sales                | buyerid    | f       |       0
 sales                | eventid    | f       |       0
 sales                | dateid     | f       |       1
 sales                | qtysold    | f       |       0
 sales                | pricepaid  | f       |       0
 sales                | commission | f       |       0
 sales                | saletime   | f       |       0
 sales1_simple        | listid     | t       |       0
 sales1_simple        | dateid     | f       |       1
 sales1_simple        | qtysold    | f       |       0
 sales2_limit         | listid     | f       |       0
 sales2_limit         | dateid     | f       |       0
 sales2_limit         | qtysold    | f       |       0
 sales3_orderbylistid | listid     | t       |       1
 sales3_orderbylistid | dateid     | f       |       0
 sales3_orderbylistid | qtysold    | f       |       0
 sales4_orderbyqty    | listid     | t       |       0
 sales4_orderbyqty    | dateid     | f       |       0
 sales4_orderbyqty    | qtysold    | f       |       1
 sales5_groupby       | listid     | f       |       0
 sales5_groupby       | dateid     | f       |       0
 sales5_groupby       | sum        | f       |       0
```

結果の概要を次の表に示します。分かりやすいように、説明プランからコスト、行、幅の詳細を省略しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_CTAS_usage_notes.html)

CTAS ステートメントでは、分散スタイルとソートキーを明示的に指定できます。例えば、次のステートメントは、EVEN 分散を使用してテーブルを作成し、ソートキーとして SALESID を指定します。

```
create table sales_disteven
diststyle even
sortkey (salesid)
as
select eventid, venueid, dateid, eventname
from event;
```

## 圧縮エンコード
<a name="r_CTAS_usage_notes_encoding"></a>

ENCODE AUTO は、テーブルのデフォルトになっています。Amazon Redshift は、テーブル内のすべての列の圧縮エンコードを自動的に管理します。

## 受信データの分散
<a name="r_CTAS_usage_notes-distribution-of-incoming-data"></a>

受信データのハッシュ分散スキームが、ターゲットテーブルのスキームと同じ場合、データをロードするときに、データを物理的に分散させる必要はありません。例えば、新しいテーブルに分散キーが設定されており、同じキー列で分散されている別のテーブルからデータが挿入される場合、同じノードとスライスを使用してデータが所定の位置にロードされます。ただし、ソーステーブルとターゲットテーブルの両方が EVEN 分散に設定されている場合、データはターゲットテーブルで再分散されます。

## 自動 ANALYZE 操作
<a name="r_CTAS_usage_notes-automatic-analyze-operations"></a>

Amazon Redshift は、CTAS コマンドで作成したテーブルを自動的に分析します。最初に作成したとき、これらのテーブルに ANALYZE コマンドを実行する必要はありません。変更する場合は、他のテーブルと同じように分析する必要があります。