CREATE TABLE crée des tables non partitionnées, partitionnées, externes ou en cluster.
Limites
Une table partitionnée peut comporter jusqu'à 6 niveaux de partitions. Par exemple, une table partitionnée par date peut utiliser les niveaux suivants :
year/month/week/day/hour/minute.Par défaut, une table peut contenir jusqu'à 60 000 partitions. Cette limite est configurable pour chaque projet.
Pour connaître les autres limites applicables aux tables, consultez la rubrique Limitations SQL.
Syntaxe
Internal table
Créer une internal table (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')]
];
Clustered table
Créer une clustered table
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];
External table
Créer une external table
Cet exemple crée une external table OSS à l'aide de l'analyseur de données texte intégré. D'autres formats sont décrits dans la rubrique ORC external table.
CREATE EXTERNAL TABLE [IF NOT EXISTS] <mc_oss_extable_name> (
<col_name> <data_type>, ... )
STORED AS '<file_format>'
[WITH SERDEPROPERTIES (options)]
LOCATION '<oss_location>';
Transactional and Delta tables
-
Crée une transactional table. Vous pouvez exécuter des opérations UPDATE ou DELETE sur ce type de table. Toutefois, les transactional tables présentent certaines 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 Delta table. 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 Delta table dotée d'une clé primaire vous permet d'utiliser un sous-ensemble de la clé primaire comme clé de hachage pour le clustering.
Dans une Delta table avec clé primaire, le système utilise par défaut le hachage avec la clé primaire complète comme clé de clustering. 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 clustering afin d'améliorer les performances de filtrage.
-
Si vous spécifiez explicitement une clé de clustering, le système distribue les données de la table dans des buckets de hachage en fonction des colonnes indiquées. La clé de clustering doit être un sous-ensemble des colonnes de la clé primaire.
Si vous ne spécifiez pas explicitement de clé de clustering, le système utilise l'ensemble complet des colonnes de la clé primaire comme clé de clustering par défaut.
Vous ne pouvez pas modifier la clé de clustering après la création de la table. Vous devez la spécifier lors de la création de la table.
-
CTAS and LIKE clauses
-
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 partitionnement. Cette clause s'applique aux external tables et aux tables situées dans 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, mais sans copier les données. Cette clause s'applique aux external tables et aux tables situées dans des projets Lakehouse externes.
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] LIKE <existing_table_name>;
Paramètres
Common parameters
General parameters
Parameter | Required | Description | Remarks |
OR REPLACE | No |
| Cette option équivaut à l'exécution des commandes suivantes : |
EXTERNAL | No | Crée une external table. | N/A |
IF NOT EXISTS | No | Crée une table uniquement si aucune table portant le même nom n'existe déjà. | Sans la clause IF NOT EXISTS, la tentative de création d'une table dont le nom existe déjà renvoie une erreur. Avec la clause IF NOT EXISTS, l'instruction aboutit même si une table portant le même nom existe avec un schéma différent. Les métadonnées de la table existante restent inchangées. |
table_name | Yes | Nom de la table. | Le nom de la table ne doit pas dépasser 128 octets et ne peut contenir que des lettres, des chiffres et des traits de soulignement (_). La casse n'est pas prise en compte. Il est recommandé de commencer le nom par une lettre. |
PRIMARY KEY(pk) | No | Clé primaire de la table. | Définissez une ou plusieurs colonnes comme clé primaire afin de garantir l'unicité de la combinaison de colonnes. Respectez la syntaxe standard SQL des clés primaires. Les colonnes de la 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 aux Delta Tables. |
col_name | Yes | Nom de la colonne. |
|
col_comment | No | Commentaire de la colonne. | Doit être une chaîne de 1 024 octets maximum. |
data_type | Yes | 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 rubrique Data types. |
NOT NULL | No | 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 rubrique Partition operations. |
default_value | No | Valeur par défaut de la colonne. | Si une opération Remarque Les fonctions telles que |
table_comment | No | Commentaire de la table. | Doit être une chaîne de 1 024 octets maximum. |
LIFECYCLE | No | Durée de vie de la table, exprimée en jours. | Seuls les entiers positifs sont pris en charge. L'unité est le jour.
|
Partitioned tables
Partitioned table parameters
Partitioned table parameters
MaxCompute prend en charge les tables standard et les tables auto-partitionnées. Le choix dépend de la manière dont les colonnes de partition sont générées. Consultez la rubrique Partitioned table overview.
Standard partitioned table parameters
Parameter | Required | Description | Remarks |
PARTITIONED BY | Yes | 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 | Yes | Nom de la colonne de partition. |
|
data_type | Yes | 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). La liste complète figure dans la rubrique Data types. Le partitionnement permet d'éliminer les analyses complètes de table pour les opérations au niveau des partitions. |
col_comment | No | Commentaire de la colonne de partition. | Doit être une chaîne de 1 024 octets maximum. |
Une valeur de partition ne doit pas dépasser 255 octets. Elle ne peut pas contenir de caractères codés sur deux octets, tels que les caractères chinois. La valeur doit commencer par une lettre et ne contenir que des lettres, des chiffres et 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.
Auto-partitioned table parameters
Une auto-partitioned table génère automatiquement les colonnes de partition. Les détails d'utilisation sont disponibles dans la rubrique Partitioned table types.
|**Parameter**
|
**Required**
|
**Description**
|
**Remarks**
| | --- | --- | --- | --- | |
AUTO PARTITIONED BY
|
Yes
|
Spécifie les partitions d'une auto-partitioned table.
|
Vous pouvez spécifier les partitions à l'aide de PARTITIONED BY ou AUTO PARTITIONED BY, mais pas des deux simultanément.
| |
auto_partition_expression
|
Yes
|
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](t2974883.xdita#) 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
|
No
|
Nom de la colonne de partition générée.
Si aucun nom n'est spécifié, le système utilise `_pt_col_0_` comme nom par défaut. Si ce nom est déjà utilisé, le système incrémente le suffixe (par exemple, `_pt_col_1_` ou `_pt_col_2_`) jusqu'à trouver un nom inutilisé.
|
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')
|
No
|
Indique s'il faut générer les colonnes de partition en fonction de l'heure d'ingestion des données.
|
Le partitionnement basé sur l'heure d'ingestion est décrit dans la rubrique [Auto-partitioned tables based on data ingestion time](t2977521.xdita#).
|
Clustered tables
Clustered table parameters
Les clustered tables se divisent en deux catégories : les tables à hachage et les tables à plage.
Hash-clustered table
|**Parameter**
|
**Required**
|
**Description**
|
**Remarks**
| | --- | --- | --- | --- | |
CLUSTERED BY
|
Yes
|
Spécifie la clé de hachage. MaxCompute calcule les valeurs de hachage pour les colonnes indiquées et distribue les données dans des buckets de hachage en fonction de ces valeurs.
|
Pour éviter le skew 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 `CLUSTERED BY`. Pour optimiser les jointures `join`, sélectionnez les clés de jointure ou d'agrégation fréquemment utilisées.
| |
SORTED BY
|
Yes
|
Spécifie l'ordre de tri des colonnes au sein de chaque bucket 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
|
Yes
|
Spécifie le nombre de buckets de hachage.
|
Cette valeur est obligatoire et dépend du volume de données.
|
Lorsque vous sélectionnez le nombre de buckets de hachage, respectez les deux principes suivants :
Maintenez une taille modérée pour les buckets de hachage : la taille recommandée pour chaque bucket de hachage est d'environ 500 Mo. Par exemple, si la taille estimée de la partition est de 500 Go, définissez le nombre de buckets à 1 000. Cela donne une taille moyenne de bucket de hachage d'environ 500 Mo. Pour les tables très volumineuses, vous pouvez dépasser la limite de 500 Mo. Une taille comprise entre 2 Go et 3 Go par bucket est appropriée.
Pour optimiser les opérations
join, la suppression des étapes de shuffle et de tri améliore considérablement les performances. Cela nécessite que le nombre de buckets de hachage dans les deux tables soit un multiple l'un de l'autre, par exemple 256 et 512. Il est recommandé de définir le nombre de buckets de hachage sur une puissance de 2 (2n), telle que 512, 1024, 2048 ou 4096. Cela permet au système de diviser ou de fusionner automatiquement les buckets de hachage et de supprimer les étapes de shuffle et de tri, ce qui améliore l'efficacité d'exécution.
Range-clustered table
|**Parameter**
|
**Required**
|
**Description**
|
**Remarks**
| | --- | --- | --- | --- | |
RANGE CLUSTERED BY
|
Yes
|
Spécifie les colonnes de clustering par plage.
|
MaxCompute effectue des opérations de bucketing sur les colonnes spécifiées et distribue les données dans des buckets en fonction des numéros de bucket.
| |
SORTED BY
|
Yes
|
Spécifie l'ordre de tri des colonnes au sein de chaque bucket.
|
L'utilisation est identique à celle d'une hash-clustered table.
| |
number_of_buckets
|
Yes
|
Spécifie le nombre de buckets.
|
Pour une range-clustered table, la bonne pratique consistant à utiliser une puissance de 2 (2n), applicable aux hash-clustered tables, n'est pas requise. Tout nombre de buckets est acceptable si les données sont réparties uniformément. Ce paramètre est facultatif pour les range-clustered tables. Si vous l'omettez, le système détermine automatiquement le nombre optimal de buckets en fonction du volume de données.
|
Lorsqu'une opération de jointure ou d'agrégation est effectuée sur une range-clustered table, si la clé de jointure ou la clé de groupe correspond à la clé de clustering par plage ou à son préfixe, vous pouvez éliminer la redistribution des données (shuffle remove) afin d'améliorer les performances. Vous pouvez exécuter 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 clustered tables :
Optimisation du pruning des buckets
Optimisation des agrégations
Optimisation du stockage
-
Limitations des clustered tables :
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 range-clustered table via 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.
External tables
External table parameters
Cette section couvre les paramètres des external tables OSS. Les autres types d'external tables sont documentés dans la rubrique External tables.
|**Parameter**
|
**Required**
|
**Description**
| | --- | --- | --- | |
`STORED AS '
|
Yes
|
Spécifie le file_format en fonction du format de données de l'external table.
| |
`WITH SERDEPROPERTIES(options)`
|
No
|
Spécifie les paramètres liés à l'autorisation, à la compression et à l'analyse des caractères pour l'external table.
| |
oss_location
|
Yes
|
Emplacement de stockage OSS des données de l'external table. Pour plus d'informations, consultez la rubrique [OSS external tables](t2022249.xdita#).
|
Transactional and Delta tables
Transactional Table and Delta Table parameters
Delta Table parameters
Une Delta Table est un format de table qui prend en charge les lectures et écritures quasi en temps réel, le stockage et l'accès incrémentiels, ainsi que les mises à jour en temps réel. Actuellement, seules les tables avec clé primaire sont prises en charge.
Parameter | Required | Description | Remarks |
PRIMARY KEY(PK) | Yes | Définit la clé primaire de la Delta Table, qui peut inclure plusieurs colonnes. | La syntaxe suit la norme SQL pour les clés primaires. Les colonnes de la clé primaire doivent être définies avec la contrainte NOT NULL et ne peuvent pas être modifiées. Après la définition de la clé primaire, les données sont dédupliquées en fonction des colonnes de la clé primaire. La contrainte d'unicité est appliquée au sein d'une seule partition ou d'une table non partitionnée. |
transactional | Yes | Obligatoire 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 snapshot. |
write.bucket.num | No | 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 concurrents pour les écritures de données. Vous pouvez modifier ce paramètre pour une table partitionnée, et le nouveau paramètre prend effet pour les 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 | No | La valeur par défaut est 24. La plage valide est | Spécifie la plage horaire (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 | No | Valeur par défaut : | Si la valeur est |
acid.write.precombine.field | No | Spécifie un seul nom de colonne. | Si un nom de colonne est spécifié, le système utilise cette colonne en combinaison avec les colonnes de la clé primaire pour dédupliquer les données au sein de la même validation. Cela garantit l'unicité et la cohérence des données. Remarque Si une seule validation de données 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 | No | 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 relatives aux paramètres des Delta Tables :
LIFECYCLE : la durée de vie de la table doit être supérieure ou égale à la période de conservation du 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 : les clauses
CLUSTERED BY,EXTERNALetCREATE TABLE ASne sont pas prises 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 effectuer de modifications de schéma sur les colonnes de clé primaire d'une Delta Table.
Transactional Table parameters
|**Parameter**
|
**Required**
|
**Description**
| | --- | --- | --- | |
TBLPROPERTIES("transactional"="true")
|
Yes
|
Définit la table comme une Transactional Table, activant les opérations `update` et `delete` au niveau des lignes. Consultez la rubrique [Update or delete data (UPDATE | DELETE)](t2043562.dita#concept_2043562).
|
Les limitations suivantes s'appliquent aux Transactional Tables :
-
Vous ne pouvez définir la propriété
transactionalque lors de la création d'une table. Vous ne pouvez pas utiliser l'instructionALTER TABLEpour modifier cette propriété sur 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 clustered table ou une external table comme Transactional Table.
Vous ne pouvez pas convertir une internal table standard, une external table ou une clustered table en Transactional Table, ni vice versa.
La compaction automatique n'est pas prise en charge. Compactez manuellement les fichiers comme décrit dans la rubrique Compact files in a Transactional Table.
L'opération
merge partitionn'est pas prise en charge.L'accès aux Transactional Tables 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.
Create tables from existing tables
Create table (from existing)
-
Utilisez l'instruction
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] AS <select_statement>;pour créer une autre table tout en copiant simultanément les données dans la nouvelle table.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 durée de vie de la table source n'est pas non plus copiée.
Utilisez le paramètre lifecycle pour spécifier une durée de vie pour la nouvelle table. Cette instruction prend également en charge la création d'une internal table et la copie de données à partir d'une external table.
-
Utilisez l'instruction
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] LIKE <existing_table_name>;pour créer une nouvelle table ayant le 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 durée de vie de la table source.
Utilisez le paramètre lifecycle pour spécifier une durée de vie pour la nouvelle table. Cette instruction prend également en charge la création d'une internal table qui copie le schéma d'une external table.
Exemples
Non-partitioned table
-
Créez une non-partitioned table.
CREATE TABLE test1 (key STRING); -
Créez une non-partitioned table 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 );
Partitioned table
-
Créez une AUTO PARTITION partitioned table 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 AUTO PARTITION partitioned table 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 à laquelle les données sont écrites 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');
Hash or range clustered table
-
Créez une hash-clustered non-partitioned table.
CREATE TABLE t1 (a STRING, b STRING, c BIGINT) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets; -
Créez une hash-clustered partitioned table.
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 range-clustered non-partitioned table.
CREATE TABLE t3 (a STRING, b STRING, c BIGINT) RANGE CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets; -
Créez une range-clustered partitioned table.
CREATE TABLE t4 (a STRING, b STRING, c BIGINT) PARTITIONED BY (dt STRING) RANGE CLUSTERED BY (c) SORTED BY (c);
Transactional table
-
Créez une non-partitioned transactional table.
CREATE TABLE t5(id BIGINT) TBLPROPERTIES ("transactional"="true"); -
Créez une partitioned transactional table.
CREATE TABLE IF NOT EXISTS t6(id BIGINT) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true");
Internal table
-
Créez une internal table en copiant les données d'une external partitioned table. L'internal table n'inclura pas les propriétés de partitionnement.
-
Créez une OSS external table et une MaxCompute internal table. Créez une internal table à 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 l'internal table. 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 internal table en copiant le schéma d'une external partitioned table. L'internal table inclut les propriétés de partitionnement.
-
Créez l'internal table
from_exetbl_like. Interrogez l'OSS external table depuis MaxCompute. Créez une internal table à 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 l'internal table. 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 | | +------------------------------------------------------------------------------------+
-
Delta table
-
Créez une Delta table.
CREATE TABLE mf_tt (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT) TBLPROPERTIES ("transactional"="true"); -
Créez une Delta table et définissez les propriétés clés de la table.
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;
Other methods
Replace an existing table
-
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 la clause
OR REPLACEpour créer une nouvelle table portant le même nom et modifier 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 ne sont pas valides :
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;
Copy data and set a lifecycle
-- 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 la durée de vie de la table.
Dans cet exemple, sale_detail est une partitioned table. 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 non-partitioned table comportant cinq colonnes.
Use constants for column values
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;
Copy a schema and set a lifecycle
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 la durée 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 des colonnes, les commentaires de colonne et les commentaires de table, sont copiées, à l'exception de la propriété de durée de vie. Toutefois, les données de sale_detail ne sont pas copiées dans la table sale_detail_like.
Copy a schema from an external table
-- 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 | | |
+------------------------------------------------------------------------------------+
New data types
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;
Commandes connexes
ALTER TABLE : Modifie la structure ou les propriétés d'une table.
TRUNCATE TABLE : Supprime toutes les données d'une table.
DROP TABLE : Supprime une table.
DESC TABLE/VIEW : Affiche les informations relatives à une internal table MaxCompute, une vue, une vue matérialisée, une external table, une clustered table ou une Transactional table.
SHOW : Affiche l'instruction SQL DDL d'une table, toutes les tables et vues d'un projet ou toutes les partitions d'une table.