Windowing in HiveQL

Das Konzept von Fensterung in der SQL eingeführt: 2003-Standard ermöglicht die SQL-Programmierer einen Rahmen aus den Daten, an denen zu erstellen aggregieren und andere Fensterfunktionen arbeiten kann. HiveQL unterstützt jetzt Windowing pro SQL-Standard. Beispiele dafür sind sehr hilfreich, wenn Windowing und Aggregatfunktionen zu erklären.

Abfahrt Verzögerungen kommen mit dem Gebiet, wenn der gewählte Modus der Reise fliegen ist. Es ist keine Überraschung, dass der RITA-kompilierten Flugdaten diese Informationen enthält. "Was genau ist die durchschnittliche Flugverspätung pro Tag"? Die Abfrage in der folgenden Auflistung ist der durchschnittliche Abflugverspätung pro Tag im Jahr 2008.

(EIN) hive (Flugdaten)> CREATE VIEW avgdepdelay AS> SELECT DayOfWeek, AVG (DepDelay) FROM FlightInfo2008 GROUP BY DayOfWeek-OKTime genommen: 0,121 Sekunden
(B) hive (Flugdaten)> SELECT * FROM avgdepdelay -... OK1 10,2699902444594732 8,976897120687353 8,2897610536587284 9,7728971778367025 12,1580363878696566 8,6456809049036147 11.568973392595312Time genommen: 18,6 Sekunden, Fetched: 7 Zeile (n)

TGIF, oder "Gott sei Dank, es ist Freitag", gilt nicht für alle. Es sollte nicht überraschen, dass der Freitag - Tag 5 unter den Ergebnissen in Schritt (B) - die höchste Zahl von Verzögerungen hatte.

Wie auch immer, um diese Abfrage in Schritt (A): Hive Data Definition Language (DDL) umfasst auch die CREATE VIEW Anweisung, die sehr nützlich sein können. In Hive erlauben Ansichten eine Abfrage gespeichert werden, aber die Daten nicht wie bei der Tabelle erstellen, wie Select (CTAS) Anweisung gespeichert.

Wenn eine Ansicht in HiveQL referenziert wird, führt die Abfrage Hive und verwendet dann die Ergebnisse, die Teil einer größeren query sein könnte. Dies kann sehr nützlich sein, komplexe Abfragen zu vereinfachen und brechen sie in logische Komponenten nach unten. Darüber hinaus beachten Sie die GROUP BY-Klausel, die alle Tage pro Woche sammelt und ermöglicht es dem AVG Aggregatfunktion eine konsolidierte Antwort pro Tag zur Verfügung zu stellen.

Diese Informationen sind nützlich, natürlich, aber was ist, wenn Sie ein paar einzelne Nummern pro Tag zu sehen? Konsolidieren Sie die Daten mit GRUPPIERE NACH, und Sie haben die Antwort, die Sie suchen, wenn Sie Informationen und verloren haben. dieses Problem der Informationsverlust zu lösen, ist in dem Windowing ganz praktisch wird.

Hier ist eine andere Frage über die RITA 2008 Flugdaten, die Apache Hive beantworten: "Was ist der erste Flug zwischen Flughafen X und Y"? Nehmen wir an, dass zusätzlich zu diesen Informationen Sie über nachfolgende Flüge wissen wollen, nur für den Fall, dass Sie kein bist "Morgenmensch." Nun, dies ist ein Job für Windowing in HiveQL! Die folgende Auflistung liefert Ihnen eine Abfrage, die diese Fragen beantwortet.

(EIN) hive (Flugdaten)> SELECT f08.Month, f08.DayOfMonth, cr.description, f08.Origin, f08.Dest, f08.FlightNum, f08.DepTime, MIN (f08.DepTime) OVER (PARTITION BY f08.DayOfMonth ORDER BY f08 .DepTime) FROM flightinfo2008 f08 JOIN Carriers cr ONf08.UniqueCarrier = cr.codeWHERE f08.Origin = 'JFK' AND f08.Dest = 'ORD' ANDf08.Month = 1 und f08.DepTime! = 0 -... OK1 1 JetBlue Airways JFK ORD 903 641 6411 1 American Airlines Inc. JFK ORD 1323 833 6411 1 JetBlue Airways JFK ORD 907 929 6411 1 Comair Inc. JFK ORD 5083 945 6411 1 Comair Inc. JFK ORD 5634 1215 6411 1 JetBlue Airways JFK ORD 915 1352 6411 1 American Airlines Inc. JFK ORD 1323 833 6411 1 JetBlue Airways JFK ORD 907 929 6411 1 Comair Inc. JFK ORD 5083 945 6411 1 Comair Inc. JFK ORD 5634 1215 6411 1 JetBlue Airways JFK ORD 915 1352 6411 1 American Airlines Inc. JFK ORD 1815 1610 6411 1 JetBlue Airways JFK ORD 917 1735 6411 1 Comair Inc. JFK ORD 5469 1749 6411 1 Comair Inc. JFK ORD 5492 2000 6411 1 JetBlue Airways JFK ORD 919 2102 6411 31 JetBlue Airways JFK ORD 919 48 481 31 JetBlue Airways JFK ORD 903 635 481 31 Comair Inc. JFK ORD 5447 650 481 31 American Airlines Inc. JFK ORD 1323 840 481 31 JetBlue Airways JFK ORD 907 921 481 31 JetBlue Airways JFK ORD 917 1859 48

In Schritt (A), der GRUPPIERE NACH Klausel wurde mit der ersetzt ZU ENDE Klausel, wo Sie die angeben PARTITION oder ein Fenster, über die Sie wollen, dass die MIN Aggregatfunktion zu betreiben. Ebenfalls enthalten ist die SORTIEREN NACH Klausel so, dass Sie diese folgenden Flüge nach dem ersten zu sehen.

Wie Sie aus der Liste sehen können, am 31. Januar, hat JetBlue einen schönen, frühen Flug um 12:48 Uhr -opt für eine spätere ein, um 06.35 Frühaufsteher- Fragen beiseite, beachten Sie, dass Sie die Informationen erhalten haben, in die Ausgabe der Abfrage, die verloren worden wäre, wenn Sie eine gewählt hatte, zu verwenden, GRUPPIERE NACH Klausel wieder.

Diese Fähigkeit allein macht eine leistungsstarke Funktion Windowing und es gibt mehr. Zusammen mit Fensterung im Hive 0.11 Release, sofern die Gemeinschaft einige Analysefunktionen, die Sie in Verbindung mit Windowing verwenden können. Auch zu Ihrer Verfügung stehen diese Funktionen: RANG, ZEILENNUMMER, DENSE_RANK, CUME_DIST, PERCENT_RANK, und NTILE.

Schließlich, verpassen Sie nicht die Verwendung von BEITRETEN: Es ist eine reale, praktische Beispiel für eine innere Verknüpfung, in dem Sie die Verknüpfung FlightInfo2008 Tabelle mit den Carriers Tabelle den Namen der Fluggesellschaft zu bekommen - und nicht der kryptischen Code in das gefunden FlightInfo2008 Tabelle.

Menü