【发布时间】:2014-05-02 10:03:12
【问题描述】:
我需要按分区(或组)对行进行排名,即如果我的源表是:
NAME PRICE
---- -----
AAA 1.59
AAA 2.00
AAA 0.75
BBB 3.48
BBB 2.19
BBB 0.99
BBB 2.50
我想获取目标表:
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
通常我会使用 ROW_NUMBER() OVER 函数,所以在 Apache Hive 中它会是:
select
row_number() over (partition by NAME order by PRICE) as RANK,
NAME,
PRICE
from
MY_TABLE
;
不幸的是,Cloudera Impala 不支持(目前)ROW_NUMBER() OVER 功能,所以我正在寻找解决方法。最好不要使用 UDAF,因为在政治上很难说服将其部署到服务器。
【问题讨论】: