Todos os produtos
Search
Central de documentação

AnalyticDB:CREATE TABLE AS SELECT (CTAS)

Última atualização: Jun 27, 2026

O comando CREATE TABLE AS SELECT (CTAS) cria uma tabela e a preenche com os resultados de uma consulta. O CTAS usa a mesma sintaxe do CREATE TABLE — incluindo a criação automática de índices para cada coluna — e adiciona uma cláusula SELECT para definir os dados iniciais da tabela.

Sintaxe

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

O CTAS e o CREATE TABLE compartilham os mesmos comportamentos padrão. Independentemente da instrução usada para criar a tabela, o sistema cria automaticamente um índice para cada coluna.

Parâmetros

Parâmetro

Obrigatório

Descrição

table_name

Sim

Nome da nova tabela. Deve ter de 1 a 127 caracteres e pode conter letras, dígitos e sublinhados (_). Precisa começar com letra ou sublinhado. Use db_name.table_name para diferenciar tabelas homônimas em bancos de dados distintos.

IF NOT EXISTS

Não

Ignora a criação da tabela caso table_name já exista.

IGNORE

Não

Verifica se já existe um registro com a mesma chave primária antes de gravar. Se houver correspondência, o sistema descarta o novo registro.

REPLACE

Não

Verifica se já existe um registro com a mesma chave primária antes de gravar. Caso encontre correspondência, o novo registro substitui o existente.

Exemplos

Todos os exemplos criam uma tabela new_customer a partir da seguinte tabela de origem:

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';

Copiar todas as colunas

Crie a tabela new_customer com as mesmas colunas e tipos de dados da tabela customer:

CREATE TABLE new_customer
AS
SELECT * FROM customer;

Copiar colunas específicas

Crie a tabela new_customer apenas com customer_id e customer_name:

CREATE TABLE new_customer
AS
SELECT customer_id, customer_name
FROM customer;

Definir chave primária e chave de distribuição

Copie customer_id e login_time e defina explicitamente a chave primária e a chave de distribuição na nova tabela:

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

Substituir o tipo de dados de uma coluna

Copie customer_id e login_time, defina a chave primária e a chave de distribuição e altere login_time de TIMESTAMP para 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;

Definir um índice invertido

Copie customer_id, customer_name e login_time e configure customer_id como coluna de índice invertido:

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