Video: Analytical Queries with Hive SQL Windowing and Table Functions 2024
Das im SQL: 2003-Standard eingeführte Konzept der Fensterung,, ermöglicht es dem SQL-Programmierer, aus den Daten, Aggregat und andere Fensterfunktionen können funktionieren. HiveQL unterstützt jetzt die Fensterung nach dem SQL-Standard. Beispiele sind sehr hilfreich bei der Erklärung von Fenster- und Aggregatfunktionen.
Abfahrtsverzögerungen kommen mit dem Gebiet, wenn das Fliegen Ihre gewählte Flugart ist. Es überrascht daher nicht, dass die von RITA erstellten Flugdaten diese Informationen enthalten. & ldquo; Was genau ist die durchschnittliche Flugverzögerung pro Tag & rdquo; ? Die Abfrage in der folgenden Auflistung ergibt die durchschnittliche Abfahrtsverzögerung pro Tag im Jahr 2008.
(A) hive (Flugdaten)> CREATE VIEW avgdepdelay AS> SELECT DayOfWeek, AVG (DepDelay) VON FlightInfo2008 GROUP BY DayOfWeek; OK Zeit genommen: 0. 121 Sekunden (B) hive (Flugdaten)> SELECT * FROM avgdepdelay; … OK 1 10. 269990244459473 2 8. 97689712068735 3 8. 289761053658728 4 9. 772897177836702 5 12. 158036387869656 6 8. 645680904903614 7 11. 568973392595312 Eingesetzte Zeit: 18. 6 Sekunden, abgeholt: 7 Reihe (n)
TGIF, oder & ldquo; Gott sei Dank ist es Freitag, & rdquo; gilt nicht für alle. Es sollte keine Überraschung sein, dass Freitag - Tag 5 unter den Ergebnissen in Schritt (B) - die höchste Anzahl von Verzögerungen hatte.
Wie auch immer, zu dieser Abfrage in Schritt (A): Die Data Definition Language (DDL) von Hive enthält auch die Anweisung CREATE VIEW, die sehr nützlich sein kann. In Hive können Ansichten eine Abfrage speichern, aber Daten werden nicht wie bei der Anweisung Create Table as Select (CTAS) gespeichert.
Wenn eine Ansicht in HiveQL referenziert wird, führt Hive die Abfrage aus und verwendet dann die Ergebnisse, die Teil einer größeren Abfrage sein könnten. Dies kann sehr nützlich sein, um komplexe Abfragen zu vereinfachen und in logische Komponenten aufzuteilen. Beachten Sie außerdem die GROUP BY-Klausel, die alle Tage pro Woche erfasst und der AVG-Aggregatfunktion ermöglicht, eine konsolidierte Antwort pro Tag bereitzustellen.
Diese Information ist natürlich nützlich, aber was ist, wenn Sie einzelne Zahlen pro Tag sehen möchten? Konsolidieren Sie die Daten mit GROUP BY, und Sie haben die Antwort, nach der Sie suchen, obwohl Sie auch Informationen verloren haben. Dieses Problem des Informationsverlustes wird gelöst, wenn das Fenster sehr nützlich wird.
Hier ist eine weitere Frage zu den Flugdaten von RITA 2008, die Apache Hive beantworten kann: & ldquo; Was ist der erste Flug zwischen Flughafen X und Y & rdquo; ? Angenommen, Sie möchten zusätzlich zu diesen Informationen auch über nachfolgende Flüge informiert werden, nur für den Fall, dass Sie kein & ldquo; Frühaufsteher.& rdquo; Nun, das ist ein Job für das Fenster in HiveQL! Die folgende Auflistung enthält eine Abfrage, die diese Fragen beantwortet.
(A) Bienenstock (Flugdaten)> SELECT f08. Monat, f08. DayOfMonat, cr. Beschreibung, f08. Ursprung, f08. Dest, f08. Flugnummer, f08. DepTime, MIN (f08. DepTime) ÜBER (PARTITION BY f08. DayOfMonth ORDER BY f08. DepTime) FROM flightinfo2008 f08 REGISTRIEREN Carriers cr ON f08. UniqueCarrier = cr. Kode WHERE f08. Herkunft = 'JFK' UND f08. Dest = 'ORD' UND f08. Monat = 1 UND f08. DepTime! = 0; … OK 1 1 JetBlue Airways JFK ORD 903 641 641 1 1 American Airlines Inc. JFK ORD 1323 833 641 1 1 JetBlue Airways JFK ORD 907 929 641 1 1 Comair Inc. JFK ORD 5083 945 641 1 1 Comair Inc. JFK ORD 5634 1215 641 1 1 JetBlue Airways JFK ORD 915 1352 641 1 1 American Airlines Inc. JFK ORD 1323 833 641 1 1 JetBlue Airways JFK ORD 907 929 641 1 1 Comair Inc. JFK ORD 5083 945 641 1 1 Comair Inc. JFK ORD 5634 1215 641 1 1 JetBlue Airways JFK ORD 915 1352 641 1 1 American Airlines Inc. JFK ORD 1815 1610 641 1 1 JetBlue Airways JFK ORD 917 1735 641 1 1 Comair Inc. JFK ORD 5469 1749 641 1 1 Comair Inc. JFK ORD 5492 2000 641 1 1 JetBlue Airways JFK ORD 919 2102 641 1 31 JetBlue Airways JFK ORD 919 48 48 1 31 JetBlue Airways JFK ORD 903 635 48 1 31 Comair Inc. JFK ORD 5447 650 48 1 31 American Airlines Inc. JFK ORD 1323 840 48 1 31 JetBlue Airways JFK ORD 907 921 48 1 31 JetBlue Airways JFK ORD 917 1859 48
In Schritt (A) wurde die GROUP BY-Klausel durch die OVER-Klausel ersetzt, in der Sie die PARTITION oder Fenster, über das die MIN-Aggregatfunktion ausgeführt werden soll. Außerdem ist die ORDER BY-Klausel enthalten, damit Sie die nachfolgenden Flüge nach der ersten sehen können.
Wie Sie der Auflistung entnehmen können, hat JetBlue am 31. Januar einen schönen Frühflug um 12:48 Uhr. m. -opt für einen späteren, um 6:35 Uhr a. m. Beachten Sie, dass Sie abgesehen von frühen Riser-Problemen die Informationen in der Abfrageausgabe beibehalten haben, die verloren gegangen wären, wenn Sie eine GROUP BY-Klausel erneut verwendet hätten.
Allein diese Fähigkeit macht das Windowing zu einem mächtigen Feature und es gibt noch mehr. Zusammen mit dem Windowing in der Version Hive 0.11 hat die Community einige Analysefunktionen bereitgestellt, die Sie in Verbindung mit Windowing verwenden können. Ihnen stehen außerdem folgende Funktionen zur Verfügung: RANK, ROW_NUMBER, DENSE_RANK, CUME_DIST, PERCENT_RANK und NTILE.
Schließlich verpassen Sie nicht die Verwendung von JOIN: Es ist ein praktisches Beispiel für einen inneren Join, bei dem Sie der Tabelle FlightInfo2008 mit der Tabelle Carriers beitreten, um den Namen der Fluggesellschaft zu erhalten. als der kryptische Code in der Tabelle FlightInfo2008.