Tous les produits
Search
Centre de documentation

MaxCompute:VALUES

Dernière mise à jour :Aug 10, 2026

Pour insérer un petit nombre de lignes lors du développement ou des tests, utilisez INSERT ... VALUES ou VALUES TABLE.

Avant d'exécuter INSERT INTO, vérifiez que vous disposez des autorisations suivantes :

  • Autorisation ALTER sur la table de destination

  • Autorisation DESCRIBE sur les métadonnées de la table source

Pour plus d'informations, consultez la rubrique Autorisations.

Exécutez les instructions de cette rubrique sur l'une des plateformes suivantes :

Choisir une opération

Opération Cas d'utilisation
INSERT ... VALUES Insérez quelques lignes à une dizaine lors des tests métier. Pour plusieurs dizaines de lignes, privilégiez l'upload d'un fichier TXT ou CSV via les commandes Tunnel. Pour plus d'informations, consultez la rubrique Importation de données dans des tables.
VALUES TABLE Exécutez des opérations de calcul simples sur les données insérées. Cette syntaxe fonctionne avec les instructions `INSERT` et autres instructions DML.

VALUES TABLE prend en charge trois modèles supplémentaires indisponibles avec INSERT ... VALUES :

  • Créez une table en mémoire multiligne sans table physique et exécutez-y des opérations de calcul.

  • Construisez une table de constantes comme alternative plus concise à SELECT * FROM ... UNION ALL.

  • Exécutez une instruction SELECT sans clause FROM pour tester des fonctions définies par l'utilisateur (UDF) ou des fonctions intégrées, sans créer de table DUAL. L'implémentation sous-jacente sélectionne les données depuis une table VALUES anonyme comportant une ligne et aucune colonne. Les expressions de la liste SELECT ne peuvent pas faire référence à d'autres tables.

Limitations

  • Mode d'insertion : Seul INSERT INTO est pris en charge. INSERT OVERWRITE ne permet pas de spécifier des colonnes avec VALUES.

  • Types de données complexes : Seul le type ARRAY permet de construire directement des constantes dans une liste VALUES. Les autres types complexes ne sont pas pris en charge. Pour insérer des valeurs ARRAY, utilisez plutôt INSERT ... SELECT avec la fonction array(). Consultez l'Exemple 3.

  • Valeurs DATETIME et TIMESTAMP : Préfixez chaque littéral par son nom de type de données dans la liste VALUES. Par exemple, utilisez datetime'2017-11-11 00:00:00' au lieu de '2017-11-11 00:00:00'. Consultez l'Exemple 4.

Syntaxe

-- INSERT ... VALUES
insert into table <table_name>
[partition (<pt_spec>)][(<col1_name> ,<col2_name>,...)]
values (<col1_value>,<col2_value>,...),(<col1_value>,<col2_value>,...),...

-- VALUES TABLE
values (<col1_value>,<col2_value>,...),(<col1_value>,<col2_value>,...),<table_name> (<col1_name> ,<col2_name>,...)...
Paramètre Obligatoire Description
table_name Oui Nom de la table cible. La table doit déjà exister.
pt_spec Non Partition de destination, au format (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). Obligatoire lors de l'insertion dans une table partitionnée.
col_name Non Nom de la colonne de destination.
col_value Non Valeur à insérer dans la colonne correspondante. Séparez les différentes valeurs par des virgules (,). Valeurs valides : constante, expression de fonction intégrée ou expression de fonction personnalisée. La valeur par défaut est NULL si non spécifiée.

Exemples

Exemple 1 : Insérer des lignes dans une partition spécifique

-- Create a partitioned table named srcp.
create table if not exists srcp (key string,value bigint) partitioned by (p string);

-- Add the abc partition.
alter table srcp add if not exists partition (p='abc');

-- Insert three rows into the abc partition.
insert into table srcp partition (p='abc') values ('a',1),('b',2),('c',3);

-- Query the inserted data.
select * from srcp where p='abc';

-- Return result
+------------+------------+------------+
| key        | value      | p          |
+------------+------------+------------+
| a          | 1          | abc        |
| b          | 2          | abc        |
| c          | 3          | abc        |
+------------+------------+------------+

Exemple 2 : Insérer des lignes et laisser MaxCompute attribuer la valeur de partition

-- Create a partitioned table named srcp.
create table if not exists srcp (key string,value bigint) partitioned by (p string);

-- Insert rows, specifying only the key and p columns. The value column defaults to NULL.
insert into table srcp partition (p)(key,p) values ('d','20170101'),('e','20170101'),('f','20170101');

-- Query the inserted data.
select * from srcp where p='20170101';

-- Return result
+------------+------------+------------+
| key        | value      | p          |
+------------+------------+------------+
| d          | NULL       | 20170101   |
| e          | NULL       | 20170101   |
| f          | NULL       | 20170101   |
+------------+------------+------------+

Exemple 3 : Insérer des valeurs ARRAY

Seul le type ARRAY permet la construction de constantes dans une liste VALUES. Pour les autres types complexes, utilisez INSERT ... SELECT avec la fonction de constructeur correspondante. L'exemple suivant utilise la fonction array().

-- Create a partitioned table named srcp.
create table if not exists srcp (key string,value array<int>) partitioned by (p string);

-- Add the abc partition.
alter table srcp add if not exists partition (p='abc');

-- Insert a row with an ARRAY value using SELECT.
insert into table srcp partition (p='abc') select 'a', array(1, 2, 3);

-- Query the inserted data.
select * from srcp where p='abc';

-- Return result
+------------+------------+------------+
| key        | value      | p          |
+------------+------------+------------+
| a          | [1,2,3]    | abc        |
+------------+------------+------------+

Exemple 4 : Insérer des valeurs DATETIME et TIMESTAMP

Préfixez chaque littéral temporel par son nom de type de données dans la liste VALUES. Sans ce préfixe, MaxCompute ne peut pas analyser correctement la valeur.

-- Create a partitioned table named srcp.
create table if not exists srcp (key string, value timestamp) partitioned by (p string);

-- Add the abc partition.
alter table srcp add if not exists partition (p='abc');

-- Insert a row with typed datetime and timestamp literals.
insert into table srcp partition (p='abc') values (datetime'2017-11-11 00:00:00',timestamp'2017-11-11 00:00:00.123456789');

-- Query the inserted data.
select * from srcp where p='abc';

-- Return result
+------------+------------+------------+
| key        | value      | p          |
+------------+------------+------------+
| 2017-11-11 00:00:00 | 2017-11-11 00:00:00.123 | abc        |
+------------+------------+------------+

Exemple 5 : Utiliser VALUES TABLE pour calculer et insérer des données

VALUES (...), (...) t(a, b) définit une table inline nommée t avec les colonnes a et b. Les types de colonnes sont déduits de la liste VALUES : a est de type STRING et b est de type BIGINT.

-- Create a partitioned table named srcp.
create table if not exists srcp (key string,value bigint) partitioned by (p string);

-- Use VALUES TABLE to apply functions and insert computed results.
insert into table srcp partition (p) select concat(a,b), length(a)+length(b),'20170102' from values ('d',4),('e',5),('f',6) t(a,b);

-- Query the inserted data.
select * from srcp where p='20170102';

-- Return result
+------------+------------+------------+
| key        | value      | p          |
+------------+------------+------------+
| d4         | 2          | 20170102   |
| e5         | 2          | 20170102   |
| f6         | 2          | 20170102   |
+------------+------------+------------+

Exemple 6 : Construire une table de constantes avec VALUES TABLE

VALUES TABLE constitue une alternative plus concise à SELECT ... UNION ALL lors de la construction d'une table de constantes.

-- These two statements are equivalent.
select 1 c union all select 2 c;
select * from values (1), (2) t(c);

-- Return result
+------------+
| c          |
+------------+
| 1          |
| 2          |
+------------+

Exemple 7 : Exécuter SELECT sans clause FROM

Lorsqu'aucune table source n'est nécessaire, omettez la clause FROM. MaxCompute sélectionne internement les données depuis une table anonyme à une seule ligne, ce qui permet de tester les UDF et les fonctions intégrées sans créer de table DUAL.

-- Create a partitioned table named srcp.
create table if not exists srcp (key string,value bigint) partitioned by (p string);

-- Insert results of built-in functions without a FROM clause.
insert into table srcp partition (p) select abs(-1), length('abc'), getdate();

-- Query the inserted data.
select * from srcp;

-- Return result
+------------+------------+------------+
| key        | value      | p          |
+------------+------------+------------+
| 1          | 3          | 2020-11-25 18:39:48 |
+------------+------------+------------+

Exemple 8 : Utiliser des expressions non constantes

select * from values ('a'),(to_date('20190101', 'yyyyMMdd')),(getdate()) t(d);

Le résultat suivant s'affiche :

+------------+
| d          |
+------------+
| 2021-02-01 18:01:38 |
| 2019-01-01 00:00:00 |
| a          |
+------------+