Verstehen des Zwecks der "having"-Klausel
In diesem Schritt werden wir den grundlegenden Zweck der "having"-Klausel in Hive untersuchen und wie sie mit der Datenfilterung und -aggregation zusammenhängt.
Die "having"-Klausel in Hive wird in Verbindung mit der "group by"-Klausel verwendet, um Gruppen von Daten basierend auf einer angegebenen Bedingung zu filtern. Es ermöglicht es Ihnen, einen Filter nach der Gruppierung und Aggregation der Daten anzuwenden, wodurch Sie ganze Gruppen ausschließen können, die die angegebenen Kriterien nicht erfüllen.
Hier ist ein Beispiel, das die Verwendung der "having"-Klausel demonstriert:
Stellen Sie zunächst sicher, dass Sie als Benutzer hadoop
angemeldet sind, indem Sie den folgenden Befehl in der Konsole ausführen:
su - hadoop
Starten Sie dann die Hive-Shell, indem Sie den folgenden Befehl ausführen:
hive
Erstellen Sie nun eine Beispieltabelle:
CREATE TABLE sales (
product STRING,
category STRING,
sales_amount FLOAT
);
Fügen Sie einige Beispiel-Daten hinzu:
INSERT INTO sales VALUES
('Product A', 'Electronics', 1000.0),
('Product B', 'Electronics', 2000.0),
('Product C', 'Clothing', 500.0),
('Product D', 'Clothing', 1500.0),
('Product E', 'Electronics', 3000.0);
Berechnen Sie schließlich die Gesamtumsätze pro Kategorie und filtern Sie Kategorien mit Gesamtumsätzen von mehr als 3000:
CREATE TABLE result_1
AS
SELECT category, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY category
HAVING SUM(sales_amount) > 3000;
SELECT * FROM result_1;
In diesem Beispiel erstellen wir zunächst eine Tabelle namens sales
mit Spalten für product
, category
und sales_amount
. Wir fügen dann einige Beispiel-Daten in die Tabelle ein.
Als nächstes verwenden wir die "group by"-Klausel, um die Daten nach category
zu gruppieren, und die SUM
-Funktion, um die Gesamtumsätze pro Kategorie zu berechnen. Die "having"-Klausel wird dann verwendet, um Kategorien auszuschließen, bei denen der total_sales
kleiner oder gleich 3000 ist.
Die Ausgabe dieser Abfrage wird nur die Kategorie "Electronics" enthalten, da ihre Gesamtumsätze (2000,0 + 1000,0 + 3000,0 = 6000,0) über 3000 liegen, während die Kategorie "Clothing" ausgeschlossen wird, da ihre Gesamtumsätze (500,0 + 1500,0 = 2000,0) die in der "having"-Klausel angegebenen Bedingungen nicht erfüllen.