rank()

8dtrkrch  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(505)

我正在将sql server存储过程转换为hiveql。
如何转换以下内容:

SELECT 
    p.FirstName, p.LastName,
    RANK() OVER (ORDER BY a.PostalCode) AS Rank
bqjvbblv

bqjvbblv1#

我已经见过这个用例好几次了,有一种方法可以做类似的事情 RANK() 在Hive中使用自定义项。
基本上有几个步骤:
将数据分组 DISTRIBUTE BY 将每组中的数据按 SORT BY 实际上有一篇关于这个主题的好文章,你也可以在这里找到一些来自edward capriolo的代码。
下面是在配置单元中执行排名的示例查询:

ADD JAR p-rank-demo.jar;
CREATE TEMPORARY FUNCTION p_rank AS 'demo.PsuedoRank';

SELECT
 category,country,product,sales,rank
FROM (
 SELECT
   category,country,product,sales,
   p_rank(category, country) rank
 FROM (
   SELECT
     category,country,product,
     sales
   FROM p_rank_demo
   DISTRIBUTE BY
     category,country
   SORT BY
     category,country,sales desc) t1) t2
WHERE rank <= 3

它在mysql中执行与以下查询等效的操作:

SELECT
 category,country,product,sales,rank
FROM (
 SELECT
   category,country,product, sales,
   rank() over (PARTITION BY category, country ORDER BY sales DESC) rank
 FROM p_rank_demo) t
WHERE rank <= 3
nuypyhwy

nuypyhwy2#

没什么大不了的,在Hive0.13.1中,逗号不起作用:-(
所以我没用逗号就成功了
(按类别划分国家/地区订单按销售说明)

2ekbmq32

2ekbmq323#

对于任何遇到这个问题的人,hive现在都支持rank()和其他分析函数。https://cwiki.apache.org/confluence/display/hive/languagemanual+windowingandanalytics

相关问题