Tous les produits
Search
Centre de documentation

AnalyticDB:CREATE TABLE AS SELECT (CTAS)

Dernière mise à jour :Aug 10, 2026

CREATE TABLE AS SELECT (CTAS) crée une nouvelle table et la remplit avec les résultats d'une requête. L'instruction CTAS reprend la syntaxe de CREATE TABLE — y compris la création automatique d'un index pour chaque colonne — en y ajoutant une clause SELECT pour définir les données initiales de la table.

Syntaxe

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

Les instructions CTAS et CREATE TABLE partagent les mêmes comportements par défaut. Un index est automatiquement créé pour chaque colonne, quelle que soit l'instruction utilisée pour créer la table.

Paramètres

Paramètre Obligatoire Description
table_name Oui Nom de la nouvelle table. Doit contenir entre 1 et 127 caractères (lettres, chiffres et traits de soulignement _). Le premier caractère doit être une lettre ou un trait de soulignement. Utilisez db_name.table_name pour distinguer les tables homonymes dans différentes bases de données.
IF NOT EXISTS Non Ignore la création de la table si table_name existe déjà.
IGNORE Non Avant d'insérer un enregistrement, vérifie s'il existe déjà un enregistrement avec la même clé primaire. Si tel est le cas, ignore le nouvel enregistrement.
REPLACE Non Avant d'insérer un enregistrement, vérifie s'il existe déjà un enregistrement avec la même clé primaire. Si tel est le cas, écrase l'enregistrement existant par le nouveau.

Exemples

Tous les exemples suivants créent une table new_customer à partir de la table source suivante :

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

Copier toutes les colonnes

Créez la table new_customer avec les mêmes colonnes et types de données que la table customer :

CREATE TABLE new_customer
AS
SELECT * FROM customer;

Copier des colonnes spécifiques

Créez la table new_customer en ne conservant que les colonnes customer_id et customer_name :

CREATE TABLE new_customer
AS
SELECT customer_id, customer_name
FROM customer;

Définir une clé primaire et une clé de distribution

Copiez les colonnes customer_id et login_time, et définissez explicitement la clé primaire et la clé de distribution de la nouvelle table :

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

Remplacer le type de données d'une colonne

Copiez les colonnes customer_id et login_time, définissez la clé primaire et la clé de distribution, et changez le type de la colonne login_time de TIMESTAMP en 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;

Définir un index inversé

Copiez les colonnes customer_id, customer_name et login_time, et définissez customer_id comme colonne d'index inversé :

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