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
SELECTsans clauseFROMpour 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 listeSELECTne peuvent pas faire référence à d'autres tables.
Limitations
Mode d'insertion : Seul
INSERT INTOest pris en charge.INSERT OVERWRITEne permet pas de spécifier des colonnes avecVALUES.Types de données complexes : Seul le type
ARRAYpermet de construire directement des constantes dans une listeVALUES. Les autres types complexes ne sont pas pris en charge. Pour insérer des valeursARRAY, utilisez plutôtINSERT ... SELECTavec la fonctionarray(). 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, utilisezdatetime'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 |
+------------+