Hive-forespørgsler: Bestil efter, Gruppér efter, Distribuer efter, Cluster Ved eksempler
Hive leverer SQL-type forespørgselssprog til ETL-formålet oveni Hadoop filsystem.
Hive Query-sprog (HiveQL) giver et SQL-miljø i Hive til at arbejde med tabeller, databaser, forespørgsler.
Vi kan have en anden type klausuler knyttet til Hive for at udføre forskellige typer datamanipulationer og forespørgsler. For bedre forbindelse med forskellige noder uden for miljøet. HIVE giver også JDBC-forbindelse.
Hive-forespørgsler giver følgende funktioner:
- Datamodellering såsom oprettelse af databaser, tabeller mv.
- ETL-funktionaliteter såsom ekstraktion, 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 starter med vores hovedemne for denne øvelse, vil vi først oprette en tabel for at bruge den som referencer til følgende øvelse.
Her i denne tutorial skal vi oprette tabellen "employees_guru" med 6 kolonner.
Fra ovenstående skærmbillede,
- Vi opretter tabellen "employees_guru" med 6 kolonneværdier såsom Id, Navn, Alder, Adresse, Løn, Afdeling, som tilhører de ansatte, der er til stede i organisationens "guru."
- Her i dette trin indlæser vi data i tabellen medarbejder_guru. De data, som vi skal indlæse, vil blive placeret under Employees.txt-filen
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, som hjælper med at sortere data. Rækkefølge efter klausul brug kolonner på Hive-tabeller til at sortere bestemte kolonneværdier nævnt med Bestil efter. Uanset kolonnenavnet definerer vi rækkefølgen efter klausulen, vil forespørgslen vælge og vise resultater i stigende eller faldende rækkefølge de særlige kolonneværdier.
Hvis den nævnte rækkefølge efter felt er en streng, vil den vise resultatet i leksikografisk rækkefølge. I bagenden skal den føres videre til en enkelt reduktion.
Fra skærmbilledet ovenfor kan vi observere følgende
- Det er forespørgslen, der udfører på "employees_guru"-tabellen med ORDER BY-klausulen med afdeling som defineret ORDER BY kolonnenavn."Afdeling" er String, så den vil vise resultater baseret på leksikografisk rækkefølge.
- Dette er faktisk output for forespørgslen. Hvis vi observerer det korrekt, kan vi se, at det får resultater vist baseret på afdelingskolonnen såsom ADMIN, Finance og så videre, for at Query skal udføres.
Forespørgsel:
SELECT * FROM employees_guru ORDER BY Department;
Gruppér efter forespørgsel
Gruppér efter klausul brug kolonner på Hive-tabeller til at gruppere bestemte kolonneværdier nævnt med gruppen efter. Uanset kolonnenavnet definerer vi en "gruppeby"-klausul, vil forespørgslen vælge og vise resultater ved at gruppere de særlige kolonneværdier.
For eksempel, i nedenstående skærmbillede vil det vise det samlede antal medarbejdere til stede i hver afdeling. Her har vi "Afdeling" som Gruppe efter værdi.
Fra ovenstående skærmbillede vil vi observere følgende
- Det er forespørgslen, der udføres på tabellen "medarbejdere_guru" med GROUP BY-klausulen med afdeling som defineret GROUP BY kolonnenavn.
- Det output, der vises her, er afdelingsnavnet, og medarbejderne tæller i forskellige afdelinger. Her er alle medarbejdere, der tilhører den specifikke afdeling, grupperet efter og vist i resultaterne. Så resultatet er afdelingsnavn med det samlede antal medarbejdere til stede i hver afdeling.
Forespørgsel:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Sorter efter
Sorter efter klausul udfører kolonnenavne i Hive-tabeller for at sortere output. Vi kan nævne DESC for sortering af rækkefølgen i faldende rækkefølge og nævne ASC for stigende rækkefølge af sorteringen.
I denne sortering vil den sortere rækkerne, før den føres til reduceringen. Sorter altid efter afhænger af kolonnetyper.
For eksempel, hvis kolonnetyper er numeriske, sorteres den i numerisk rækkefølge, hvis kolonnetyperne er strenge, vil den sorteres i leksikografisk rækkefølge.
Fra ovenstående skærmbillede kan vi observere følgende:
- Det er forespørgslen, der udfører på tabellen "employees_guru" med SORT BY-sætningen med "id" som definerer SORT BY kolonnenavn. Vi brugte søgeordet DESC.
- Så det viste output vil være 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 klausuler i Hive-QL.
Cluster BY-klausul brugt på tabeller i Hive. Hive bruger kolonnerne i Cluster ved at fordele rækkerne blandt reducering. Cluster BY-kolonner vil gå til de flere reduktionselementer.
- Det sikrer sorteringsrækkefølger af værdier, der findes i flere reduktionsapparater
For eksempel: Cluster Ved klausul nævnt i Id-kolonnens navn på tabellen medarbejder_guru-tabellen. Outputtet, når denne forespørgsel udføres, vil give resultater til flere reduceringer i bagenden. Men som frontend er det en alternativ klausul for både Sort By og Distribute By.
Dette er faktisk back-end-proces, når vi udfører en forespørgsel med sorter efter, grupper efter og klynge efter i forhold til Map reduce framework. Så hvis vi vil gemme resultater i flere reduktionsapparater, går vi med Cluster Ved.
Fra ovenstående skærmbillede får vi følgende observationer:
- Det er forespørgslen, der udfører CLUSTER BY-sætning på Id-feltværdi. Her kommer det til at få en slags id-værdier.
- Den viser id'et og navnene i guru_employees sorteret efter
Forespørgsel:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Distribuer efter
Distribuer BY-klausul brugt på tabeller, der findes i Hive. Hive bruger kolonnerne i Distribute by til at fordele rækkerne mellem reducering. Alle Distribute BY-kolonner vil gå til den samme reducer.
- Det sikrer, at hver af N reduktionsanordninger får ikke-overlappende kolonneområder
- Det sorterer ikke output fra hver reducer
Fra ovenstående skærmbillede kan vi observere følgende
- DISTRIBUTE BY-klausul, der udfører på Id for "empoloyees_guru"-tabellen
- Output viser id, navn. På bagsiden vil den gå til den samme reducering
Forespørgsel:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;