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_customer を customer_id と customer_name のみで作成します。
CREATE TABLE new_customer
AS
SELECT customer_id, customer_name
FROM customer;プライマリキーと分散キーの定義
customer_id と login_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_id と login_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_id、customer_name、および login_time をコピーし、customer_id を転置インデックス列として定義します。
CREATE TABLE new_customer (
INDEX a_idx (customer_id)
)
AS
SELECT customer_id, customer_name, login_time
FROM customer;