Hive tillhandahåller SQL-frågespråk för ETL-syftet ovanpå Hadoop-filsystemet.
Hive Query language (HiveQL) ger SQL-typmiljö i Hive för att arbeta med tabeller, databaser, frågor.
Vi kan ha en annan typ av klausuler associerade med Hive för att utföra manipuleringar och frågor av olika typer av data. För bättre anslutning till olika noder utanför miljön. HIVE tillhandahåller också JDBC-anslutning.
Hive-frågor ger följande funktioner:
- Datamodellering som skapande av databaser, tabeller etc.
- ETL-funktioner som extraktion, transformation och laddning av data i tabeller
- Sammanfogar för att slå samman olika datatabeller
- Användarspecifika anpassade skript för att underlätta för koden
- Snabbare frågeverktyg ovanpå Hadoop
I den här artikeln kommer du att lära dig-
- Beställ efter förfrågan
- Gruppera efter fråga
- Sortera efter
- Cluster By
- Distribuera av
Skapa tabell i bikupan
Innan vi börjar med vårt huvudämne för den här handledningen skapar vi först en tabell för att använda den som referenser för följande handledning.
Här i den här handledningen ska vi skapa tabellen "medarbetare_guru" med 6 kolumner.
Från ovanstående skärmdump,
- Vi skapar tabellen "medarbetare_guru" med 6 kolumnvärden som Id, Namn, Ålder, Adress, Lön, Avdelning, som tillhör de anställda som finns i organisationen "guru."
- Här i det här steget laddar vi data till medarbetare_guru-tabellen. De data som vi ska ladda kommer att placeras under filen Staff.txt
Sortera efter förfrågan:
ORDER BY-syntaxen i HiveQL liknar syntaxen för ORDER BY i SQL-språk.Order by är den klausul som vi använder med "SELECT" -uttryck i Hive-frågor, vilket hjälper till att sortera data. Ordna efter klausul använder kolumner i Hive-tabeller för att sortera specifika kolumnvärden som nämns med Ordna efter. Oavsett vilket kolumnnamn vi definierar ordningen efter paragraf kommer frågan att välja och visa resultat genom stigande eller fallande ordning på de särskilda kolumnvärdena.
Om den nämnda ordningen efter fält är en sträng visas resultatet i lexikografisk ordning. I bakänden måste den överföras till en enda reducerare.
Från ovanstående skärmdump kan vi observera följande
- Det är frågan som utförs på tabellen "workers_guru" med ORDER BY-satsen med avdelning som definierad ORDER BY-kolumnnamn.
"Avdelning" är sträng så den visar resultat baserat på lexikografisk ordning.
- Detta är den faktiska utdata för frågan. Om vi observerar det ordentligt kan vi se att det visas resultat baserat på avdelningskolumn som ADMIN, Ekonomi och så vidare för att kunna utföra.
Fråga:
SELECT * FROM employees_guru ORDER BY Department;
Gruppera efter fråga:
Gruppera efter sats Använd kolumner i Hive-tabeller för att gruppera specifika kolumnvärden som nämns med gruppen efter. Oavsett vilket kolumnnamn vi definierar en "gruppby" -fråga kommer frågan att välja och visa resultat genom att gruppera de särskilda kolumnvärdena.
Till exempel, i skärmbilden nedan kommer det att visa det totala antalet anställda närvarande i varje avdelning. Här har vi "Avdelning" som grupp efter värde.
Från ovanstående skärmdump kommer vi att observera följande
- Det är frågan som utförs i tabellen "medarbetare_guru" med GROUP BY-satsen med avdelning som definierat GROUP BY-kolumnnamn.
- Produktionen som visas här är avdelningsnamnet och de anställda räknas i olika avdelningar. Här grupperas alla anställda till den specifika avdelningen och visas i resultaten. Så resultatet är avdelningsnamn med det totala antalet anställda närvarande i varje avdelning.
Fråga:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Sortera efter:
Sortera efter paragraf utförs på kolumnnamn på Hive-tabeller för att sortera utdata. Vi kan nämna DESC för att sortera ordningen i fallande ordning och nämna ASC för stigande ordning av sorten.
I den här sorten sorterar den raderna innan den matas till reduceringsenheten. Sortera alltid efter beror på kolumntyper.
Till exempel, om kolumntyper är numeriska sorteras det i numerisk ordning om kolumntyperna är strängar kommer det att sorteras i lexikografisk ordning.
Från ovanstående skärmdump kan vi observera följande:
- Det är frågan som utförs på tabellen "medarbetare_guru" med SORT BY-satsen med "id" som definierar Sortera efter kolumnnamn. Vi använde nyckelordet DESC.
- Så den visade utgången kommer att vara i fallande ordning på "id".
Fråga:
SELECT * from employees_guru SORT BY Id DESC;
Cluster av:
Cluster By används som ett alternativ för både Distribution BY och Sort BY-klausuler i Hive-QL.
Cluster BY-klausul som används i tabeller i Hive. Hive använder kolumnerna i Cluster by för att fördela raderna bland reducerare. Cluster BY-kolumner kommer att gå till flera reducerare.
- Det säkerställer sorteringsordrar av värden som finns i flera reducerare
Till exempel Cluster By-sats som nämns i kolumnens Id-ID för tabellen workers_guru-tabellen. Utdata när den här frågan körs ger resultat till flera reducerare i bakänden. Men som frontend är det en alternativ klausul för både Sortera efter och Distribuera efter.
Detta är faktiskt backend-processen när vi utför en fråga med sortera efter, gruppera efter och kluster efter när det gäller Map-reducera ramverk. Så om vi vill lagra resultat i flera reducerare går vi med Cluster By.
Från ovanstående skärmdump får vi följande observationer:
- Det är frågan som utför CLUSTER BY-satsen på Id-fältets värde. Här kommer det att få en sortering av Id-värden.
- Den visar id och namn som finns i guru_employees sorterat efter
Fråga:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Distribuera av:
Distribuera BY-klausul som används på tabeller som finns i Hive. Hive använder kolumnerna i Distribuera av för att fördela raderna bland reducerare. Alla Distribuera BY-kolumner kommer till samma reducerare.
- Det säkerställer att varje N-reducering får kolumnintervall som inte överlappar varandra
- Det sorterar inte produktionen från varje reducerare
Från ovanstående skärmdump kan vi observera följande
- FÖRDELNING AV Klausul som utförs på Id för "empoloyees_guru" -tabellen
- Utdata som visar ID, namn. I bakänden går den till samma reducerare
Fråga:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;