CREATE TABLE AS SELECT (CTAS) membuat tabel baru dan mengisinya dengan hasil kueri. CTAS menggunakan sintaksis yang sama dengan CREATE TABLE—termasuk pembuatan indeks otomatis untuk setiap kolom—dan menambahkan klausa SELECT untuk menentukan data awal tabel.
Sintaksis
CREATE TABLE [IF NOT EXISTS] <table_name> [table_definition]
[IGNORE|REPLACE] [AS] <query_statement>CTAS dan CREATE TABLE memiliki perilaku default yang sama. Terlepas dari pernyataan yang digunakan untuk membuat tabel, indeks akan dibuat secara otomatis untuk setiap kolom.
Parameter
| Parameter | Wajib | Deskripsi |
|---|---|---|
table_name | Ya | Nama tabel baru. Harus terdiri dari 1–127 karakter dan dapat berisi huruf, angka, serta garis bawah (_). Harus diawali dengan huruf atau garis bawah. Gunakan db_name.table_name untuk membedakan tabel dengan nama yang sama di database berbeda. |
IF NOT EXISTS | Tidak | Melewati pembuatan tabel jika table_name sudah ada. |
IGNORE | Tidak | Sebelum menulis catatan, memeriksa apakah sudah ada catatan dengan primary key yang sama. Jika ditemukan kecocokan, catatan baru akan dibuang. |
REPLACE | Tidak | Sebelum menulis catatan, memeriksa apakah sudah ada catatan dengan primary key yang sama. Jika ditemukan kecocokan, catatan baru akan menimpa catatan yang sudah ada. |
Contoh
Semua contoh berikut membuat tabel new_customer dari tabel sumber berikut:
CREATE TABLE customer (
customer_id BIGINT NOT NULL COMMENT 'Customer ID',
customer_name VARCHAR NOT NULL COMMENT 'Customer name',
phone_num BIGINT NOT NULL COMMENT 'Phone number',
city_name VARCHAR NOT NULL COMMENT 'City',
sex INT NOT NULL COMMENT 'Gender',
id_number VARCHAR NOT NULL COMMENT 'ID card number',
home_address VARCHAR NOT NULL COMMENT 'Home address',
office_address VARCHAR NOT NULL COMMENT 'Office address',
age INT NOT NULL COMMENT 'Age',
login_time TIMESTAMP NOT NULL COMMENT 'Logon time',
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 information table';Salin semua kolom
Buat tabel new_customer dengan kolom dan tipe data yang sama seperti customer:
CREATE TABLE new_customer
AS
SELECT * FROM customer;Salin kolom tertentu
Buat tabel new_customer hanya dengan kolom customer_id dan customer_name:
CREATE TABLE new_customer
AS
SELECT customer_id, customer_name
FROM customer;Tentukan primary key dan kunci distribusi
Salin kolom customer_id dan login_time, lalu definisikan secara eksplisit primary key dan kunci distribusi pada tabel baru:
CREATE TABLE new_customer (
PRIMARY KEY (customer_id, login_time)
)
DISTRIBUTED BY HASH (customer_id)
AS
SELECT customer_id, login_time
FROM customer;Ubah tipe data kolom
Salin kolom customer_id dan login_time, definisikan primary key dan kunci distribusi, serta ubah tipe data login_time dari TIMESTAMP menjadi 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;Definisikan inverted index
Salin kolom customer_id, customer_name, dan login_time, lalu tetapkan customer_id sebagai kolom inverted index:
CREATE TABLE new_customer (
INDEX a_idx (customer_id)
)
AS
SELECT customer_id, customer_name, login_time
FROM customer;