2016-03-28 11 views
2

Ich verwende derzeit Hive und ich habe eine Tabelle mit den Feldern user_id und value. Ich möchte die Werte in absteigender Reihenfolge innerhalb jeder user_id bestellen und dann nur die obersten 100 Datensätze für jede user_id ausgeben. Dies ist der Code, den ich zu verwenden ist versucht:Hive - top n Datensätze innerhalb einer Gruppe

DROP TABLE IF EXISTS mytable2 
CREATE TABLE mytable2 AS 
SELECT * FROM 
(SELECT *, rank (user_id) as rank 
FROM 
(SELECT * from mytable 
DISTRIBUTE BY user_id 
SORT BY user_id, value DESC)a)b 
WHERE rank<101 
ORDER BY rank; 

Jedoch, wenn ich diese Abfrage ausführen, bekomme ich folgende Fehlermeldung:

Error while compiling statement: FAILED: SemanticException [Error 10247]: Missing over clause for function : rank [ERROR_STATUS] 

FYI - My UserIds sind alphanumerisch.

Kann jemand helfen?

Vielen Dank im Voraus.

Kommentar schreiben

Antwort

0

Da die Fehlermeldung sagt, Sie haben Fehler mit der Rangfunktion, Versuch over nach Rang hinzuzufügen, wie folgend:

.... 
    (SELECT *, rank (user_id) over (order by user_id) as rank 
.... 

für weitere Informationen, wie die Rangfunktion zu verwenden Sie könnten sich darauf beziehen documentation

+0

Vielen Dank - das Problem ist jetzt sortiert. – Maeve90