Exemples de requêtes Hive : Trier par, Grouper par et Cluster By
⚡ Résumé intelligent
Les requêtes Hive utilisent les clauses ORDER BY, GROUP BY, SORT BY, CLUSTER BY et DISTRIBUTE BY pour trier, regrouper et répartir les lignes entre les réducteurs, et chaque clause est illustrée ici sur un seul exemple de table d'employés.

Hive fournit un langage de requête de type SQL pour les opérations ETL, en plus de Hadoop système de fichiers.
Le langage de requête Hive (HiveQL) fournit un environnement de type SQL dans Hive pour travailler avec les tables, les bases de données et les requêtes.
Différents types de clauses sont associés à Hive pour effectuer différents types de manipulation et d'interrogation de données, et Hive fournit une connectivité JDBC pour de meilleures connexions avec les nœuds situés en dehors de l'environnement.
Les requêtes Hive offrent les fonctionnalités suivantes :
- Modélisation des données, notamment la création de bases de données, de tables, etc.
- les fonctionnalités ETL telles que par exempletracintégration, transformation et chargement des données dans les tables
- Joint pour fusionner différentes tables de données
- Scripts personnalisés spécifiques à l'utilisateur pour faciliter le code
- Outil d'interrogation plus rapide au-dessus de Hadoop
Création d'une table dans la ruche
Avant d'aborder le sujet principal de ce tutoriel, nous allons d'abord créer un tableau qui servira de référence pour les sections suivantes.
Dans ce tutoriel, nous allons créer la table « employees_guru » avec 6 colonnes, comme le montre la capture d'écran ci-dessous.
D'après la capture d'écran ci-dessus,
- Nous créons la table « employees_guru » avec 6 colonnes contenant les valeurs Id, Name, Age, Address, Salary, Department, qui correspondent aux employés présents dans l'organisation « guru ».
- Dans cette étape, nous chargeons les données dans la table employees_guru. Ces données se trouvent dans le fichier Employees.txt.
Trier par requête
La syntaxe ORDER BY en HiveQL est similaire à la syntaxe de ORDER BY dans… SQL la langue.
ORDER BY est la clause que nous utilisons avec l'instruction « SELECT » dans Requêtes de ruche Pour trier des données, cette requête utilise les colonnes des tables Hive afin de trier les valeurs de la colonne spécifiée par ORDER BY, et affiche les résultats par ordre croissant ou décroissant de ces valeurs.
Si le champ ORDER BY mentionné est une chaîne de caractères, les résultats s'affichent par ordre lexicographique. Côté serveur, l'ensemble des résultats doit être transmis à un seul réducteur.
Ce réducteur unique rend également ORDER BY coûteux sur une grande table, donc en mode strict (hive.mapred.mode=strictHive rejette une instruction ORDER BY qui ne comporte pas de clause LIMIT.
La capture d'écran ci-dessous montre la requête ORDER BY et ses lignes triées.
La capture d'écran ci-dessus nous permet d'observer ce qui suit :
- Il s'agit de la requête exécutée sur la table « employees_guru » avec la clause ORDER BY et Department comme nom de colonne ORDER BY. « Department » étant une chaîne de caractères, les résultats sont affichés par ordre lexicographique.
- Voici le résultat de la requête. Les résultats sont affichés par ordre de priorité selon la colonne « Département », par exemple : ADMIN, Finance, etc.
requête:
SELECT * FROM employees_guru ORDER BY Department;
Regrouper par requête
La clause GROUP BY utilise les colonnes des tables Hive pour regrouper les données.ping les valeurs de colonne particulières mentionnées avec GROUP BY, et la requête sélectionne et affiche les résultats regroupés selon ces valeurs.
Par exemple, la capture d'écran ci-dessous affiche le nombre total d'employés présents dans chaque service. Ici, la valeur de GROUP BY est « Service ».
La capture d'écran ci-dessus nous permet d'observer ce qui suit :
- Il s'agit de la requête exécutée sur la table « employees_guru » avec la clause GROUP BY et Department comme nom de colonne GROUP BY défini.
- Le résultat affiché ici présente le nom du département et le nombre d'employés dans chaque département. Tous les employés d'un même département sont regroupés et affichés ; chaque ligne correspond donc au nom d'un département et à son effectif total.
requête:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Trier par
La clause SORT BY s'applique aux noms de colonnes des tables Hive pour trier les résultats. On peut utiliser DESC pour un tri par ordre décroissant et ASC pour un tri par ordre croissant.
La fonction SORT BY trie les lignes avant de les transmettre au réducteur, garantissant ainsi l'ordre au sein de chaque réducteur et non sur l'ensemble du résultat. Le tri dépend toujours du type de colonne.
Par exemple, si le type de colonne est numérique, le tri s'effectue par ordre numérique, et si le type de colonne est une chaîne de caractères, le tri s'effectue par ordre lexicographique.
La capture d'écran ci-dessous illustre la requête SORT BY utilisant DESC.
À partir de la capture d'écran ci-dessus, nous pouvons observer ce qui suit :
- Il s'agit de la requête exécutée sur la table « employees_guru » avec la clause SORT BY et « Id » comme nom de colonne SORT BY. Le mot-clé DESC a été utilisé.
- Le résultat affiché est donc classé par ordre décroissant d’« Id ».
requête:
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
CLUSTER BY est utilisé comme alternative aux clauses DISTRIBUTE BY et SORT BY dans HiveQL.
La clause CLUSTER BY est utilisée sur les tables Hive. Hive utilise les colonnes de CLUSTER BY pour répartir les lignes entre les réducteurs, et les colonnes de CLUSTER BY sont traitées par plusieurs réducteurs. Elle garantit également l'ordre de tri des valeurs présentes dans ces réducteurs.
Par exemple, la clause CLUSTER BY est mentionnée dans le nom de la colonne Id de la table employees_guru. L'exécution de cette requête renvoie des résultats à plusieurs réducteurs côté serveur, mais côté client, elle constitue une alternative aux clauses SORT BY et DISTRIBUTE BY.
Voici le processus côté serveur lors de l'exécution d'une requête avec les clauses SORT BY, GROUP BY ou CLUSTER BY dans le cadre du framework MapReduce. Si l'on souhaite stocker les résultats dans plusieurs réducteurs, on utilise CLUSTER BY.
La syntaxe CLUSTER BY n'accepte que les noms de colonnes, donc ASC et DESC ne peuvent pas y être associés ; un résultat descendant nécessite DISTRIBUTE BY avec un SORT BY … DESC séparé.
La capture d'écran ci-dessous montre la requête CLUSTER BY sur Id.
De la capture d'écran ci-dessus, nous obtenons les observations suivantes :
- Il s'agit de la requête qui applique la clause CLUSTER BY à la valeur du champ Id. Elle effectue ici un tri sur les valeurs Id.
- Il affiche les valeurs Id et Name présentes dans employees_guru dans l'ordre trié.
requête:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Distribuer par
La clause DISTRIBUTE BY est utilisée sur les tables présentes dans Hive. Hive utilise les colonnes de DISTRIBUTE BY pour répartir les lignes entre les réducteurs ; ainsi, toutes les lignes partageant la même valeur de colonne DISTRIBUTE BY sont traitées par le même réducteur.
- Cela garantit que chacun des N réducteurs reçoit un flux non chevauchant.ping ensemble des valeurs de la colonne
- Il ne trie pas la sortie de chaque réducteur, et il n'est pas garanti que les lignes correspondantes soient côte à côte.
La capture d'écran ci-dessous montre la requête DISTRIBUTE BY sur Id.
La capture d'écran ci-dessus nous permet d'observer ce qui suit :
- La clause DISTRIBUTE BY est appliquée à l'identifiant de la table « employees_guru ».
- Le résultat affiche l'identifiant et le nom. Côté serveur, les lignes ayant le même identifiant sont traitées par le même réducteur.
requête:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;
Les quatre clauses sont faciles à confondre, c'est pourquoi le tableau ci-dessous les compare.
| Clause | Réducteurs | Ce que cela garantit |
|---|---|---|
| COMMANDÉ PAR | Un | Ordre total sur l'ensemble du résultat |
| TRIER PAR | Merci beaucoup | Commande uniquement à l'intérieur de chaque réducteur |
| DISTRIBUER PAR | Merci beaucoup | Une même clé atteint le même réducteur, non trié |
| GROUPER PAR | Merci beaucoup | DISTRIBUER PAR plus TRIER PAR, ordre croissant |






