MBZ*_*MBZ 2 sql-server hadoop hive
我正在将SQL Server存储过程转换为HiveQL.
我怎样才能转换如下内容:
SELECT
p.FirstName, p.LastName,
RANK() OVER (ORDER BY a.PostalCode) AS Rank
Run Code Online (Sandbox Code Playgroud)
我已经看过几次这个用例,有一种方法可以RANK()
在Hive中使用UDF 做类似的事情.
基本上有几个步骤:
DISTRIBUTE BY
SORT BY
实际上有一篇关于这个主题的好文章,你也可以在这里找到Edward Capriolo的一些代码.
以下是在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
Run Code Online (Sandbox Code Playgroud)
这相当于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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8002 次 |
最近记录: |