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>
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 |
|
|
Sim |
Nome da nova tabela. Deve ter de 1 a 127 caracteres e pode conter letras, dígitos e sublinhados ( |
|
|
Não |
Ignora a criação da tabela caso |
|
|
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. |
|
|
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;