Hive-Abfragebeispiele: ORDER BY, GROUP BY & Cluster By
⚡ Intelligente Zusammenfassung
Hive-Abfragen verwenden ORDER BY-, GROUP BY-, SORT BY-, CLUSTER BY- und DISTRIBUTE BY-Klauseln, um Zeilen zu sortieren, zu gruppieren und auf Reducer zu verteilen. Jede Klausel wird hier anhand einer einzelnen Beispiel-Mitarbeitertabelle demonstriert.

Hive bietet zusätzlich zu den bestehenden Funktionen eine SQL-ähnliche Abfragesprache für ETL-Zwecke. Hadoop Dateisystem.
Die Hive Query Language (HiveQL) bietet eine SQL-ähnliche Umgebung in Hive für die Arbeit mit Tabellen, Datenbanken und Abfragen.
Mit Hive sind verschiedene Arten von Klauseln verknüpft, um unterschiedliche Arten der Datenmanipulation und -abfrage durchzuführen. Hive bietet außerdem JDBC-Konnektivität für bessere Verbindungen mit Knoten außerhalb der Umgebung.
Hive-Abfragen bieten folgende Funktionen:
- Datenmodellierung wie die Erstellung von Datenbanken, Tabellen usw.
- ETL-Funktionalitäten wie z. B.tracDatentransformation, -umwandlung und -laden in Tabellen
- Joins um verschiedene Datentabellen zusammenzuführen
- Benutzerspezifische benutzerdefinierte Skripte zur Vereinfachung des Codes
- Schnelleres Abfragetool zusätzlich zu Hadoop
Tabelle in Hive erstellen
Bevor wir zum Hauptthema dieses Tutorials kommen, erstellen wir zunächst eine Tabelle, die als Referenz für die folgenden Abschnitte dienen soll.
In diesem Tutorial erstellen wir die Tabelle „employees_guru“ mit 6 Spalten, wie der untenstehende Screenshot zeigt.
Aus dem obigen Screenshot geht hervor,
- Wir erstellen die Tabelle „employees_guru“ mit 6 Spaltenwerten wie Id, Name, Age, Address, Salary, Department, die zu den Mitarbeitern der Organisation „guru“ gehören.
- In diesem Schritt laden wir Daten in die Tabelle employees_guru. Die zu ladenden Daten befinden sich in der Datei Employees.txt.
Bestellung nach Anfrage
Die ORDER BY-Syntax in HiveQL ist ähnlich der ORDER BY-Syntax in der SQL Sprache.
ORDER BY ist die Klausel, die wir mit der „SELECT“-Anweisung verwenden. Hive-Abfragen Zum Sortieren der Daten werden Spalten in Hive-Tabellen verwendet, um die mit ORDER BY angegebenen Spaltenwerte zu sortieren. Die Abfrage zeigt die Ergebnisse anschließend in aufsteigender oder absteigender Reihenfolge dieser Werte an.
Wenn das genannte ORDER BY-Feld ein String ist, wird das Ergebnis in lexikografischer Reihenfolge angezeigt. Im Backend muss das gesamte Ergebnis-Set an einen einzigen Reducer übergeben werden.
Dieser einzelne Reducer macht ORDER BY auch bei einer großen Tabelle teuer, daher im strikten Modus (hive.mapred.mode=strict) Hive lehnt eine ORDER BY-Anweisung ab, die keine LIMIT-Klausel enthält.
Der folgende Screenshot zeigt die ORDER BY-Abfrage und die sortierten Zeilen.
Aus dem obigen Screenshot lässt sich Folgendes erkennen:
- Es handelt sich um eine Abfrage der Tabelle „employees_guru“ mit der ORDER BY-Klausel und dem Spaltennamen „Department“. Da „Department“ ein String ist, werden die Ergebnisse in lexikografischer Reihenfolge angezeigt.
- Dies ist die tatsächliche Ausgabe der Abfrage. Die Ergebnisse werden der Reihe nach nach der Spalte „Abteilung“ angezeigt, z. B. „Verwaltung“, „Finanzen“ usw.
Abfrage:
SELECT * FROM employees_guru ORDER BY Department;
Nach Abfrage gruppieren
Die GROUP BY-Klausel verwendet Spalten in Hive-Tabellen für die Gruppierung.ping Die mit GROUP BY angegebenen Spaltenwerte werden in der Abfrage gruppiert und angezeigt.
Der folgende Screenshot zeigt beispielsweise die Gesamtzahl der Mitarbeiter in jeder Abteilung. Hier ist „Abteilung“ als Gruppierungskriterium verwendet.
Aus dem obigen Screenshot lässt sich Folgendes ablesen:
- Es handelt sich um eine Abfrage, die auf der Tabelle „employees_guru“ mit der GROUP BY-Klausel und Department als definiertem GROUP BY-Spaltennamen durchgeführt wird.
- Die hier angezeigte Ausgabe enthält den Abteilungsnamen und die Mitarbeiterzahl der einzelnen Abteilungen. Alle Mitarbeiter einer bestimmten Abteilung werden gruppiert und angezeigt, sodass jede Ergebniszeile den Abteilungsnamen mit der jeweiligen Mitarbeiterzahl enthält.
Abfrage:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Sortieren nach
Die SORT BY-Klausel sortiert die Ausgabe anhand der Spaltennamen von Hive-Tabellen. Mit DESC wird absteigend und mit ASC aufsteigend sortiert.
SORT BY sortiert die Zeilen, bevor sie an den Reducer übergeben werden. Dadurch ist die Reihenfolge innerhalb jedes Reducers gewährleistet, nicht aber im gesamten Ergebnis. Die Sortierung hängt immer vom Spaltentyp ab.
Wenn der Spaltentyp beispielsweise numerisch ist, wird in numerischer Reihenfolge sortiert, und wenn der Spaltentyp Zeichenkette ist, wird in lexikografischer Reihenfolge sortiert.
Der folgende Screenshot zeigt die SORT BY-Abfrage mit DESC.
Aus dem obigen Screenshot können wir Folgendes erkennen:
- Es handelt sich um eine Abfrage der Tabelle „employees_guru“ mit der SORT BY-Klausel und „Id“ als definiertem Spaltennamen für SORT BY. Wir haben das Schlüsselwort DESC verwendet.
- Die angezeigte Ausgabe erfolgt also in absteigender Reihenfolge der „Id“.
Abfrage:
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
CLUSTER BY wird in HiveQL als Alternative sowohl für die DISTRIBUTE BY- als auch für die SORT BY-Klausel verwendet.
Die CLUSTER BY-Klausel wird auf Tabellen in Hive angewendet. Hive nutzt die Spalten in CLUSTER BY, um die Zeilen auf die Reducer zu verteilen, wobei Spalten aus CLUSTER BY an mehrere Reducer gesendet werden. Außerdem wird die Sortierreihenfolge der Werte in diesen Reducern sichergestellt.
Beispielsweise wird die CLUSTER BY-Klausel im Spaltennamen „Id“ der Tabelle „employees_guru“ erwähnt. Die Ausführung dieser Abfrage liefert Ergebnisse an mehrere Reducer im Backend, im Frontend dient sie jedoch als alternative Klausel für SORT BY und DISTRIBUTE BY.
Dies ist der Backend-Prozess, der bei einer Abfrage mit SORT BY, GROUP BY oder CLUSTER BY im MapReduce-Framework abläuft. Wenn wir also Ergebnisse in mehreren Reducern speichern möchten, verwenden wir CLUSTER BY.
Die CLUSTER BY-Grammatik akzeptiert nur Spaltennamen, daher können ASC und DESC nicht an sie angehängt werden; ein absteigendes Ergebnis erfordert DISTRIBUTE BY mit einem separaten SORT BY … DESC.
Der folgende Screenshot zeigt die CLUSTER BY-Abfrage für die ID.
Aus dem obigen Screenshot können wir Folgendes feststellen:
- Es handelt sich um die Abfrage, die die CLUSTER BY-Klausel auf den Wert des Feldes „Id“ anwendet. Hier werden die Id-Werte sortiert.
- Es zeigt die in employees_guru vorhandenen Id- und Name-Werte in sortierter Reihenfolge an.
Abfrage:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Verteilen durch
Die DISTRIBUTE BY-Klausel wird für Tabellen in Hive verwendet. Hive nutzt die Spalten in DISTRIBUTE BY, um die Zeilen auf die Reducer zu verteilen, sodass alle Zeilen mit demselben Wert in der DISTRIBUTE BY-Spalte demselben Reducer zugeordnet werden.
- Es stellt sicher, dass jeder der N Reduzierer eine Nichtüberlappung erhält.ping Satz der Spaltenwerte
- Die Ausgabe der einzelnen Reducer wird nicht sortiert, und es wird nicht garantiert, dass übereinstimmende Zeilen nebeneinander stehen.
Der folgende Screenshot zeigt die DISTRIBUTE BY-Abfrage für die ID.
Aus dem obigen Screenshot lässt sich Folgendes erkennen:
- Die DISTRIBUTE BY-Klausel wird auf die ID der Tabelle „employees_guru“ angewendet.
- Die Ausgabe zeigt ID und Name an. Im Backend werden Zeilen mit derselben ID an denselben Reducer weitergeleitet.
Abfrage:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;
Die vier Klauseln können leicht verwechselt werden, daher vergleicht die folgende Tabelle sie.
| Klausel | Verschiedene Verbindungsstücke | Was es garantiert |
|---|---|---|
| SORTIEREN NACH | Eins | Gesamtergebnis |
| SORT BY - check | Viele | Bestellung nur innerhalb jedes Reduzierstücks |
| VERTEILEN DURCH | Viele | Derselbe Schlüssel erreicht denselben Reduzierer, unsortiert |
| Cluster nach | Viele | VERTEILEN NACH plus SORTIEREN NACH, aufsteigend |






