什么是在hive sql中使用over和rank关键字的目的?

时间:2015-11-05 04:25:30

标签: hadoop hive

在hive sql中使用over和rank关键字的含义/目的是什么?

select rank() over (order by net_worth desc) as rank, name, net_worth from wealth order by rank, name;
+------+---------+---------------+
| rank | name    | net_worth     |
+------+---------+---------------+
| 1    | Solomon | 2000000000.00 |
| 2    | Croesus | 1000000000.00 |
| 2    | Midas   | 1000000000.00 |
| 4    | Crassus | 500000000.00  |
| 5    | Scrooge | 80000000.00   |
+------+---------+---------------+

2 个答案:

答案 0 :(得分:0)

OVER子句非常强大,因为无论是否使用GROUP BY,都可以在不同范围内进行聚合("窗口")

OVER子句定义查询结果集中的窗口或用户指定的行集。然后,窗口函数计算窗口中每行的值。您可以将OVER子句与函数一起使用来计算聚合值,例如移动平均值,累积聚合,运行总计或每组结果的前N个

Over子句可以与聚合函数和排序函数结合使用。 over子句在与aggregate或ranking函数关联之前确定记录的分区和排序。

假设您只使用rank()函数,那么sql将如何理解将计算哪个基数等级。示例表有3列名称,net_worth和net_profit。具有最高net_profit的名称将是第一名。所以你必须告诉sql在最高net_profit的基础上计算排名。

答案 1 :(得分:0)

over()适用于" 窗口"属性。

在您的示例 select rank() over (order by net_worth desc) 中,您已指示按降序排列具有net_worth列的表。由于这个原因,排名是按net_worth的降序进行的。

over()功能强大,与 partition by 一起使用。

看看这个article,它提供了理解这些概念的好例子。

如果您的销售表有Territory&销售金额,您可以按销售金额的顺序提供排名或为区域创建分区,并在区域中对销售金额进行排名。

查看此article以了解WindowingAndAnalytics。它将解释如何在HiveQL中使用聚合函数。