Créez et supprimez des tables non partitionnées, partitionnées, externes, en cluster, transactionnelles et Delta dans MaxCompute.
Type | Description | Autorisation requise | Outils d'exécution |
Crée une table non partitionnée, partitionnée, externe ou en cluster. | Requiert l'autorisation CreateTable sur le projet. | Exécutez ces commandes via : | |
Supprime une table partitionnée ou non partitionnée. | Requiert l'autorisation Drop sur la table. |
Création d'une table
Créez des tables non partitionnées, partitionnées, externes ou en cluster.
Limitations
Une table partitionnée peut comporter jusqu'à six niveaux de partition. Par exemple, vous pouvez utiliser une date comme colonne de partition et définir des niveaux tels que
year/month/week/day/hour/minute.Le nombre maximal de partitions par table est configurable au niveau du projet, avec une valeur par défaut de 60 000.
D'autres limitations relatives aux tables sont documentées dans Limites de SQL MaxCompute.
Syntaxe
Table interne
Création d'une table interne (non partitionnée ou partitionnée)
CREATE [OR REPLACE] TABLE [IF NOT EXISTS] <table_name> (
<col_name> <data_type>, ... )
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type> [COMMENT <col_comment>], ...)]
[AUTO PARTITIONED
BY (<auto_partition_expression> [AS <auto_partition_column_name>])
[TBLPROPERTIES('ingestion_time_partition'='true')]
];
Table en cluster
Création d'une table en cluster
CREATE TABLE [IF NOT EXISTS] <table_name> (
<col_name> <data_type>, ... )
[CLUSTERED BY | RANGE CLUSTERED BY (<col_name> [, <col_name>, ...])
[SORTED BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])]
INTO <number_of_buckets> BUCKETS];
Table externe
Création d'une table externe
Cet exemple crée une table externe OSS à l'aide de l'analyseur de données texte intégré. D'autres formats sont couverts dans Table externe ORC.
CREATE EXTERNAL TABLE [IF NOT EXISTS] <mc_oss_extable_name> (
<col_name> <data_type>, ... )
STORED AS '<file_format>'
[WITH SERDEPROPERTIES (options)]
LOCATION '<oss_location>';
Tables transactionnelles et Delta
-
Crée une table transactionnelle. Vous pouvez exécuter des opérations UPDATE ou DELETE sur ce type de table. Toutefois, les tables transactionnelles présentent des limitations.
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] <table_name> ( <col_name <data_type> [NOT NULL] [DEFAULT <default_value>] [COMMENT <col_comment>], ... [COMMENT <table_comment>] [TBLPROPERTIES ("transactional"="true")]; -
Crée une table Delta. Lorsqu'elle est combinée à une clé primaire, elle permet d'effectuer des opérations telles que les upserts, les requêtes incrémentielles et le time travel.
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] <table_name> ( <col_name <data_type> [NOT NULL] [DEFAULT <default_value>] [COMMENT <col_comment>], ... [PRIMARY KEY (<pk_col_name>[, <pk_col_name2>, ...] )]) [COMMENT <table_comment>] [CLUSTERED BY (<pk_col_name>[, <pk_col_name2>, ...] )] [TBLPROPERTIES ("transactional"="true" [, "write.bucket.num" = "N", "acid.data.retain.hours"="hours"...])] [LIFECYCLE <days>];-
Une table Delta dotée d'une clé primaire permet d'utiliser un sous-ensemble de la clé primaire comme clé de hachage de cluster.
Dans une table Delta avec clé primaire, le système utilise le clustering par hachage par défaut, en prenant la clé primaire complète comme clé de cluster. Si vos requêtes filtrent fréquemment sur un sous-ensemble des colonnes de la clé primaire, spécifiez explicitement ce sous-ensemble comme clé de cluster pour améliorer les performances de filtrage.
-
Si vous spécifiez explicitement une clé de cluster, le système distribue les données de la table dans des compartiments de hachage basés sur les colonnes spécifiées. La clé de cluster doit être un sous-ensemble des colonnes de la clé primaire.
Si vous ne spécifiez pas explicitement de clé de cluster, le système utilise l'ensemble complet des colonnes de la clé primaire comme clé de cluster par défaut.
Vous ne pouvez pas modifier la clé de cluster après la création de la table. Vous devez la spécifier lors de la création.
-
Clauses CTAS et LIKE
-
Crée une nouvelle table basée sur une table existante et copie les données, mais ne copie pas les propriétés de partition. Cette clause s'applique aux tables externes et aux tables des projets Lakehouse externes.
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] AS <select_statement>; -
Crée une nouvelle table ayant la même structure qu'une table existante, sans copier les données. Cette clause s'applique aux tables externes et aux tables des projets Lakehouse externes.
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] LIKE <existing_table_name>;
Paramètres
Paramètres généraux
Paramètres généraux
Paramètre | Obligatoire | Description | Remarques |
OR REPLACE | Non |
| Cela équivaut à exécuter les commandes suivantes : |
EXTERNAL | Non | Crée une table externe. | S.O. |
IF NOT EXISTS | Non | Crée la table uniquement si aucune table portant le même nom n'existe déjà. | Sans la clause IF NOT EXISTS, la création d'une table portant un nom dupliqué renvoie une erreur. Avec la clause IF NOT EXISTS, l'instruction aboutit même si une table portant le même nom existe mais possède un schéma différent. Les métadonnées de la table existante restent inchangées. |
table_name | Oui | Nom de la table. | Le nom de la table doit comporter au maximum 128 octets et contenir uniquement des lettres, des chiffres et des traits de soulignement (_). La casse n'est pas significative. Il est recommandé de commencer le nom par une lettre. |
PRIMARY KEY(pk) | Non | Clé primaire de la table. | Définissez une ou plusieurs colonnes comme clé primaire pour garantir l'unicité de la combinaison de colonnes. Respectez la syntaxe standard SQL des clés primaires. Les colonnes de clé primaire doivent être définies avec la contrainte NOT NULL et ne peuvent pas être modifiées. Important Ce paramètre s'applique uniquement à une Delta Table. |
col_name | Oui | Nom de la colonne. |
|
col_comment | Non | Commentaire de la colonne. | Doit être une chaîne de caractères d'au plus 1 024 octets. |
data_type | Oui | Type de données de la colonne. | Types pris en charge : BIGINT, DOUBLE, BOOLEAN, DATETIME, DECIMAL, STRING et autres types répertoriés dans la section Types de données. |
NOT NULL | Non | Indique que la colonne ne peut pas contenir de valeurs NULL. | Pour plus d'informations sur la modification de la propriété NOT NULL, consultez la section Opérations sur les partitions. |
default_value | Non | Valeur par défaut de la colonne. | Si une opération Remarque Les fonctions telles que |
table_comment | Non | Commentaire de la table. | Doit être une chaîne de caractères d'au plus 1 024 octets. |
LIFECYCLE | Non | Durée de vie de la table, exprimée en jours. | Seuls les entiers positifs sont pris en charge. L'unité est le jour.
|
Paramètres des tables partitionnées
Paramètres des tables partitionnées
MaxCompute prend en charge les tables partitionnées standard et les tables à partitionnement automatique. Choisissez l'option appropriée selon la méthode de génération des colonnes de partition. Consultez la section Présentation des tables partitionnées.
Paramètres des tables partitionnées standard
Paramètre | Obligatoire | Description | Remarques |
PARTITIONED BY | Oui | Spécifie les partitions d'une table partitionnée standard. | Vous pouvez spécifier les partitions à l'aide de PARTITIONED BY ou AUTO PARTITIONED BY, mais pas des deux simultanément. |
col_name | Oui | Nom de la colonne de partition. |
|
data_type | Oui | Type de données de la colonne de partition. | MaxCompute V1.0 prend uniquement en charge le type STRING. La version V2.0 ajoute les types TINYINT, SMALLINT, INT, BIGINT et VARCHAR (le type STRING reste pris en charge). Consultez la liste complète dans la section Types de données. Le partitionnement élimine les analyses complètes de table pour les opérations au niveau des partitions. |
col_comment | Non | Commentaire de la colonne de partition. | Doit être une chaîne de caractères d'au plus 1 024 octets. |
Une valeur de partition doit comporter au maximum 255 octets. Elle ne peut pas contenir de caractères double-octet, tels que les caractères chinois. La valeur doit commencer par une lettre et contenir uniquement des lettres, des chiffres ainsi que les caractères suivants : espace, deux-points (:), trait de soulignement (_), signe dollar ($), dièse (#), point (.), point d'exclamation (!) et arobase (@). Le comportement des autres caractères, tels que les caractères d'échappement \t, \n et /, n'est pas défini.
Paramètres des tables à partitionnement automatique
Une table à partitionnement automatique génère automatiquement les colonnes de partition. Pour plus de détails sur l'utilisation, consultez la section Types de tables partitionnées.
|
Paramètre |
Obligatoire |
Description |
Remarques |
|
AUTO PARTITIONED BY |
Oui |
Spécifie les partitions d'une table à partitionnement automatique. |
Vous pouvez spécifier les partitions à l'aide de PARTITIONED BY ou AUTO PARTITIONED BY, mais pas des deux simultanément. |
|
auto_partition_expression |
Oui |
Expression qui définit le calcul de la colonne de partition. Actuellement, seule la fonction TRUNC_TIME peut être utilisée pour générer la colonne de partition. Une seule colonne de partition est prise en charge. |
La fonction TRUNC_TIME permet de tronquer les données d'une colonne de type heure ou date selon une unité de temps spécifiée afin de générer une colonne de partition. |
|
auto_partition_column_name |
Non |
Nom de la colonne de partition générée. Si aucun nom n'est spécifié, le système utilise |
Sur la base du calcul issu de l'expression de partition, une colonne de partition de type STRING est générée. Vous pouvez spécifier explicitement un nom pour cette colonne, mais vous ne pouvez pas modifier directement son type de données ni sa valeur. |
|
TBLPROPERTIES('ingestion_time_partition'='true') |
Non |
Indique si les colonnes de partition doivent être générées en fonction de l'heure d'ingestion des données. |
Le partitionnement basé sur l'heure d'ingestion est décrit dans la section Tables à partitionnement automatique basées sur l'heure d'ingestion des données. |
Paramètres des tables clusterisées
Paramètres des tables clusterisées
Les tables clusterisées se divisent en tables clusterisées par hachage et en tables clusterisées par plage.
Table clusterisée par hachage
|
Paramètre |
Obligatoire |
Description |
Remarques |
|
CLUSTERED BY |
Oui |
Spécifie la clé de hachage. MaxCompute calcule les valeurs de hachage pour les colonnes spécifiées et distribue les données dans des compartiments de hachage en fonction de ces valeurs. |
Pour éviter le déséquilibre des données et obtenir un bon parallélisme, choisissez des colonnes présentant une cardinalité élevée et peu de doublons pour la clause |
|
SORTED BY |
Oui |
Spécifie l'ordre de tri des colonnes au sein de chaque compartiment de hachage. |
Pour des performances optimales, utilisez les mêmes colonnes pour les clauses SORTED BY et CLUSTERED BY. Après avoir spécifié la clause SORTED BY, MaxCompute crée automatiquement un index et l'utilise pour accélérer les requêtes. |
|
number_of_buckets |
Oui |
Spécifie le nombre de compartiments de hachage. |
Cette valeur est obligatoire et dépend du volume de données. |
Lorsque vous sélectionnez le nombre de compartiments de hachage, respectez les deux principes suivants :
Maintenez une taille modérée pour les compartiments de hachage : la taille recommandée pour chaque compartiment est d'environ 500 Mo. Par exemple, si la taille estimée de la partition est de 500 Go, définissez le nombre de compartiments à 1 000. Cela donne une taille moyenne de compartiment d'environ 500 Mo. Pour les tables très volumineuses, vous pouvez dépasser la limite de 500 Mo. Une taille de 2 à 3 Go par compartiment est adaptée.
Pour optimiser les opérations
joinet supprimer les étapes de brassage (shuffle) et de tri, ce qui améliore considérablement les performances, le nombre de compartiments de hachage des deux tables doit être un multiple l'un de l'autre, par exemple 256 et 512. Il est recommandé de définir le nombre de compartiments de hachage sur une puissance de 2 (2n), telle que 512, 1 024, 2 048 ou 4 096. Cela permet au système de fractionner ou de fusionner automatiquement les compartiments de hachage et de supprimer les étapes de brassage et de tri, ce qui améliore l'efficacité d'exécution.
Table clusterisée par plage
|
Paramètre |
Obligatoire |
Description |
Remarques |
|
RANGE CLUSTERED BY |
Oui |
Spécifie les colonnes de clustering par plage. |
MaxCompute effectue des opérations de regroupement sur les colonnes spécifiées et distribue les données dans des compartiments en fonction des numéros de compartiment. |
|
SORTED BY |
Oui |
Spécifie l'ordre de tri des colonnes au sein de chaque compartiment. |
L'utilisation est identique à celle d'une table clusterisée par hachage. |
|
number_of_buckets |
Oui |
Spécifie le nombre de compartiments. |
Pour une table clusterisée par plage, la bonne pratique consistant à utiliser une puissance de 2 (2n), applicable aux tables clusterisées par hachage, n'est pas requise. Tout nombre de compartiments est acceptable si les données sont réparties uniformément. Ce paramètre est facultatif pour les tables clusterisées par plage. Si vous l'omettez, le système détermine automatiquement le nombre optimal de compartiments en fonction du volume de données. |
Lorsqu'une opération de jointure ou d'agrégation est effectuée sur une table clusterisée par plage, si la clé de jointure ou la clé de regroupement correspond à la clé de clustering par plage ou à son préfixe, vous pouvez éliminer la redistribution des données (suppression du brassage) pour améliorer les performances. Exécutez la commande set odps.optimizer.enable.range.partial.repartitioning=true/false; pour activer ou désactiver cette fonctionnalité. Elle est désactivée par défaut.
-
Avantages des tables clusterisées :
Optimisation de l'élagage des compartiments
Optimisation des agrégations
Optimisation du stockage
-
Limitations des tables clusterisées :
L'instruction
INSERT INTOn'est pas prise en charge. Vous pouvez ajouter des données uniquement à l'aide de l'instructionINSERT OVERWRITE.Le téléchargement direct de données vers une table clusterisée par plage à l'aide de Tunnel n'est pas pris en charge, car Tunnel télécharge les données de manière non ordonnée.
Les fonctionnalités de sauvegarde et de restauration ne sont pas prises en charge.
Paramètres des tables externes
Paramètres des tables externes
Cette rubrique présente les paramètres des tables externes OSS. Les autres types de tables externes sont documentés dans la section Tables externes.
|
Paramètre |
Obligatoire |
Description |
|
|
Oui |
Spécifie le paramètre |
|
|
Non |
Spécifie les paramètres liés à l'autorisation, à la compression et à l'analyse des caractères pour la table externe. |
|
oss_location |
Oui |
Emplacement de stockage OSS des données de la table externe. Pour plus d'informations, consultez la section Tables externes OSS. |
Paramètres des tables transactionnelles et Delta Table
Paramètres des tables transactionnelles et Delta Table
Paramètres Delta Table
Une Delta Table est un format de table qui prend en charge les lectures et écritures en temps quasi réel, le stockage et l'accès incrémentiels, ainsi que les mises à jour en temps réel. Seules les tables avec clé primaire sont actuellement prises en charge.
Paramètre | Obligatoire | Description | Remarques |
PRIMARY KEY(PK) | Oui | Définit la clé primaire de la Delta Table, qui peut inclure plusieurs colonnes. | La syntaxe suit la syntaxe standard SQL pour les clés primaires. Les colonnes de clé primaire doivent être définies sur NOT NULL et ne peuvent pas être modifiées. Une fois la clé primaire définie, les données sont dédoublonnées en fonction des colonnes de clé primaire. La contrainte d'unicité est appliquée au sein d'une seule partition ou d'une table non partitionnée. |
transactional | Oui | Requis pour la création d'une Delta Table. Vous devez définir ce paramètre sur | Indique que la table prend en charge les propriétés transactionnelles des tables ACID MaxCompute. La table utilise le modèle de contrôle de concurrence multiversion (MVCC) pour garantir le niveau d'isolation des instantanés. |
write.bucket.num | Non | La valeur par défaut est 16. La plage valide est | Spécifie le nombre de buckets pour chaque partition ou pour une table non partitionnée. Cela indique également le nombre de nœuds simultanés pour les écritures de données. Vous pouvez modifier ce paramètre pour une table partitionnée, et le nouveau paramètre s'applique aux nouvelles partitions. Vous ne pouvez pas modifier ce paramètre pour une table non partitionnée. Tenez compte des recommandations suivantes :
|
acid.data.retain.hours | Non | La valeur par défaut est 24. La plage valide est | Spécifie la plage de temps en heures pendant laquelle vous pouvez interroger les états historiques des données à l'aide de Time Travel. Si vous avez besoin d'un historique Time Travel supérieur à 168 heures (7 jours), contactez le support technique MaxCompute.
|
acid.incremental.query.out.of.time.range.enabled | Non | Valeur par défaut : | Si la valeur est |
acid.write.precombine.field | Non | Spécifie un nom de colonne unique. | Si un nom de colonne est spécifié, le système utilise cette colonne en combinaison avec les colonnes de clé primaire pour dédoublonner les données au sein de la même validation. Cela garantit l'unicité et la cohérence des données. Remarque Si une validation de données unique dépasse 128 Mo, plusieurs fichiers sont générés. Ce paramètre ne s'applique pas entre plusieurs fichiers. |
acid.partial.fields.update.enable | Non | Si la valeur est définie sur | Ce paramètre est défini lors de la création de la table. Il ne peut pas être modifié après la création de la table. |
-
Autres exigences de paramètres pour les Delta Tables :
LIFECYCLE : le cycle de vie de la table doit être supérieur ou égal à la période de rétention Time Travel, c'est-à-dire
lifecycle >= acid.data.retain.hours / 24. Une vérification est effectuée lors de la création de la table et une erreur est signalée si cette condition n'est pas remplie.Fonctionnalités non prises en charge :
CLUSTERED BY,EXTERNALetCREATE TABLE ASne sont pas pris en charge.
-
Autres limitations :
Actuellement, les autres moteurs ne peuvent pas opérer directement sur une Delta Table. Seul MaxCompute SQL est pris en charge.
Vous ne pouvez pas convertir une table standard en Delta Table.
Vous ne pouvez pas modifier le schéma des colonnes de clé primaire d'une Delta Table.
Paramètres des tables transactionnelles
|
Paramètre |
Obligatoire |
Description |
|
TBLPROPERTIES("transactional"="true") |
Oui |
Définit la table comme une table transactionnelle, activant les opérations |
Les limitations suivantes s'appliquent à une table transactionnelle :
-
Vous ne pouvez définir la propriété
transactionalque lors de la création d'une table. Vous ne pouvez pas utiliserALTER TABLEpour modifier cette propriété pour une table existante. L'instruction suivante renvoie une erreur :ALTER TABLE not_txn_tbl SET TBLPROPERTIES("transactional"="true"); -- Error returned. FAILED: Catalog Service Failed, ErrorCode: 151, Error Message: Set transactional is not supported Vous ne pouvez pas définir une table clusterisée ou une table externe comme table transactionnelle.
Vous ne pouvez pas convertir une table interne standard, une table externe ou une table clusterisée en table transactionnelle, ni l'inverse.
Le compactage automatique n'est pas pris en charge. Compactez manuellement les fichiers comme décrit dans la section Compacter les fichiers d'une table transactionnelle.
L'opération
merge partitionn'est pas prise en charge.L'accès aux tables transactionnelles depuis d'autres systèmes est limité. Par exemple, MaxCompute Graph ne prend pas en charge les opérations de lecture ou d'écriture. Spark et PAI ne prennent en charge que les opérations de lecture.
Avant d'effectuer des opérations
update,deleteouinsert overwritesur des données importantes, sauvegardez-les manuellement dans une autre table à l'aide d'une instructionSELECT...INSERT.
Créer une table (à partir d'une existante)
Créer une table (à partir d'une table existante)
-
Vous pouvez utiliser l'instruction
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] AS <select_statement>;pour créer une nouvelle table et y copier simultanément des données.Cette instruction ne copie pas les propriétés de partitionnement. Les colonnes de partition de la table source sont traitées comme des colonnes ordinaires dans la table de destination. La propriété de cycle de vie de la table source n'est pas non plus copiée.
Vous pouvez utiliser le paramètre lifecycle pour spécifier un cycle de vie pour la nouvelle table. Cette instruction prend également en charge la création d'une table interne et la copie de données depuis une table externe.
-
Vous pouvez utiliser l'instruction
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] LIKE <existing_table_name>;pour créer une nouvelle table dotée du même schéma qu'une table existante.Cette instruction copie le schéma, mais ne copie ni les données ni la propriété de cycle de vie de la table source.
Vous pouvez utiliser le paramètre lifecycle pour spécifier un cycle de vie pour la nouvelle table. Cette instruction prend également en charge la création d'une table interne qui copie le schéma d'une table externe.
Exemples
Table non partitionnée
-
Créez une table non partitionnée.
CREATE TABLE test1 (key STRING); -
Créez une table non partitionnée et spécifiez des valeurs par défaut pour les colonnes.
CREATE TABLE test_default( tinyint_name tinyint NOT NULL default 1Y, smallint_name SMALLINT NOT NULL DEFAULT 1S, int_name INT NOT NULL DEFAULT 1, bigint_name BIGINT NOT NULL DEFAULT 1, binary_name BINARY , float_name FLOAT , double_name DOUBLE NOT NULL DEFAULT 0.1, decimal_name DECIMAL(2, 1) NOT NULL DEFAULT 0.0BD, varchar_name VARCHAR(10) , char_name CHAR(2) , string_name STRING NOT NULL DEFAULT 'N', boolean_name BOOLEAN NOT NULL DEFAULT TRUE );
Table partitionnée
-
Créez une table partitionnée AUTO PARTITION qui génère des partitions basées sur une colonne de données temporelle à l'aide d'une fonction temporelle.
-- The sale_date column is truncated by month to generate a partition column named sale_month. The table is then partitioned by this column. CREATE TABLE IF NOT EXISTS auto_sale_detail( shop_name STRING, customer_id STRING, total_price DOUBLE, sale_date DATE ) AUTO PARTITIONED BY (TRUNC_TIME(sale_date, 'month') AS sale_month); -
Créez une table partitionnée AUTO PARTITION qui génère des partitions basées sur l'heure d'ingestion des données. Le système récupère automatiquement l'heure d'écriture des données dans MaxCompute et génère des partitions à l'aide d'une fonction temporelle.
-- After the table is created, when data is written, the system automatically captures the data ingestion time (_partitiontime), truncates it by day, generates a partition column named sale_date, and then partitions the table by this column. CREATE TABLE IF NOT EXISTS auto_sale_detail2( shop_name STRING, customer_id STRING, total_price DOUBLE, _partitiontime TIMESTAMP_NTZ) AUTO PARTITIONED BY (TRUNC_TIME(_partitiontime, 'day') AS sale_date) TBLPROPERTIES('ingestion_time_partition'='true');
Table avec clustering par hachage ou par plage
-
Créez une table non partitionnée avec clustering par hachage.
CREATE TABLE t1 (a STRING, b STRING, c BIGINT) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets; -
Créez une table partitionnée avec clustering par hachage.
CREATE TABLE t2 (a STRING, b STRING, c BIGINT) PARTITIONED BY (dt STRING) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets; -
Créez une table non partitionnée avec clustering par plage.
CREATE TABLE t3 (a STRING, b STRING, c BIGINT) RANGE CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets; -
Créez une table partitionnée avec clustering par plage.
CREATE TABLE t4 (a STRING, b STRING, c BIGINT) PARTITIONED BY (dt STRING) RANGE CLUSTERED BY (c) SORTED BY (c);
Table transactionnelle
-
Créez une table transactionnelle non partitionnée.
CREATE TABLE t5(id BIGINT) TBLPROPERTIES ("transactional"="true"); -
Créez une table transactionnelle partitionnée.
CREATE TABLE IF NOT EXISTS t6(id BIGINT) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true");
Table interne
-
Créez une table interne en copiant des données depuis une table externe partitionnée. La table interne n'inclura pas les propriétés de partitionnement.
-
Créez une table externe OSS et une table interne MaxCompute. Créez une table interne à l'aide de CREATE TABLE AS.
-- Create an OSS external table and insert data into it. CREATE EXTERNAL TABLE max_oss_test(a INT, b INT, c INT) STORED AS TEXTFILE LOCATION "oss://oss-cn-hangzhou-internal.aliyuncs.com/<bucket_name>"; INSERT INTO max_oss_test VALUES (101, 1, 20241108), (102, 2, 20241109), (103, 3, 20241110); SELECT * FROM max_oss_test; -- Result a b c 101 1 20241108 102 2 20241109 103 3 20241110 -- Create an internal table by using CREATE TABLE AS. CREATE TABLE from_exetbl_oss AS SELECT * FROM max_oss_test; -- Query the new internal table. SELECT * FROM from_exetbl_oss; -- The result shows that all data is copied. a b c 101 1 20241108 102 2 20241109 103 3 20241110 -
Exécutez la commande
DESC from_exetbl_oss;pour afficher le schéma de la table interne. La commande renvoie la sortie suivante.+------------------------------------------------------------------------------------+ | Owner: ALIYUN$*********** | | Project: ***_*****_*** | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2023-01-10 15:16:33 | | LastDDLTime: 2023-01-10 15:16:33 | | LastModifiedTime: 2023-01-10 15:16:33 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 919 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | a | string | | | | b | string | | | | c | string | | | +------------------------------------------------------------------------------------+
-
-
Créez une table interne en copiant le schéma d'une table externe partitionnée. La table interne inclut les propriétés de partitionnement.
-
Créez la table interne
from_exetbl_like. Interrogez la table externe OSS depuis MaxCompute. Créez une table interne à l'aide de CREATE TABLE LIKE.-- Query the OSS external table from MaxCompute. SELECT * FROM max_oss_test; -- Result a b c 101 1 20241108 102 2 20241109 103 3 20241110 -- Create an internal table by using CREATE TABLE LIKE. CREATE TABLE from_exetbl_like LIKE max_oss_test; -- Query the new internal table. SELECT * FROM from_exetbl_like; -- Result: Only the table schema is returned. a b c -
Exécutez la commande
DESC from_exetbl_like;pour afficher le schéma de la table interne. La commande renvoie la sortie suivante.+------------------------------------------------------------------------------------+ | Owner: ALIYUN$************ | | Project: ***_*****_*** | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2023-01-10 15:09:47 | | LastDDLTime: 2023-01-10 15:09:47 | | LastModifiedTime: 2023-01-10 15:09:47 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 0 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | a | string | | | | b | string | | | +------------------------------------------------------------------------------------+ | Partition Columns: | +------------------------------------------------------------------------------------+ | c | string | | +------------------------------------------------------------------------------------+
-
Table Delta
-
Créez une table Delta.
CREATE TABLE mf_tt (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT) TBLPROPERTIES ("transactional"="true"); -
Créez une table Delta et définissez des propriétés de table clés.
CREATE TABLE mf_tt2 ( pk BIGINT NOT NULL, pk2 BIGINT NOT NULL, val BIGINT, val2 BIGINT, PRIMARY KEY (pk, pk2) ) TBLPROPERTIES ( "transactional"="true", "write.bucket.num" = "64", "acid.data.retain.hours"="120" ) LIFECYCLE 7;
Autres méthodes
Remplacer une table existante
-
Créez la table d'origine
my_tableet insérez-y des données.CREATE OR REPLACE TABLE my_table(a BIGINT); INSERT INTO my_table(a) VALUES (1),(2),(3); -
Utilisez
OR REPLACEpour créer une nouvelle table portant le même nom et modifiez ses colonnes.CREATE OR REPLACE TABLE my_table(b STRING); -
Interrogez la table
my_table. La requête renvoie le résultat suivant.+------------+ | b | +------------+ +------------+Les instructions SQL suivantes sont invalides :
CREATE OR REPLACE TABLE IF NOT EXISTS my_table(b STRING); CREATE OR REPLACE TABLE my_table AS SELECT; CREATE OR REPLACE TABLE my_table LIKE newtable;
Copier des données et définir un cycle de vie
-- Create a new table named sale_detail_ctas1, copy the data from sale_detail to it, and set a lifecycle.
SET odps.sql.allow.fullscan=true;
CREATE TABLE sale_detail_ctas1 LIFECYCLE 10 AS SELECT * FROM sale_detail;
Exécutez la commande DESC EXTENDED sale_detail_ctas1; pour afficher des détails tels que le schéma et le cycle de vie de la table.
Dans cet exemple, sale_detail est une table partitionnée. Lorsque vous utilisez l'instruction CREATE TABLE ... AS select_statement ... pour créer la table sale_detail_ctas1, les propriétés de partitionnement ne sont pas copiées. Les colonnes de partition de la table source deviennent des colonnes ordinaires dans la table de destination. Par conséquent, sale_detail_ctas1 est une table non partitionnée comportant cinq colonnes.
Utiliser des constantes pour les valeurs de colonne
Si vous utilisez des constantes comme valeurs de colonne dans la clause SELECT, spécifiez les noms des colonnes. Sinon, les quatrième et cinquième colonnes de la table créée sale_detail_ctas3 recevront des noms par défaut tels que _c4 et _c5.
-
Spécifiez les noms des colonnes.
SET odps.sql.allow.fullscan=true; CREATE TABLE sale_detail_ctas2 AS SELECT shop_name, customer_id, total_price, '2013' AS sale_date, 'China' AS region FROM sale_detail; -
Ne spécifiez pas les noms des colonnes.
SET odps.sql.allow.fullscan=true; CREATE TABLE sale_detail_ctas3 AS SELECT shop_name, customer_id, total_price, '2013', 'China' FROM sale_detail;
Copier un schéma et définir un cycle de vie
CREATE TABLE sale_detail_like LIKE sale_detail LIFECYCLE 10;
Exécutez la commande DESC EXTENDED sale_detail_like; pour afficher des détails tels que le schéma et le cycle de vie de la table.
Le schéma de sale_detail_like est identique à celui de sale_detail. Toutes les propriétés, telles que les noms de colonne, les commentaires de colonne et les commentaires de table, sont copiées, à l'exception de la propriété de cycle de vie. Cependant, les données de sale_detail ne sont pas copiées dans la table sale_detail_like.
Copier un schéma depuis une table externe
-- Create a new table named mc_oss_extable_orc_like that has the same schema as the external table mc_oss_extable_orc.
CREATE TABLE mc_oss_extable_orc_like LIKE mc_oss_extable_orc;
Exécutez la commande DESC mc_oss_extable_orc_like; pour afficher des détails tels que le schéma de la table.
+------------------------------------------------------------------------------------+
| Owner: ALIYUN$****@***.aliyunid.com | Project: max_compute_7u************yoq |
| TableComment: |
+------------------------------------------------------------------------------------+
| CreateTime: 2022-08-11 11:10:47 |
| LastDDLTime: 2022-08-11 11:10:47 |
| LastModifiedTime: 2022-08-11 11:10:47 |
+------------------------------------------------------------------------------------+
| InternalTable: YES | Size: 0 |
+------------------------------------------------------------------------------------+
| Native Columns: |
+------------------------------------------------------------------------------------+
| Field | Type | Label | Comment |
+------------------------------------------------------------------------------------+
| id | string | | |
| name | string | | |
+------------------------------------------------------------------------------------+
Nouveaux types de données
SET odps.sql.type.system.odps2=true;
CREATE TABLE test_newtype (
c1 TINYINT,
c2 SMALLINT,
c3 INT,
c4 BIGINT,
c5 FLOAT,
c6 DOUBLE,
c7 DECIMAL,
c8 BINARY,
c9 TIMESTAMP,
c10 ARRAY<MAP<BIGINT,BIGINT>>,
c11 MAP<STRING,ARRAY<BIGINT>>,
c12 STRUCT<s1:STRING,s2:BIGINT>,
c13 VARCHAR(20))
LIFECYCLE 1;
DROP TABLE
Supprime une table non partitionnée ou une table partitionnée.
Précautions
Faites preuve de prudence lors de la suppression d'une table. Une table supprimée ne peut être restaurée que si la sauvegarde et la restauration sont activées pour le projet et que la table se trouve dans la période de rétention des données. La restauration nécessite la configuration d'une sauvegarde locale.
La suppression d'une table réduit l'utilisation du stockage du projet MaxCompute.
Syntaxe
DROP TABLE [IF EXISTS] <table_name>;
Paramètres
|
Paramètre |
Obligatoire |
Description |
|
IF EXISTS |
Non |
Sans IF EXISTS, la tentative de suppression d'une table inexistante renvoie une exception. Avec IF EXISTS, l'instruction aboutit même si la table n'existe pas. |
|
table_name |
Oui |
Nom de la table à supprimer. |
Exemples
-- Drop the sale_detail table. The statement succeeds regardless of whether the table exists.
DROP TABLE IF EXISTS sale_detail;
Références
Pour copier les données d'une table vers une autre table : CLONE TABLE.
Pour modifier et afficher les informations relatives aux tables : Modifier et afficher des tables.
Pour gérer les partitions de table existantes : Opérations sur les partitions.
Pour gérer les colonnes de table existantes : Opérations sur les colonnes.