2016-03-28 2 views
2

J'utilise actuellement Hive et j'ai une table avec les champs user_id et value. Je veux classer les valeurs par ordre décroissant dans chaque id_utilisateur, puis n'émettre que les 100 premiers enregistrements pour chaque id_utilisateur. Voici le code que je tente d'utiliser:Hive - top n enregistrements dans un groupe

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; 

Cependant quand je lance cette requête, je reçois l'erreur suivante:

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

FYI - Mes UserIds sont alpha-numérique.

Quelqu'un peut-il aider?

Merci d'avance.

Ajouter un commentaire

Répondre

0

Comme le message d'erreur indique, vous avez erreur en utilisant la fonction de rang, essayez d'ajouter over après rang suivant:

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

pour plus d'informations sur la façon d'utiliser la fonction de rang vous pouvez vous référer à cela documentation

+0

Merci - le problème est maintenant trié. – Maeve90