Hive-zoekopdrachten: sorteren op, groeperen op, distribueren op, clusteren op voorbeelden

Inhoudsopgave:

Anonim

Hive biedt SQL-type querytaal voor ETL-doeleinden bovenop het Hadoop-bestandssysteem.

Hive Query-taal (HiveQL) biedt een SQL-type omgeving in Hive om met tabellen, databases en query's te werken.

We kunnen een ander type clausules hebben die aan Hive zijn gekoppeld om verschillende typen datamanipulaties en query's uit te voeren. Voor betere connectiviteit met verschillende knooppunten buiten de omgeving. HIVE biedt ook JDBC-connectiviteit.

Hive-query's bieden de volgende functies:

  • Gegevensmodellering zoals het maken van databases, tabellen, enz.
  • ETL-functionaliteiten zoals extractie, transformatie en het laden van gegevens in tabellen
  • Wordt samengevoegd om verschillende gegevenstabellen samen te voegen
  • Gebruikersspecifieke aangepaste scripts voor eenvoudige code
  • Snellere querytool bovenop Hadoop

In dit artikel leert u:

  • Sorteer op vraag
  • Groepeer op zoekopdracht
  • Sorteer op
  • Cluster door
  • Verspreid door

Tabel maken in Hive

Voordat we beginnen met ons hoofdonderwerp voor deze tutorial, zullen we eerst een tabel maken om deze te gebruiken als referentie voor de volgende tutorial.

Hier in deze tutorial gaan we een tabel "workers_guru" maken met 6 kolommen.

Van de bovenstaande schermafbeelding,

  1. We maken een tabel "workers_guru" met 6 kolomwaarden zoals Id, Name, Age, Address, Salary, Department, die toebehoort aan de werknemers die aanwezig zijn in de "guru" van de organisatie.
  2. Hier in deze stap laden we gegevens in de tabel workers_guru. De gegevens die we gaan laden, worden onder het bestand Employees.txt geplaatst

Sorteer op vraag:

De ORDER BY-syntaxis in HiveQL is vergelijkbaar met de syntaxis van ORDER BY in SQL-taal.

Sorteren op is de clausule die we gebruiken met de "SELECT" -instructie in Hive-query's, die helpt bij het sorteren van gegevens. Order by-clausule gebruik kolommen in Hive-tabellen voor het sorteren van bepaalde kolomwaarden die worden genoemd met Order by. Ongeacht de kolomnaam definiëren we de volgorde per clausule, de query selecteert en geeft resultaten weer in oplopende of aflopende volgorde van de specifieke kolomwaarden.

Als de genoemde volgorde voor veld een tekenreeks is, wordt het resultaat in lexicografische volgorde weergegeven. Aan de achterkant moet het worden doorgegeven aan een enkele reductor.

Uit de bovenstaande schermafbeelding kunnen we het volgende zien

  1. Het is de vraag die wordt uitgevoerd op de "werknemers_goeroe" -tabel met de ORDER BY-clausule met Afdeling zoals gedefinieerd in de ORDER BY-kolomnaam.

    "Afdeling" is Tekenreeks, dus het toont resultaten op basis van lexicografische volgorde.

  2. Dit is de werkelijke output voor de query. Als we het goed observeren, kunnen we zien dat het resultaten krijgt die worden weergegeven op basis van de afdelingskolom zoals ADMIN, Financiën enzovoort, zodat de query moet worden uitgevoerd.

Vraag:

SELECT * FROM employees_guru ORDER BY Department;

Groeperen op zoekopdracht:

Group by-clausule gebruik kolommen in Hive-tabellen voor het groeperen van bepaalde kolomwaarden die worden genoemd met de group by. Voor welke kolomnaam we ook een "groupby" -clausule definiëren, de query zal resultaten selecteren en weergeven door de specifieke kolomwaarden te groeperen.

In de onderstaande schermafbeelding wordt bijvoorbeeld het totale aantal werknemers op elke afdeling weergegeven. Hier hebben we "Afdeling" als Groep op waarde.

Uit de bovenstaande schermafbeelding zullen we het volgende observeren

  1. Het is de vraag die wordt uitgevoerd op de "werknemers_goeroe" -tabel met de GROUP BY-clausule met Afdeling zoals gedefinieerd in GROUP BY-kolomnaam.
  2. De output die hier te zien is, is de afdelingsnaam en de medewerkers tellen op verschillende afdelingen. Hier zijn alle medewerkers die tot de specifieke afdeling behoren, gegroepeerd op en weergegeven in de resultaten. Het resultaat is dus de afdelingsnaam met het totale aantal medewerkers dat op elke afdeling aanwezig is.

Vraag:

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

Sorteer op:

Sort by-clausule werkt op kolomnamen van Hive-tabellen om de uitvoer te sorteren. We kunnen DESC vermelden om de volgorde in aflopende volgorde te sorteren en ASC vermelden voor de oplopende volgorde van de soort.

Bij deze sortering worden de rijen gesorteerd voordat ze naar het reductiemiddel worden gevoerd. Sorteer altijd op afhankelijk van kolomtypen.

Als kolomtypen bijvoorbeeld numeriek zijn, wordt in numerieke volgorde gesorteerd. Als de kolomtypen tekenreeksen zijn, wordt in lexicografische volgorde gesorteerd.

Uit de bovenstaande schermafbeelding kunnen we het volgende zien:

  1. Het is de vraag die wordt uitgevoerd op de tabel "workers_guru" met de SORT BY-clausule met "id" zoals definiëren SORT BY-kolomnaam. We hebben het trefwoord DESC gebruikt.
  2. De weergegeven uitvoer is dus in aflopende volgorde van "id".

Vraag:

SELECT * from employees_guru SORT BY Id DESC;

Cluster door:

Cluster By wordt gebruikt als alternatief voor zowel Distribute BY- als Sort BY-clausules in Hive-QL.

Cluster BY-component die wordt gebruikt voor tabellen die aanwezig zijn in Hive. Hive gebruikt de kolommen in Cluster by om de rijen over reducers te verdelen. Cluster BY-kolommen gaan naar de meerdere reducers.

  • Het zorgt voor sorteervolgorde van waarden die aanwezig zijn in meerdere verloopstukken

Bijvoorbeeld, Cluster By-clausule die wordt vermeld in de Id-kolomnaam van de tabel workers_guru-tabel. De uitvoer bij het uitvoeren van deze query geeft resultaten aan meerdere reducers aan de achterkant. Maar als frontend is het een alternatieve clausule voor zowel Sort By als Distribute By.

Dit is eigenlijk een back-end-proces wanneer we een query uitvoeren met sorteren op, groeperen op en clusteren op in termen van het kader voor het verkleinen van kaarten. Dus als we resultaten in meerdere reducers willen opslaan, gaan we met Cluster By.

Uit de bovenstaande schermafbeelding krijgen we de volgende opmerkingen:

  1. Het is de query die de CLUSTER BY-clausule uitvoert op de Id-veldwaarde. Hier krijgt het een sortering van ID-waarden.
  2. Het toont het ID en de namen die aanwezig zijn in de guru_employees-sortering gesorteerd op

Vraag:

SELECT Id, Name from employees_guru CLUSTER BY Id;

Distribueren door:

Distribueer de BY-component die wordt gebruikt voor tabellen die aanwezig zijn in Hive. Hive gebruikt de kolommen in Distribute by om de rijen over reducers te verdelen. Alle Distribute BY-kolommen gaan naar hetzelfde verloopstuk.

  • Het zorgt ervoor dat elk van de N-verloopstukken niet-overlappende kolombereiken krijgt
  • Het sorteert niet de output van elk verloopstuk

Uit de bovenstaande schermafbeelding kunnen we het volgende zien

  1. DISTRIBUTE BY Clausule presteert op id van "empoloyees_guru" -tabel
  2. Uitgang met ID, naam. Aan de achterkant gaat het naar hetzelfde verloopstuk

Vraag:

SELECT Id, Name from employees_guru DISTRIBUTE BY Id;