All Products
Search
Document Center

AnalyticDB:CREATE TABLE AS SELECT (CTAS)

Last Updated:Mar 29, 2026

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>
Catatan

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

ParameterWajibDeskripsi
table_nameYaNama 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 EXISTSTidakMelewati pembuatan tabel jika table_name sudah ada.
IGNORETidakSebelum menulis catatan, memeriksa apakah sudah ada catatan dengan primary key yang sama. Jika ditemukan kecocokan, catatan baru akan dibuang.
REPLACETidakSebelum 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;