首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hive中的rank()

hive中的rank()
EN

Stack Overflow用户
提问于 2013-01-09 00:48:19
回答 3查看 9.4K关注 0票数 2

我正在将SQL Server存储过程转换为HiveQL。

如何转换类似以下内容的内容:

代码语言:javascript
复制
SELECT 
    p.FirstName, p.LastName,
    RANK() OVER (ORDER BY a.PostalCode) AS Rank
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-09 00:57:32

这个用例我已经看过几次了,有一种方法可以使用自定义函数在Hive中做一些类似于RANK()的事情。

基本上有几个步骤:

使用SORT BY对每组中的数据使用DISTRIBUTE BY

  • Order将数据分区到组中

实际上是a nice article on the topic,你也可以从Edward Capriolo here中找到一些代码。

以下是在Hive中执行排名的示例查询:

代码语言:javascript
复制
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中的以下查询:

代码语言:javascript
复制
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
票数 7
EN

Stack Overflow用户

发布于 2015-01-17 07:15:23

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

票数 2
EN

Stack Overflow用户

发布于 2015-02-05 02:34:06

在蜂窝0.13.1中逗号不起作用没什么大不了的:-(

所以我让它在没有逗号的情况下工作

(按类别分区、按国家/地区分区、按销售描述排序)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14219969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档