Création, modification et suppression de tables Hive : exemples
⚡ Résumé intelligent
Création, modification et abandonping Les tables dans Apache Hive utilisent un langage DDL de type SQL familier, mais le résultat dépend du fait que la table soit interne, appartenant à Hive, ou externe, qui décrit simplement des fichiers.
Les opérations sur les tables telles que la création, la modification et la suppressionping Ce tutoriel vous permettra d'observer les tables Hive. Chaque opération est d'abord présentée sous forme de session en direct, puis sous forme d'instruction réutilisable.
Comment créer, modifier et supprimer une table dans Hive
Dans la capture d'écran ci-dessous, nous créons une table avec des colonnes et modifions le nom de la table.
- Création de la table guru_sample avec deux noms de colonnes tels que « empid » et « empname »
- Affichage des tables présentes dans la base de données guru99
- guru_sample s'affiche sous les tableaux
- Modification de la table « guru_sample » en « guru_sampleNew »
- Là encore, lorsque vous exécuterez la commande « show », le nouveau nom guru_sampleNew s'affichera.
La session ci-dessous exécute les cinq étapes dans l'ordre. ruche> L'invite, et les deux appels SHOW TABLES avant et après le renommage, rendent l'effet visible.
Goutteping tableau guru_sampleNouveau :
Une simple instruction DROP TABLE supprime la table renommée, et Hive répond par OK.
Syntaxe et clauses courantes de la fonction CREATE TABLE de Hive
L'exemple ci-dessus utilise la forme la plus courte possible. L'instruction documentée accepte plusieurs clauses facultatives, et chacune d'elles modifie un paramètre laissé par défaut dans l'exemple.
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type, ...)] [CLUSTERED BY (col_name, ...) INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION hdfs_path] [TBLPROPERTIES (property_name=property_value, ...)];
| Clause | Ce qu'il contrôle |
|---|---|
| EXTERNE | Crée une table externe, donc DROP laisse les fichiers de données en place. |
| TEMPORAIRE | Crée un tableau temporaire qui disparaît à la fin de la session. |
| S'IL N'EXISTE PAS | Supprime l'erreur lorsqu'une table portant ce nom existe déjà. |
| PARTITIONNÉ PAR | Divise la table en un répertoire par valeur de clé |
| CLASSÉS PAR … DANS n SEAUX | Hacher les lignes dans un nombre fixe de fichiers |
| FORMAT LIGNE / STOCKÉ SOUS | Définit le délimiteur ou SerDe et le format de fichier, tel que TEXTFILE, ORC ou Parquet. |
| EMPLACEMENT | Indique un chemin HDFS spécifique dans la table, au lieu du chemin par défaut de l'entrepôt de données. |
| TBLPROPERTIES | Ajoute des paires clé-valeur de métadonnées, y compris external.table.purge |
Une forme apparentée, CRÉER UNE TABLE nouvelle_table COMME la table_existante, copie un schéma sans copier aucune ligne. Les clauses structurelles telles que PARTITIONED BY et CLUSTERED BY sont traitées en détail dans le guide de Partitions et compartiments Hive.
Types de tables et leur utilisation
En ce qui concerne les tables, leur création est identique à celle des bases de données relationnelles traditionnelles. Les fonctionnalités telles que le filtrage et les jointures peuvent être appliquées aux tables.
Hive gère deux types de structures de tables, les tables internes et les tables externes, en fonction du chargement et de la conception du schéma. RucheCe choix n'est pas purement cosmétique : il détermine à qui appartiennent les fichiers de données et ce qu'il advient de ces derniers lorsque la table est supprimée.
Tables internes dans Hive
- Les tables internes sont par nature étroitement liées. Dans ce type de table, il faut d'abord créer la table puis charger les données.
- On peut appeler cela des données sur un schéma.
- Par goutteping Cette table, données et schéma compris, sera supprimée.
- L'emplacement stocké de cette table sera dans /user/hive/warehouse.
- Les tables internes sont également appelées tables gérées, et seules elles prennent en charge les transactions TRUNCATE, ARCHIVE, MERGE, CONCATENATE et ACID.
Quand choisir une table interne ?
- Si les données de traitement sont disponibles dans le système de fichiers local
- Si nous voulons que Hive gère le cycle de vie complet des données, y compris la suppression
Exemple d'extrait de code pour la table interne
- Pour créer la table interne
Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING); Row format delimited Fields terminated by '\t';
- Charger les données dans la table interne
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
- Afficher le contenu du tableau
Hive>select * from guruhive_internaltable;
- Pour supprimer la table interne
Hive>DROP TABLE guruhive_internaltable;
Si vous supprimez la table guruhive_internaltable, ses métadonnées et ses données seront effacées de Hive. Sauf si l'option PURGE est spécifiée, les fichiers seront déplacés vers la corbeille HDFS au lieu d'être supprimés immédiatement.
La capture d'écran suivante nous permet d'observer le résultat des quatre instructions d'une même session, se terminant par une suppression réussie.
Dans le code ci-dessus et d'après la capture d'écran, nous effectuons les opérations suivantes :
- Créer la table interne
- Charger les données dans la table interne
- Afficher le contenu du tableau
- Pour supprimer la table interne
Tables externes dans Hive
- La table externe est faiblement couplée. Les données seront disponibles dans HDFS. La table sera créée à partir des données HDFS.
- Autrement dit, on peut dire qu'il s'agit de créer un schéma à partir des données.
- Au moment de la chuteping La table ne perd que le schéma ; les données resteront disponibles dans HDFS comme auparavant.
- Les tables externes offrent la possibilité de créer plusieurs schémas pour les données stockées dans HDFS au lieu de supprimer les données à chaque fois que le schéma est mis à jour.
- À partir de Hive 4.0.0, définir la propriété de table external.table.purge sur true permet à DROP de supprimer également les données.
Quand choisir une table externe ?
- Si les données de traitement sont disponibles dans HDFS
- Utile lorsque les fichiers sont utilisés en dehors de Hive
Exemple d'extrait de code pour une table externe
- Créer une table externe
Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING) Row format delimited Fields terminated by '\t' LOCATION '/user/guru99hive/guruhive_external';
- Si nous ne spécifions pas l'emplacement lors de la création de la table, nous pouvons charger les données manuellement.
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
- Afficher le contenu du tableau
Hive>select * from guruhive_external;
- Pour supprimer la table externe
Hive>DROP TABLE guruhive_external;
La capture d'écran ci-dessous illustre le résultat. Notez que la suppression finale ne concerne que le schéma ; le fichier situé sous le chemin LOCATION reste intact.
Dans le code ci-dessus, nous effectuons les opérations suivantes :
- Créer la table externe
- Charger les données dans une table externe
- Afficher le contenu du tableau
- Goutteping table externe
Différence entre les tables internes et externes
| Fonctionnalité | Interne | Externe |
|---|---|---|
| Programme | Données sur le schéma | Schéma sur les données |
| Emplacement de stockage | /utilisateur/ruche/entrepôt | Emplacement HDFS fourni par LOCATION |
| Disponibilité des données | Dans le système de fichiers local | Au sein de HDFS |
| Effet de la chute | Supprime le schéma et les données | Supprime uniquement le schéma, sauf si external.table.purge est vrai. |
| Prise en charge de TRUNCATE | Appareils | Non pris en charge |
| Transactions ACID | Appareils | Non pris en charge |
Le Documentation Apache Hive La règle est claire : Hive part du principe qu’il est propriétaire des données des tables gérées et qu’il ne l’est pas pour les tables externes, et toutes les différences mentionnées ci-dessus découlent de cette unique hypothèse.
Référence des commandes ALTER TABLE et DROP TABLE
Les captures d'écran ci-dessus montrent uniquement un renommage et une suppression. Ce sont les opérations qu'un praticien effectue le plus souvent sur une table existante.
| Déclaration | Interet |
|---|---|
| ALTER TABLE nom_table RENOMMER EN nouveau_nom; | Renomme la table ; pour une table gérée, cela déplace également son répertoire HDFS. |
| ALTER TABLE nom_table ADD COLUMNS (nom_colonne type_données); | Ajoute une ou plusieurs colonnes à la fin du schéma |
| ALTER TABLE nom_table CHANGER COLONNE ancien_nom nouveau_nom type_données; | Renomme une colonne ou modifie son type |
| ALTER TABLE nom_table REPLACE COLUMNS (…); | Remplace toute la liste des colonnes par une nouvelle. |
| ALTER TABLE nom_table SET TBLPROPERTIES ('EXTERNAL'='TRUE'); | Convertit une table gérée en table externe, et inverse la valeur de FALSE. |
| DROP TABLE [IF EXISTS] nom_table [PURGE]; | Supprime la table ; la commande PURGE ignore le dossier Corbeille, les données ne peuvent donc pas être récupérées. |
| TRONQUER [TABLE] nom_table; | Supprime toutes les lignes mais conserve le schéma ; tables gérées uniquement |
Deux mécanismes de sécurité méritent d'être intégrés à tout script. IF EXISTS empêche l'échec d'une suppression sur une table déjà supprimée, et DESCRIBE FORMATTED vérifie si la cible est MANAGED_TABLE ou EXTERNAL_TABLE avant l'exécution de la suppression.





