在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 |
+------+---------+---------------+
答案 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中使用聚合函数。