我已经见过这个用例好几次了,有一种方法可以做类似的事情 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
3条答案
按热度按时间bqjvbblv1#
我已经见过这个用例好几次了,有一种方法可以做类似的事情
RANK()
在Hive中使用自定义项。基本上有几个步骤:
将数据分组
DISTRIBUTE BY
将每组中的数据按SORT BY
实际上有一篇关于这个主题的好文章,你也可以在这里找到一些来自edward capriolo的代码。下面是在配置单元中执行排名的示例查询:
它在mysql中执行与以下查询等效的操作:
nuypyhwy2#
没什么大不了的,在Hive0.13.1中,逗号不起作用:-(
所以我没用逗号就成功了
(按类别划分国家/地区订单按销售说明)
2ekbmq323#
对于任何遇到这个问题的人,hive现在都支持rank()和其他分析函数。https://cwiki.apache.org/confluence/display/hive/languagemanual+windowingandanalytics