Présentation
Dans la terminologie Hive, les tables externes sont des tables non gérées avec Hive. Leur but est de faciliter l'import de données d'un fichier externe dans le metastore.
Les données de la table externe sont stockées en externe, tandis que le metastore Hive ne contient que le schéma de métadonnées. Par conséquent, la suppression d'une table externe n'affecte pas les données.
Dans ce didacticiel, vous apprendrez à créer, interroger et supprimer une table externe dans Hive.
Prérequis
- Ubuntu 18.04 LTS ou version ultérieure
- Accès à la ligne de commande avec les privilèges sudo
- Apache Hadoop installé et en cours d'exécution
- Apache Hive installé et en cours d'exécution
Remarque : Ce tutoriel utilise Ubuntu 20.04. Cependant, Hive fonctionne de la même manière sur tous les systèmes d'exploitation. Cela signifie que le processus de création, d'interrogation et de suppression de tables externes peut être appliqué à Hive sous Windows, Mac OS, d'autres distributions Linux, etc.
Création d'une table externe dans Hive – Explication de la syntaxe
Lors de la création d'une table externe dans Hive, vous devez fournir les informations suivantes :
- Nom du tableau – Le
create external table
La commande crée la table. Si une table du même nom existe déjà dans le système, cela provoquera une erreur. Pour éviter cela, ajoutezif not exists
à la déclaration. Les noms de table ne sont pas sensibles à la casse. - Noms et types de colonnes – Tout comme les noms de table, les noms de colonne ne sont pas sensibles à la casse. Les types de colonne sont des valeurs telles que
int
,char
,string
, etc. - Format de ligne – Les lignes utilisent des formats SerDe (Serializer/Deserializer) natifs ou personnalisés. SerDe natif sera utilisé si le format de ligne n'est pas défini ou s'il est spécifié comme délimité.
- Caractère de fin de champ – Ceci est un
char
caractère de type qui sépare les valeurs du tableau dans une ligne. - Format de stockage – Vous pouvez spécifier des formats de stockage tels que fichier texte, fichier de séquence, fichier json, etc.
- Emplacement – Il s'agit de l'emplacement du répertoire HDFS du fichier contenant les données de la table.
La syntaxe correcte pour fournir ces informations à Hive est :
create external table if not exists [external-table-name] (
[column1-name] [column1-type], [column2-name] [column2-type], …)
comment '[comment]'
row format [format-type]
fields terminated by '[termination-character]'
stored as [storage-type]
location '[location]';
Créer une table externe Hive – Exemple
Aux fins d'un exemple pratique, ce didacticiel vous montrera comment importer des données d'un fichier CSV dans une table externe.
Étape 1 :Préparez le fichier de données
1. Créez un fichier CSV intitulé « pays.csv » :
sudo nano countries.csv
2. Pour chaque pays de la liste, écrivez un numéro de ligne, le nom du pays, sa capitale et sa population en millions :
1,USA,Washington,328
2,France,Paris,67
3,Spain,Madrid,47
4,Russia,Moscow,145
5,Indonesia,Jakarta,267
6,Nigeria,Abuja,196
3. Enregistrez le fichier et notez son emplacement.
Étape 2 :Importer le fichier dans HDFS
1. Créez un répertoire HDFS. Vous utiliserez ce répertoire comme emplacement HDFS du fichier que vous avez créé.
hdfs dfs -mkdir [hdfs-directory-name]
2. Importez le fichier CSV dans HDFS :
hdfs dfs -put [original-file-location] [hdfs-directory-name]
3. Utilisez le -ls
commande pour vérifier que le fichier se trouve dans le dossier HDFS :
hdfs dfs -ls [hdfs-directory-name]
La sortie affiche tous les fichiers actuellement dans le répertoire.
Remarque : Pour en savoir plus sur HDFS, reportez-vous à Qu'est-ce que HDFS ? Guide du système de fichiers distribué Hadoop.
Étape 3 :Créer une table externe
1. Après avoir importé le fichier de données dans HDFS, lancez Hive et utilisez la syntaxe expliquée ci-dessus pour créer une table externe.
2. Pour vérifier que la création de la table externe a réussi, saisissez :
select * from [external-table-name];
La sortie doit répertorier les données du fichier CSV que vous avez importé dans le tableau :
3. Si vous souhaitez créer une table gérée à partir des données d'une table externe, saisissez :
create table if not exists [managed-table-name](
[column1-name] [column1-type], [column2-name] [var2-name], …)
comment '[comment]';
4. Ensuite, importez les données de la table externe :
insert overwrite table [managed-table-name] select * from [external-table-name];
5. Vérifiez que les données sont correctement insérées dans la table gérée.
select * from [managed-table-name];
Comment interroger une table externe Hive
Pour afficher toutes les données stockées dans un tableau, vous utiliserez le select * from
commande suivie du nom de la table. Hive propose une longue liste de commandes de requête pour vous permettre d'affiner vos recherches et de trier les données en fonction de vos préférences.
Par exemple, vous pouvez utiliser le where
commande après select * from
pour spécifier une condition :
select * from [table_name] where [condition];
Hive affichera uniquement les lignes qui satisfont la condition donnée dans la requête :
Au lieu de l'astérisque caractère qui représente "toutes les données", vous pouvez utiliser des déterminants plus spécifiques. Remplacement de l'astérisque par un nom de colonne (tel que CountryName , de l'exemple ci-dessus) vous montrera uniquement les données de la colonne choisie.
Voici quelques autres fonctions de requête utiles et leur syntaxe :
Fonction | Syntaxe |
---|---|
Interroger une table selon plusieurs conditions | select * from [table_name] where [condition1] and [condition2]; |
Données du tableau des commandes | select [column1_name], [column2_name] from [table_name] order by [column_name]; |
Classer les données du tableau par ordre décroissant | select [column1_name], [column2_name] from [table_name] order by [column_name] desc; |
Afficher le nombre de lignes | select count(*) from [table_name]; |
Comment supprimer une table externe Hive
1. La suppression d'une table externe dans Hive s'effectue à l'aide de la même commande de suppression que celle utilisée pour les tables gérées :
drop table [table_name];
La sortie confirmera le succès de l'opération :
2. L'interrogation de la table supprimée renverra une erreur :
Cependant, les données de la table externe restent dans le système et peuvent être récupérées en créant une autre table externe au même emplacement.