Hive-spørsmål: Bestill etter, grupper etter, distribuer etter, Cluster Ved eksempler
Hive tilbyr spørringsspråk av SQL-type for ETL-formål i tillegg Hadoop filsystem.
Hive Query language (HiveQL) gir SQL type miljø i Hive for å jobbe med tabeller, databaser, spørringer.
Vi kan ha en annen type klausuler knyttet til Hive for å utføre forskjellige typer datamanipulasjoner og spørringer. For bedre tilkobling med forskjellige noder utenfor miljøet. HIVE gir også JDBC-tilkobling.
Hive-spørringer gir følgende funksjoner:
- Datamodellering som Oppretting av databaser, tabeller, etc.
- ETL-funksjoner som ekstraksjon, transformasjon og lasting av data til tabeller
- tiltrer å slå sammen ulike datatabeller
- Brukerspesifikke tilpassede skript for enkel kode
- Raskere spørringsverktøy på toppen av Hadoop
Opprette tabell i Hive
Før vi starter med hovedemnet vårt for denne opplæringen, vil vi først lage en tabell for å bruke den som referanser for den følgende opplæringen.
Her i denne opplæringen skal vi lage tabellen "employees_guru" med 6 kolonner.
Fra skjermbildet ovenfor,
- Vi oppretter tabellen "employees_guru" med 6 kolonneverdier som Id, Navn, Alder, Adresse, Lønn, Avdeling, som tilhører de ansatte som er tilstede i organisasjonens "guru."
- Her i dette trinnet laster vi data inn i tabellen medarbeider_guru. Dataene som vi skal laste vil bli plassert under Employees.txt-filen
Bestill etter forespørsel
ORDER BY-syntaksen i HiveQL ligner på syntaksen til ORDER BY i SQL Språk.
Ordne etter er klausulen vi bruker med "SELECT"-setningen i Hive-spørsmål, som hjelper til med å sortere data. Ordne etter klausul bruk kolonner på Hive-tabeller for å sortere bestemte kolonneverdier nevnt med Ordne etter. Uansett hvilket kolonnenavn vi definerer rekkefølge etter klausul, vil spørringen velge og vise resultater i stigende eller synkende rekkefølge de spesielle kolonneverdiene.
Hvis nevnte rekkefølge etter felt er en streng, vil den vise resultatet i leksikografisk rekkefølge. På baksiden må den føres videre til en enkelt redusering.
Fra skjermbildet ovenfor kan vi observere følgende
- Det er spørringen som utfører på "employees_guru"-tabellen med ORDER BY-klausulen med avdeling som definert ORDER BY kolonnenavn."Department" er String, slik at den vil vise resultater basert på leksikografisk rekkefølge.
- Dette er faktisk utdata for spørringen. Hvis vi observerer den riktig, kan vi se at den får resultater vist basert på avdelingskolonnen som ADMIN, Finance og så videre for at Query skal utføres.
Spørring:
SELECT * FROM employees_guru ORDER BY Department;
Grupper etter forespørsel
Grupper etter klausul bruk kolonner på Hive-tabeller for å gruppere bestemte kolonneverdier nevnt med gruppen etter. Uansett hvilket kolonnenavn vi definerer en "gruppeby"-klausul, vil spørringen velge og vise resultater ved å gruppere de spesielle kolonneverdiene.
For eksempel, i skjermbildet nedenfor vil det vise det totale antallet ansatte tilstede i hver avdeling. Her har vi «Avdeling» som Gruppe etter verdi.
Fra skjermbildet ovenfor vil vi observere følgende
- Det er spørringen som utføres på tabellen "employees_guru" med GROUP BY-klausulen med avdeling som definert GROUP BY-kolonnenavn.
- Resultatet som vises her er avdelingsnavnet, og de ansatte teller i forskjellige avdelinger. Her er alle de ansatte som tilhører den spesifikke avdelingen gruppert etter og vist i resultatene. Så resultatet er avdelingsnavn med totalt antall ansatte tilstede i hver avdeling.
Spørsmål:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Sorter etter
Sorter etter klausul utfører på kolonnenavn i Hive-tabeller for å sortere utdataene. Vi kan nevne DESC for sortering av rekkefølgen i synkende rekkefølge og nevne ASC for stigende rekkefølge.
I denne sorteringen vil den sortere radene før den mates til reduksjonen. Sorter alltid etter, avhenger av kolonnetyper.
For eksempel, hvis kolonnetyper er numeriske vil den sorteres i numerisk rekkefølge hvis kolonnetypene er streng, vil den sorteres i leksikografisk rekkefølge.
Fra skjermbildet ovenfor kan vi observere følgende:
- Det er spørringen som utfører på tabellen "employees_guru" med SORT BY-klausulen med "id" som definerer SORT BY-kolonnenavnet. Vi brukte søkeordet DESC.
- Så utgangen som vises vil være i synkende rekkefølge av "id".
Spørsmål:
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
Cluster By brukes som et alternativ for både Distribuer BY og Sort BY klausuler i Hive-QL.
Cluster BY-klausul brukt på tabeller som finnes i Hive. Hive bruker kolonnene i Cluster ved å fordele radene mellom reduksjonsgir. Cluster BY-kolonnene vil gå til de flere reduksjonselementene.
- Det sikrer sorteringsrekkefølger av verdier som er tilstede i flere reduksjonsenheter
For eksempel, Cluster Ved klausul nevnt på Id-kolonnenavnet til tabellen ansatte_guru-tabellen. Utdataene når du utfører denne spørringen vil gi resultater til flere reduksjonsenheter på baksiden. Men som grensesnitt er det en alternativ klausul for både Sorter etter og Distribuer etter.
Dette er faktisk backend-prosess når vi utfører en spørring med sortering etter, grupper etter og klynge etter når det gjelder kartreduseringsrammeverk. Så hvis vi ønsker å lagre resultater i flere reduksjonsenheter, går vi med Cluster By.
Fra skjermbildet ovenfor får vi følgende observasjoner:
- Det er spørringen som utfører CLUSTER BY-klausul på Id-feltverdi. Her kommer det til å få en sortering på ID-verdier.
- Den viser ID og navn som finnes i guru_employees sortert etter
Spørsmål:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Distribuer etter
Distribuer BY-klausul brukt på tabeller som finnes i Hive. Hive bruker kolonnene i Distribuer etter for å fordele radene mellom redusering. Alle Distribuer BY-kolonner vil gå til samme redusering.
- Det sikrer at hver av N reduksjonsenheter får ikke-overlappende kolonneområder
- Den sorterer ikke utgangen til hver reduksjonsgir
Fra skjermbildet ovenfor kan vi observere følgende
- DISTRIBUTE BY-klausulen opptrer på Id-en til «employees_guru»-tabellen
- Utgang som viser ID, navn. På baksiden vil den gå til samme redusering
Spørsmål:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;