すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:CREATE TABLE AS SELECT (CTAS)

最終更新日:Mar 29, 2026

CREATE TABLE AS SELECT (CTAS) は、新しいテーブルを作成し、クエリの結果でそのテーブルにデータを投入します。CTAS は、各列の自動インデックス作成を含む CREATE TABLE と同じ構文を共有し、テーブルの初期データを定義するために SELECT 句を追加します。

構文

CREATE TABLE [IF NOT EXISTS] <table_name> [table_definition]
[IGNORE|REPLACE] [AS] <query_statement>
説明

CTAS と CREATE TABLE は、同じデフォルトの動作を共有します。どのステートメントがテーブルを作成するかに関わらず、各列にインデックスが自動的に作成されます。

パラメーター

パラメーター必須説明
table_nameはい新しいテーブルの名前。1~127 文字である必要があり、文字、数字、およびアンダースコア (_) を含めることができます。文字またはアンダースコアで始まる必要があります。異なるデータベース間で同じ名前のテーブルを区別するために、db_name.table_name を使用します。
IF NOT EXISTSいいえtable_name が既に存在する場合、テーブルの作成をスキップします。
IGNOREいいえレコードを書き込む前に、同じプライマリキーを持つレコードが既に存在するかどうかを確認します。一致が見つかった場合、新しいレコードは破棄されます。
REPLACEいいえレコードを書き込む前に、同じプライマリキーを持つレコードが既に存在するかどうかを確認します。一致が見つかった場合、新しいレコードは既存のレコードを上書きします。

すべての例は、以下のソーステーブルから new_customer テーブルを作成します。

CREATE TABLE customer (
  customer_id   BIGINT    NOT NULL COMMENT '顧客 ID',
  customer_name VARCHAR   NOT NULL COMMENT '顧客名',
  phone_num     BIGINT    NOT NULL COMMENT '電話番号',
  city_name     VARCHAR   NOT NULL COMMENT '都市',
  sex           INT       NOT NULL COMMENT '性別',
  id_number     VARCHAR   NOT NULL COMMENT 'ID カード番号',
  home_address  VARCHAR   NOT NULL COMMENT '自宅住所',
  office_address VARCHAR  NOT NULL COMMENT '勤務先住所',
  age           INT       NOT NULL COMMENT '年齢',
  login_time    TIMESTAMP NOT NULL COMMENT 'ログイン時間',
  PRIMARY KEY (login_time, customer_id, phone_num)
)
DISTRIBUTED BY HASH(customer_id)
PARTITION BY VALUE(DATE_FORMAT(login_time, '%Y%m%d')) LIFECYCLE 30
COMMENT '顧客情報テーブル';

すべての列をコピー

customer と同じ列とデータの型を持つ new_customer を作成します。

CREATE TABLE new_customer
AS
SELECT * FROM customer;

特定の列をコピー

new_customercustomer_idcustomer_name のみで作成します。

CREATE TABLE new_customer
AS
SELECT customer_id, customer_name
FROM customer;

プライマリキーと分散キーの定義

customer_idlogin_time をコピーし、新しいテーブルでプライマリキーと分散キーを明示的に定義します。

CREATE TABLE new_customer (
  PRIMARY KEY (customer_id, login_time)
)
DISTRIBUTED BY HASH (customer_id)
AS
SELECT customer_id, login_time
FROM customer;

列のデータの型の上書き

customer_idlogin_time をコピーし、プライマリキーと分散キーを定義し、login_time のデータの型を TIMESTAMP から DATE に変更します。

CREATE TABLE new_customer (
  login_time DATE,
  PRIMARY KEY (customer_id, login_time)
)
DISTRIBUTED BY HASH (customer_id)
AS
SELECT customer_id, login_time
FROM customer;

転置インデックスの定義

customer_idcustomer_name、および login_time をコピーし、customer_id を転置インデックス列として定義します。

CREATE TABLE new_customer (
  INDEX a_idx (customer_id)
)
AS
SELECT customer_id, customer_name, login_time
FROM customer;