Impala - Modifier la table

L'instruction Alter table dans Impala est utilisée pour effectuer des modifications sur une table donnée. En utilisant cette instruction, nous pouvons ajouter, supprimer ou modifier des colonnes dans une table existante et nous pouvons également la renommer.

Ce chapitre explique différents types d'instructions alter avec une syntaxe et des exemples. Supposons tout d'abord que nous avons une table nomméecustomers dans le my_db base de données dans Impala, avec les données suivantes

ID   NAME     AGE   ADDRESS    SALARY
--- --------- ----- ----------- --------
1   Ramesh    32    Ahmedabad   20000
2   Khilan    25    Delhi       15000
3   Hardik    27    Bhopal      40000
4   Chaitali  25    Mumbai      35000
5   kaushik   23    Kota        30000
6   Komal     22    Mp          32000

Et, si vous obtenez la liste des tables de la base de données my_db, vous pouvez trouver le customers table comme indiqué ci-dessous.

[quickstart.cloudera:21000] > show tables;

Query: show tables 
+-----------+ 
| name      | 
+-----------+ 
| customers | 
| employee  | 
| student   | 
| student1  | 
+-----------+

Modifier le nom d'une table

Syntaxe

La syntaxe de base de ALTER TABLE pour renommer une table existante est comme suit -

ALTER TABLE [old_db_name.]old_table_name RENAME TO [new_db_name.]new_table_name

Exemple

Voici un exemple de modification du nom de la table à l'aide du alterdéclaration. Ici, nous changeons le nom de la tablecustomers aux utilisateurs.

[quickstart.cloudera:21000] > ALTER TABLE my_db.customers RENAME TO my_db.users;

Après avoir exécuté la requête ci-dessus, Impala modifie le nom de la table selon les besoins, affichant le message suivant.

Query: alter TABLE my_db.customers RENAME TO my_db.users

Vous pouvez vérifier la liste des tables de la base de données actuelle à l'aide du show tablesdéclaration. Vous pouvez trouver la table nomméeusers au lieu de customers.

Query: show tables 
+----------+ 
| name     | 
+----------+ 
| employee | 
| student  | 
| student1 | 
| users    | 
+----------+ 
Fetched 4 row(s) in 0.10s

Ajouter des colonnes à une table

Syntaxe

La syntaxe de base de ALTER TABLE pour ajouter des colonnes à une table existante est comme suit -

ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...])

Exemple

La requête suivante est un exemple montrant comment ajouter des colonnes à une table existante. Ici, nous ajoutons deux colonnes account_no et phone_number (les deux sont de type bigint) à lausers table.

[quickstart.cloudera:21000] > ALTER TABLE users ADD COLUMNS (account_no BIGINT, 
phone_no BIGINT);

Lors de l'exécution de la requête ci-dessus, il ajoutera les colonnes spécifiées à la table nommée student, affichant le message suivant.

Query: alter TABLE users ADD COLUMNS (account_no BIGINT, phone_no BIGINT)

Si vous vérifiez le schéma de la table users, vous pouvez y trouver les nouvelles colonnes ajoutées comme indiqué ci-dessous.

quickstart.cloudera:21000] > describe users;
 
Query: describe users 
+------------+--------+---------+ 
| name       | type   | comment | 
+------------+--------+---------+ 
| id         | int    |         | 
| name       | string |         | 
| age        | int    |         |
| address    | string |         | 
| salary     | bigint |         | 
| account_no | bigint |         | 
| phone_no   | bigint |         | 
+------------+--------+---------+ 
Fetched 7 row(s) in 0.20s

Supprimer des colonnes d'une table

Syntaxe

La syntaxe de base d'ALTER TABLE pour DROP COLUMN dans une table existante est la suivante -

ALTER TABLE name DROP [COLUMN] column_name

Exemple

La requête suivante est un exemple de suppression de colonnes d'une table existante. Ici, nous supprimons la colonne nomméeaccount_no.

[quickstart.cloudera:21000] > ALTER TABLE users DROP account_no;

Lors de l'exécution de la requête ci-dessus, Impala supprime la colonne nommée account_no affichant le message suivant.

Query: alter TABLE users DROP account_no

Si vous vérifiez le schéma de la table users, vous ne trouvez pas la colonne nommée account_no depuis qu'il a été supprimé.

[quickstart.cloudera:21000] > describe users; 

Query: describe users 
+----------+--------+---------+ 
| name     | type   | comment | 
+----------+--------+---------+ 
| id       | int    |         | 
| name     | string |         | 
| age      | int    |         | 
| address  | string |         | 
| salary   | bigint |         | 
| phone_no | bigint |         |
+----------+--------+---------+ 
Fetched 6 row(s) in 0.11s

Changer le nom et le type d'une colonne

Syntaxe

La syntaxe de base d'ALTER TABLE pour change the name and datatype d'une colonne dans une table existante est comme suit -

ALTER TABLE name CHANGE column_name new_name new_type

Exemple

Voici un exemple de modification du nom et du type de données d'une colonne à l'aide de l'instruction alter. Ici, nous changeons le nom de la colonnephone_no to email et son type de données à string.

[quickstart.cloudera:21000] > ALTER TABLE users CHANGE phone_no e_mail string;

Lors de l'exécution de la requête ci-dessus, Impala effectue les modifications spécifiées, affichant le message suivant.

Query: alter TABLE users CHANGE phone_no e_mail string

Vous pouvez vérifier les métadonnées des utilisateurs de la table à l'aide du describedéclaration. Vous pouvez observer qu'Impala a apporté les modifications requises à la colonne spécifiée.

[quickstart.cloudera:21000] > describe users; 
Query: describe users 
+----------+--------+---------+ 
| name     | type   | comment | 
+----------+--------+---------+ 
| id       | int    |         | 
| name     | string |         | 
| age      | int    |         | 
| address  | string |         | 
| salary   | bigint |         | 
| phone_no | bigint |         |
+----------+--------+---------+ 
Fetched 6 row(s) in 0.11s

Modifier un tableau à l'aide de Hue

Ouvrez l'éditeur de requête Impala et saisissez le alter et cliquez sur le bouton Exécuter comme indiqué dans la capture d'écran suivante.

Lors de l'exécution de la requête ci-dessus, cela changera le nom de la table customers à users. De la même manière, nous pouvons exécuter tous lesalter requêtes.