我正在将SQL Server存储过程转换为HiveQL。
如何转换类似以下内容的内容:
SELECT
p.FirstName, p.LastName,
RANK() OVER (ORDER BY a.PostalCode) AS Rank发布于 2013-01-09 00:57:32
这个用例我已经看过几次了,有一种方法可以使用自定义函数在Hive中做一些类似于RANK()的事情。
基本上有几个步骤:
使用SORT BY对每组中的数据使用DISTRIBUTE BY
实际上是a nice article on the topic,你也可以从Edward Capriolo here中找到一些代码。
以下是在Hive中执行排名的示例查询:
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发布于 2015-01-17 07:15:23
对于遇到这个问题的任何人,Hive现在都支持rank()和其他分析函数。https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics
发布于 2015-02-05 02:34:06
在蜂窝0.13.1中逗号不起作用没什么大不了的:-(
所以我让它在没有逗号的情况下工作
(按类别分区、按国家/地区分区、按销售描述排序)
https://stackoverflow.com/questions/14219969
复制相似问题