Hive-frågor: Beställ efter, Gruppera efter, Distribuera efter, Cluster Genom exempel

Hive tillhandahåller frågespråk av SQL-typ för ETL-ändamål ovanpå Hadoop filsystem.

Hive Query Language (HiveQL) tillhandahåller SQL-miljö i Hive för att arbeta med tabeller, databaser, frågor.

Vi kan ha en annan typ av klausuler kopplade till Hive för att utföra olika typer av datamanipulationer och förfrågningar. För bättre anslutning till olika noder utanför miljön. HIVE tillhandahåller JDBC-anslutning också.

Hive-frågor ger följande funktioner:

  • Datamodellering såsom Skapande av databaser, tabeller, etc.
  • ETL-funktioner som extrahering, transformation och laddning av data till tabeller
  • Fogar att slå samman olika datatabeller
  • Användarspecifika anpassade skript för enkel kod
  • Snabbare frågeverktyg ovanpå Hadoop

Skapa tabell i Hive

Innan vi börjar med vårt huvudämne för denna handledning, 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 kommer vi att skapa tabellen "anställda_guru" med 6 kolumner.

Skapa tabell i Hive

Från ovanstående skärmdump,

  1. Vi skapar tabellen "anställda_guru" med 6 kolumnvärden som Id, Namn, Ålder, Adress, Lön, Avdelning, som tillhör de anställda som finns i organisationens "guru."
  2. Här i det här steget laddar vi in ​​data i tabellen anställda_guru. Datan som vi ska ladda kommer att placeras under Employees.txt-filen

Beställ efter fråga

ORDER BY-syntaxen i HiveQL liknar syntaxen för ORDER BY i SQL språk.

Ordning efter är satsen vi använder med "SELECT"-satsen i Hive-frågor, vilket hjälper till att sortera data. Ordna efter klausul använd kolumner i Hive-tabeller för att sortera specifika kolumnvärden som nämns med Ordna efter. Oavsett vilket kolumnnamn vi definierar ordningsföljd av klausul kommer frågan att välja och visa resultat i stigande eller fallande ordning de specifika kolumnvärdena.

Om det nämnda fältordningen är en sträng, kommer resultatet att visas i lexikografisk ordning. På baksidan måste den föras vidare till en enda reducering.

Beställ efter fråga

Från skärmdumpen ovan kan vi observera följande

  1. Det är frågan som utför på tabellen "anställda_guru" med ORDER BY-satsen med avdelning som definierats ORDER BY kolumnnamn."Department" är String så att den kommer att visa resultat baserat på lexikografisk ordning.
  2. Detta är faktisk utdata för frågan. Om vi ​​observerar det ordentligt kan vi se att det får resultat som visas baserat på avdelningskolumnen som ADMIN, Ekonomi och så vidare för att Query ska utföras.

Fråga:

SELECT * FROM employees_guru ORDER BY Department;

Gruppera efter fråga

Gruppera efter klausul använd kolumner i Hive-tabeller för att gruppera specifika kolumnvärden som nämns med gruppen efter. Oavsett kolumnnamn definierar vi en "groupby"-klausul kommer frågan att välja och visa resultat genom att gruppera de specifika kolumnvärdena.

Till exempel, i skärmdumpen nedan kommer det att visa det totala antalet anställda som finns på varje avdelning. Här har vi "Avdelning" som Grupp efter värde.

Gruppera efter fråga

Från ovanstående skärmdump kommer vi att observera följande

  1. Det är frågan som utförs på tabellen "anställda_guru" med GROUP BY-satsen med avdelning som definierat GROUP BY-kolumnnamn.
  2. Resultatet som visas här är avdelningsnamnet och medarbetarna räknas på olika avdelningar. Här grupperas alla anställda som tillhör den specifika avdelningen efter och visas i resultaten. Så resultatet är avdelningsnamn med det totala antalet anställda som finns på varje avdelning.

Fråga:

SELECT Department, count(*) FROM employees_guru GROUP BY Department;

Sortera efter

Sortera efter-sats utförs på kolumnnamn i 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.

I det här fallet kommer den att sortera raderna innan den matas till reduceringen. Sortera alltid efter beror på kolumntyper.

Till exempel, om kolumntyper är numeriska kommer den att sorteras i numerisk ordning om kolumntyperna är strängar kommer den att sorteras i lexikografisk ordning.

Sortera efter

Från ovanstående skärmdump kan vi observera följande:

  1. Det är frågan som utför på tabellen "anställda_guru" med SORT BY-satsen med "id" som definierar SORT BY kolumnnamn. Vi använde nyckelordet DESC.
  2. Så utdata som visas kommer att vara i fallande ordning på "id".

Fråga:

SELECT * from employees_guru SORT BY Id DESC;

Cluster By

Cluster By används som ett alternativ för både Distribute BY och Sort BY-satser i Hive-QL.

Cluster BY-sats som används på tabeller som finns i Hive. Hive använder kolumnerna i Cluster genom att fördela raderna mellan reducerarna. Cluster BY-kolumner kommer att gå till de multipla reducerarna.

  • Det säkerställer sorteringsordningar för värden som finns i flera reducerare

Till exempel, Cluster Genom klausul som nämns i Id-kolumnnamnet för tabellen anställda_guru. Utdata när den här frågan körs kommer att ge resultat till flera reducerare på baksidan. Men som gränssnitt är det en alternativ klausul för både Sortera efter och Distribuera efter.

Detta är faktiskt back-end-process när vi utför en fråga med sortera efter, gruppera efter och klustera efter i termer av Map reduce framework. Så om vi vill lagra resultat i flera reducerare går vi med Cluster By.

Cluster By

Från ovanstående skärmdump får vi följande observationer:

  1. Det är frågan som utför CLUSTER BY-satsen på Id-fältvärdet. Här kommer det att få en sorts ID-värden.
  2. Den visar ID och namn som finns i guru_employees sorterade efter

Fråga:

SELECT  Id, Name from employees_guru CLUSTER BY Id;

Distribuera efter

Distribuera BY-sats som används på tabeller som finns i Hive. Hive använder kolumnerna i Distribute by för att fördela raderna mellan reducerarna. Alla Distribute BY-kolumner kommer att gå till samma reducering.

  • Det säkerställer att var och en av N reducerare får icke-överlappande kolumnintervall
  • Det sorterar inte utsignalen från varje reducerare

Distribuera efter

Från ovanstående skärmdump kan vi observera följande

  1. DISTRIBUTE BY Klausul uppträder på Id för "empoloyees_guru"-tabellen
  2. Utdata som visar ID, Namn. På baksidan kommer den att gå till samma reducering

Fråga:

SELECT  Id, Name from employees_guru DISTRIBUTE BY Id;