2

SQLServerのストアドプロシージャをHiveQLに変換しています。

次のようなものを変換するにはどうすればよいですか?

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

3 に答える 3

7

RANK()このユースケースを数回見たことがありますが、UDFを使用してHiveと同様のことを行う方法があります。

基本的にいくつかのステップがあります:

  • データをグループに分割しますDISTRIBUTE BY
  • 各グループのデータを次のように並べ替えますSORT BY

このトピックに関するすばらしい記事が実際にあります。また、EdwardCaprioloのコードもここにあります

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
于 2013-01-08T16:57:31.630 に答える
2

この質問に出くわした人のために、Hiveはrank()およびその他の分析関数をサポートするようになりました。 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics

于 2015-01-16T23:15:22.910 に答える
0

大したことではありませんどういうわけかHive0.13.1ではコンマが機能しません:-(

カンマなしで動作するようになりました

(カテゴリ別のパーティション国別の販売DESCによる注文)

于 2015-02-04T18:34:05.993 に答える