Obtenir un numéro d'ordre d'un rang au sein d'une partition sans l'aide de la fonction ROW_NUMBER() OVER fonction

J'ai besoin de classer les lignes de la partition (ou le groupe), c'est à dire si ma table source est:

NAME PRICE
---- -----
AAA  1.59
AAA  2.00
AAA  0.75
BBB  3.48
BBB  2.19
BBB  0.99
BBB  2.50

Je tiens à mettre la table cible:

RANK NAME PRICE
---- ---- -----
1    AAA  0.75
2    AAA  1.59
3    AAA  2.00
1    BBB  0.99
2    BBB  2.19
3    BBB  2.50
4    BBB  3.48

Normalement, je voudrais utiliser ROW_NUMBER() OVER fonction, donc dans Apache Hive, il serait:

select
  row_number() over (partition by NAME order by PRICE) as RANK,
  NAME,
  PRICE
from
  MY_TABLE
;

Malheureusement Cloudera Impala ne prend pas en charge (pour le moment) ROW_NUMBER() OVER fonction, donc je suis à la recherche d'une solution de contournement. De préférence, ne pas utiliser udaf, nous, comme il sera politiquement difficile à convaincre de le déployer sur le serveur.

Merci pour votre aide.

Analytique des fonctions de la fenêtre sont une priorité et le développement est en cours. Restez à l'écoute pour une sortie prochaine de l'ajout de cette fonctionnalité dans le cadre de la feuille de route pour l'Impala 2.0.

OriginalL'auteur Andrey Dmitriev | 2014-05-02