Eksempler på Hive-forespørgsler: Sortér efter, Gruppér efter & Cluster By
⚡ Smart opsummering
Hive-forespørgsler bruger ORDER BY-, GROUP BY-, SORT BY-, CLUSTER BY- og DISTRIBUTE BY-klausuler til at sortere, gruppere og sprede rækker på tværs af reduceringsfunktioner, og hver klausul demonstreres her i en enkelt eksempeltabel med medarbejdere.

Hive leverer et SQL-lignende forespørgselssprog til ETL-formål oven i Hadoop filsystem.
Hive Query Language (HiveQL) leverer et SQL-lignende miljø i Hive til arbejde med tabeller, databaser og forespørgsler.
Forskellige typer klausuler er knyttet til Hive for at udføre forskellige typer datamanipulation og forespørgsler, og Hive leverer JDBC-forbindelse for bedre forbindelser med noder uden for miljøet.
Hive-forespørgsler tilbyder følgende funktioner:
- Datamodellering såsom oprettelse af databaser, tabeller osv.
- ETL-funktionaliteter såsom f.eks.traction, transformation og indlæsning af data i tabeller
- Sammenføjninger at flette forskellige datatabeller
- Brugerspecifikke brugerdefinerede scripts for nem kode
- Hurtigere forespørgselsværktøj oven på Hadoop
Oprettelse af bord i Hive
Før vi går i gang med hovedemnet i denne vejledning, vil vi først oprette en tabel, der skal bruges som reference i de følgende afsnit.
I denne vejledning skal vi oprette tabellen "employees_guru" med 6 kolonner, som skærmbilledet nedenfor viser.
Fra ovenstående skærmbillede,
- Vi opretter tabellen "employees_guru" med 6 kolonneværdier såsom Id, Navn, Alder, Adresse, Løn og Afdeling, som tilhører de medarbejdere, der er til stede i organisationen "guru".
- I dette trin indlæser vi data i tabellen employees_guru. De data, vi skal indlæse, placeres i filen Employees.txt.
Bestil efter forespørgsel
ORDER BY-syntaksen i HiveQL ligner syntaksen for ORDER BY i SQL Sprog.
ORDER BY er den klausul, vi bruger med "SELECT"-sætningen i Hive-forespørgsler til at sortere data. Den bruger kolonner i Hive-tabeller til at sortere de specifikke kolonneværdier, der er nævnt med ORDER BY, og forespørgslen viser resultaterne i stigende eller faldende rækkefølge af disse værdier.
Hvis det nævnte ORDER BY-felt er en streng, viser det resultatet i leksikografisk rækkefølge. I backend-systemet skal hele resultatsættet sendes videre til en enkelt reducer.
Den enkelte reducer gør også ORDER BY dyr på en stor tabel, så i streng tilstand (hive.mapred.mode=strict) Hive afviser en ORDER BY, der ikke indeholder en LIMIT-klausul.
Skærmbilledet nedenfor viser ORDER BY-forespørgslen og dens sorterede rækker.
Ud fra ovenstående skærmbillede kan vi observere følgende:
- Det er forespørgslen, der udføres på tabellen "employees_guru" med ORDER BY-klausulen og Department som det definerede ORDER BY-kolonnenavn. "Department" er en streng, så den viser resultater baseret på leksikografisk rækkefølge.
- Dette er det faktiske output for forespørgslen. Resultaterne vises baseret på Afdeling-kolonnen, f.eks. ADMIN, Finans osv., i rækkefølge.
Forespørgsel:
SELECT * FROM employees_guru ORDER BY Department;
Gruppér efter forespørgsel
GROUP BY-klausulen bruger kolonner på Hive-tabeller til grouping de bestemte kolonneværdier, der er nævnt med GROUP BY, og forespørgslen vælger og viser resultaterne grupperet efter disse værdier.
For eksempel viser skærmbilledet nedenfor det samlede antal medarbejdere i hver afdeling. Her har vi "Afdeling" som værdien GROUP BY.
Ud fra ovenstående skærmbillede vil vi observere følgende:
- Det er den forespørgsel, der udføres på tabellen "employees_guru" med GROUP BY-klausulen og Department som det definerede GROUP BY-kolonnenavn.
- Outputtet, der vises her, er afdelingsnavnet og antallet af medarbejdere i de forskellige afdelinger. Alle medarbejdere, der tilhører en bestemt afdeling, grupperes og vises, så hver resultatrække er et afdelingsnavn med det samlede antal medarbejdere.
Forespørgsel:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Sorter efter
SORT BY-klausulen udfører sortering på kolonnenavne i Hive-tabeller. Vi kan nævne DESC for sortering i faldende rækkefølge og ASC for stigende rækkefølge.
SORT BY sorterer rækkerne, før de føres til reduceren, så rækkefølgen er garanteret inden for hver reducer snarere end på tværs af hele resultatet. Sorteringen afhænger altid af kolonnetypen.
For eksempel, hvis kolonnetypen er numerisk, sorteres den i numerisk rækkefølge, og hvis kolonnetypen er streng, sorteres den i leksikografisk rækkefølge.
Skærmbilledet nedenfor viser SORT BY-forespørgslen ved hjælp af DESC.
Fra ovenstående skærmbillede kan vi observere følgende:
- Det er forespørgslen, der udføres på tabellen "employees_guru" med SORT BY-klausulen og "Id" som det definerede SORT BY-kolonnenavn. Vi brugte nøgleordet DESC.
- Så det viste output er i faldende rækkefølge efter "Id".
Forespørgsel:
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
CLUSTER BY bruges som et alternativ til både DISTRIBUTE BY- og SORT BY-klausulerne i HiveQL.
CLUSTER BY-klausulen bruges på tabeller, der findes i Hive. Hive bruger kolonnerne i CLUSTER BY til at fordele rækkerne mellem reduceringsværktøjer, og CLUSTER BY-kolonner går til flere reduceringsværktøjer. Den sikrer også sorteringsrækkefølgen for de værdier, der findes i disse flere reduceringsværktøjer.
For eksempel er CLUSTER BY-klausulen nævnt i Id-kolonnens navn i employees_guru-tabellen. Udførelse af denne forespørgsel giver resultater til flere reduceringsværktøjer i backend, men i frontend er det en alternativ klausul for både SORT BY og DISTRIBUTE BY.
Dette er backend-processen, når vi udfører en forespørgsel med SORT BY, GROUP BY eller CLUSTER BY i henhold til MapReduce-frameworket. Så hvis vi vil gemme resultater i flere reducere, bruger vi CLUSTER BY.
CLUSTER BY-grammatikken accepterer kun kolonnenavne, så ASC og DESC kan ikke tilknyttes den; et faldende resultat kræver DISTRIBUTE BY med en separat SORT BY … DESC.
Skærmbilledet nedenfor viser CLUSTER BY-forespørgslen på Id.
Fra ovenstående skærmbillede får vi følgende observationer:
- Det er forespørgslen, der udfører CLUSTER BY-klausulen på Id-feltværdien. Her vil den få en sortering på Id-værdierne.
- Den viser Id- og Name-værdierne i employees_guru i sorteret rækkefølge.
Forespørgsel:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Distribuer efter
DISTRIBUTE BY-klausulen bruges på tabeller, der findes i Hive. Hive bruger kolonnerne i DISTRIBUTE BY til at fordele rækkerne mellem reduceringsværktøjer, så alle rækker, der deler den samme DISTRIBUTE BY-kolonneværdi, går til den samme reduceringsværktøj.
- Det sikrer, at hver af N-reduktionsenhederne får en ikke-overlapningping sæt af kolonneværdier
- Den sorterer ikke outputtet fra hver reducer, og matchende rækker garanteres ikke at sidde ved siden af hinanden
Skærmbilledet nedenfor viser DISTRIBUTE BY-forespørgslen på Id.
Fra ovenstående skærmbillede kan vi observere følgende:
- DISTRIBUTE BY-klausulen udføres på Id'et for tabellen "employees_guru".
- Outputtet viser Id og Navn. I backend går rækker med samme Id til den samme reducer.
Forespørgsel:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;
De fire klausuler er lette at forveksle, så tabellen nedenfor sammenligner dem.
| Klausul | Nedfotograferingsudstyr | Hvad det garanterer |
|---|---|---|
| BESTIL BY | Én | Samlet ordre på tværs af hele resultatet |
| SORTER EFTER | Mange | Bestilling kun inden for hver reduktionsgearkasse |
| DISTRIBUER EFTER | Mange | Samme nøgle når den samme reducer, usorteret |
| KLYNGER EFTER | Mange | DISTRIBUTE EFTER plus SORT EFTER, stigende |






