Introduction
Imaginez que vous ouvrez les commandes du commerçant dans un tableur. Chaque ligne décrit une commande et chaque colonne un attribut, comme sa date ou son statut de paiement. Vous souhaitez répondre à une question simple : Quelles commandes payées l’équipe doit-elle examiner en premier ? Lire chaque ligne à la main devient peu pratique à mesure que les fichiers grossissent.
Apache Hive permet de décrire les données de fichiers sous forme de tables et de poser des questions en SQL, Structured Query Language, ou langage de requête structuré. Une définition de table décrit les colonnes et l’emplacement des fichiers sous-jacents ; les fichiers contiennent les enregistrements réels. Hive utilise cette définition pour interpréter les données et exécuter une requête. Dans cet environnement préparé, HDFS fournit le stockage, tandis que Hive fournit la couche de tables et de requêtes. Téléverser un fichier ne le transforme pas automatiquement en table Hive.
Hive est utile pour les requêtes analytiques sur des données stockées, comme les rapports par lots. Ce n’est pas la même chose que modifier des cellules dans un tableur, et ce cours ne le présente pas comme un remplacement de la base de données transactionnelle de toute application. Vous commencerez ici avec six enregistrements lisibles pour prévoir la bonne réponse avant de travailler sur des entrées plus volumineuses.
Vous utiliserez Beeline, le client terminal de Hive, pour vous connecter à un service HiveServer2 en cours d’exécution. Le service et une table d’exemple sont préparés pour vous. Vous n’avez pas besoin d’installer de logiciel, d’initialiser les métadonnées ou de connaître Java, Python, Hadoop ou SQL au préalable. Savoir utiliser le terminal et lire un tableau suffit. Pour pratiquer davantage le terminal ou les bases de données, consultez les parcours Linux et Database.
Votre progression sera la suivante : voir de véritables lignes, découvrir la structure de la table, enregistrer une requête sélectionnant les commandes payées et modifier une condition pour tester votre compréhension.
Voir vos premières lignes Hive
Dans cette étape, vous vous connecterez à Hive et lirez une table préparée avant d’apprendre à restreindre une requête.
Utilisez l’onglet Terminal. Accédez au répertoire local du projet avec cd :
cd /home/labex/project
Beeline est un client : il envoie du SQL à HiveServer2, qui prend en charge la requête. Dans la commande ci-dessous, -u fournit l’URL de connexion, -n le nom d’utilisateur de la session et -e le SQL à exécuter avant de revenir au terminal. L’URL fournie se connecte au service Hive de cette machine sur le port 10000, initialement dans la base default. Aucun compte externe ni mot de passe n’est nécessaire pour ce service pédagogique.
Le SQL SELECT * FROM retail_intro.orders; demande toutes les colonnes (*) de la table orders dans la base retail_intro. Un point-virgule termine l’instruction. Les apostrophes conservent toute l’instruction SQL dans un seul argument du shell :
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex -e 'SELECT * FROM retail_intro.orders;'
Repérez six lignes de commandes et des noms de colonnes comme order_id, quantity et order_status. Des messages de connexion et des bordures de tableau peuvent entourer les résultats. Trouvez la commande o1 : sa quantité est 2, son prix unitaire 10.00 et son statut paid (payée). La commande o3 est pending (en attente) ; o5 est refunded (remboursée). Chaque ligne est une commande simplifiée contenant un type de produit.
Une requête récupère des données ; ce SELECT ne change pas le statut de paiement et ne met pas à jour le fichier source. Sans clause de tri, ne supposez pas que SQL garantit un ordre particulier des lignes.
Enregistrez la sortie de la même requête dans une transcription locale. L’opérateur > du shell crée le fichier ou remplace son contenu précédent :
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex -e 'SELECT * FROM retail_intro.orders;' > /home/labex/project/output/first-look.txt
Lisez-la localement :
cat /home/labex/project/output/first-look.txt
Les lignes de commandes doivent toujours être présentes. Le terminal a exécuté le client Beeline, Hive a lu la définition de table et les fichiers, et le shell a enregistré le résultat affiché localement. Vous découvrirez ensuite les objets derrière cette requête.
Découvrir la base de données, la table et les colonnes
Dans cette étape, vous explorerez la base et la définition de table au lieu de deviner les noms des colonnes.
Une base de données est un espace de noms regroupant des tables. SHOW DATABASES liste les bases disponibles ; il ne lit pas tous leurs fichiers de données :
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex -e 'SHOW DATABASES;'
Trouvez default et retail_intro. Utilisez USE pour sélectionner une base, puis SHOW TABLES dans la même invocation :
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex -e 'USE retail_intro; SHOW TABLES;'
Vous devriez trouver orders. Chaque commande -e ouvre une nouvelle session Beeline ; un USE dans une invocation ne se propage donc pas implicitement à la suivante. Sélectionnez la base dans chaque fichier SQL ou utilisez le nom qualifié retail_intro.orders.
DESCRIBE liste les colonnes et les types de la table. Par exemple, STRING stocke du texte, INT des nombres entiers, DECIMAL(10,2) des nombres à virgule fixe avec deux décimales et DATE une date du calendrier :
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex -e 'DESCRIBE retail_intro.orders;'
Faites correspondre les champs aux lignes de la première requête. Une quantité et un prix ont des sens et des types différents, même si les deux semblent numériques. Vous calculerez des montants dans un prochain lab ; aujourd’hui, vous lisez seulement les champs fournis.
Pour enregistrer les résultats, Beeline peut utiliser un format texte simple. --outputformat=tsv2 sélectionne des champs séparés par des tabulations, --showHeader=false omet la ligne d’en-tête et --silent=true réduit les messages du client. Enregistrez le schéma décrit avec ces options de sortie :
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -e 'DESCRIBE retail_intro.orders;' > /home/labex/project/output/table-schema.txt
La transcription peut aussi contenir des messages d’exécution. Les lignes importantes du schéma nomment les sept colonnes et leurs types. La définition de table est une métadonnée : elle indique à Hive comment interpréter les fichiers stockés. Le prochain lab vous montrera comment créer vous-même cette correspondance.
Enregistrer une requête pour les premières commandes payées
Dans cette étape, vous sélectionnerez uniquement les colonnes et les lignes payées nécessaires à l’équipe de révision, avec un ordre de résultat prévisible.
Une requête peut restreindre les données de plusieurs façons indépendantes :
| Clause | Son rôle ici |
|---|---|
SELECT |
Choisir les colonnes de sortie |
FROM |
Choisir la table source |
WHERE |
Conserver les lignes dont la condition est vraie |
ORDER BY |
Trier explicitement le résultat |
LIMIT |
Renvoyer au maximum le nombre de lignes demandé |
Vous demanderez order_id, order_status et quantity, conserverez uniquement les lignes paid, trierez par identifiant de commande et renverrez les deux premières. Prévoyez les lignes restantes : parmi les six commandes fournies, o1 et o2 sont les premiers identifiants payés dans cet ordre.
Enregistrez le SQL dans un fichier local pour pouvoir l’examiner et le réexécuter. Dans la prochaine commande du shell, cat > file <<'SQL' commence un here-document : les lignes jusqu’au SQL final sont écrites littéralement dans le fichier. Il s’agit de texte SQL, et non de commandes du shell. Copiez le bloc complet, y compris les lignes de délimitation :
cat > /home/labex/project/queries/first-query.sql <<'SQL'
USE retail_intro;
SELECT order_id, order_status, quantity
FROM orders
WHERE order_status = 'paid'
ORDER BY order_id
LIMIT 2;
SQL
Le 'paid' entre apostrophes dans le SQL est une valeur textuelle. Le = compare le statut de chaque ligne à cette valeur ; il n’attribue pas un nouveau statut. L’instruction USE rend le fichier indépendant d’une session cliente précédente.
L’option -f de Beeline lit un fichier SQL local. Exécutez votre fichier et enregistrez sa sortie avec les options de format texte que vous venez d’apprendre :
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -f /home/labex/project/queries/first-query.sql > /home/labex/project/output/first-query.txt
Lisez la transcription enregistrée :
cat /home/labex/project/output/first-query.txt
Les lignes de résultat doivent être :
o1 paid 2
o2 paid 1
Les éventuels messages d’exécution autour de ces lignes ne sont pas des enregistrements de commandes. LIMIT 2 ne signifiait pas deux lignes arbitraires : le tri explicite a déterminé quelles lignes correspondantes venaient en premier. Vous disposez maintenant d’un fichier de requête réutilisable et d’un résultat observable pour la question de l’équipe.
Prévoir l’effet d’un changement de condition
Dans cette étape, vous modifierez uniquement la condition de statut et vérifierez si les lignes renvoyées correspondent à votre prévision.
Conservez intacte la requête sur les commandes payées. Une commande pending existe dans la même table : o3, avec la quantité 1. Si la condition de statut passe de paid à pending, combien de lignes une limite de deux doit-elle renvoyer ? Une limite est un maximum ; la réponse est donc une.
Écrivez la même requête en changeant uniquement cette condition :
cat > /home/labex/project/queries/pending-query.sql <<'SQL'
USE retail_intro;
SELECT order_id, order_status, quantity
FROM orders
WHERE order_status = 'pending'
ORDER BY order_id
LIMIT 2;
SQL
Exécutez-la indépendamment :
beeline -u 'jdbc:hive2://localhost:10000/default' -n labex --silent=true --showHeader=false --outputformat=tsv2 -f /home/labex/project/queries/pending-query.sql > /home/labex/project/output/pending-query.txt
Lisez le résultat enregistré :
cat /home/labex/project/output/pending-query.txt
La seule ligne de commande doit être :
o3 pending 1
Modifier un filtre a sélectionné une autre ligne sans modifier les enregistrements stockés dans la table. Vous avez maintenant utilisé la même structure de requête de base pour répondre à deux questions. Vous relierez ensuite un fichier CSV existant à une définition de table au lieu de vous appuyer sur une table préparée.
Résumé
Vous avez situé Hive dans un flux fichier-table-requête, établi une connexion avec Beeline et exploré une base, une table et un schéma. Vous avez écrit un fichier SQL réutilisable utilisant sélection, filtrage, tri explicite et limite de lignes, puis prévu et vérifié un changement d’une condition.
La table était préparée pour cette première expérience. Dans le prochain lab, vous relierez un fichier CSV à votre propre table externe et apprendrez comment ses métadonnées et les fichiers sous-jacents sont liés.



