2016-04-06 6 views
2

Ich habe einen Anwendungsfall, in dem ich auf mehrere Spalten gruppieren und auf einer bestimmten Spalte über Partitionen, die Teilmengen der Spalten in der group by-Klausel sind, aggregieren.Einschränkungen mit analytischen Abfragen in Hive

Beispielszenario

Tabellenschema:

(id int, category1 string, category2 string, category3 string, value int)

Ich möchte die folgende Abfrage ausführen:

select sum(value) over (partition by category1) as c1_sum, sum(value) over (partition by category2) as c2_sum, sum(value) over (partition by category3) as c3_sum from <table_name> group by category_1, category2, category3; 

jedoch hive beklagt, dass die Spalte value nicht Teil der ist group by Klausel.

Gibt es einen anderen Weg, dies im Bienenstock zu erreichen?

Alle Vorschläge würden sehr geschätzt werden. Vielen Dank!

Antwort

0

Ich bin mir nicht sicher, was Sie versuchen, kann getan werden. Angenommen, cat1 hat 2 verschiedene Werte, cat2 hat 3 und cat3 hat 5. Sie bitten Bienenstock (oder einen seiner Freunde), 2 Zeilen auf cat1, 3 Zeilen auf cat2 und 5 auf cat3 zurückzugeben. Darüber hinaus, wie diese zu einem Datensatz passen, ist jenseits jeder Logik imho. Aber warum nicht Gewerkschaften wie

Select category1 as cat, sum (value) as sumCat 
from tblName 
group by category1 
Union 
Select category2 as cat, sum (value) as sumCat 
    from tblName 
group by category2 
Union 
Select category3 as cat, sum (value) as sumCat 
    from tblName 
group by category3 
verwenden