Hive: Summe über eine angegebene Gruppe (HiveQL)

8

Ich habe eine Tabelle:

%Vor%

Ich möchte die Summe aller Produkte für jede Gruppe von "Schlüssel" finden und an jede Zeile anhängen. Zum Beispiel für Schlüssel = 1, finde die Summe der Kosten aller Produkte (20 + 10 + 5 = 35) und hänge dann das Ergebnis an alle Zeilen an, die dem Schlüssel = 1 entsprechen. Also Endergebnis:

%Vor%

Ich würde es vorziehen, dies ohne Verwendung eines Unterjoins zu tun, da dies ineffizient wäre. Meine beste Idee wäre, die Funktion over in Verbindung mit der Funktion sum zu verwenden, aber ich kann es nicht zum Laufen bringen. Mein bester Versuch:

%Vor%

Ich habe mir die Dokumentation angesehen aber da bin ich so kryptisch, dass ich keine Ahnung habe, wie ich es herausfinden soll. Ich verwende Hive v0.12.0, HDP v2.0.6, HortonWorks Hadoop Verteilung.

    
joshlk 01.08.2014, 14:03
quelle

5 Antworten

7

Verwenden Sie ähnlich wie @VB_ answer die Anweisung BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING .

Die HiveQL-Abfrage lautet daher:

%Vor%     
joshlk 12.08.2014, 08:34
quelle
4

Sie könnten BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW verwenden, um das ohne Self-Join zu erreichen.

Code wie folgt:

%Vor%     
VB_ 08.08.2014 20:31
quelle
1

Die Summe der Analysefunktionen ergibt kumulierte Summen. Zum Beispiel, wenn Sie:

%Vor%

dann würdest du bekommen:

%Vor%

was anscheinend nicht das ist, was Sie wollen.

Stattdessen sollten Sie die Aggregationsfunktion sum zusammen mit einem Self-Join verwenden, um dies zu erreichen:

%Vor%     
Joe K 06.08.2014 00:40
quelle
0

Die obige Tabelle sah wie

aus %Vor%

Der Benutzer wollte eine Tabelle mit den Gesamtkosten wie folgt

%Vor%

Dafür haben wir die folgende Abfrage verwendet

%Vor%

So weit, so gut. Ich möchte eine Spalte mehr, zähle das Vorkommen jedes Landes

%Vor%

Daher habe ich die folgende Abfrage verwendet

%Vor%

Leider funktioniert das nicht. Ich bekomme einen kryptischen Fehler. Um einen Fehler in meiner Anfrage auszuschließen, möchte ich fragen, ob ich etwas falsch gemacht habe. Danke

    
Peter 14.09.2016 13:53
quelle
0

Diese Abfrage gibt mir ein perfektes Ergebnis

select key, product_code, cost, sum(cost) over (partition by key) as total_costs from zone;

    
Ashish Mohan 15.07.2017 21:00
quelle