2015-11-05 67 views
0

在hive sql中使用over和rank关键字是什么意思/目的?什么是在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

OVER子句是强大的,你可以有在不同范围的聚集体(“窗口”),是否使用GROUP BY或不

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

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

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

0

over()在属性的“窗口”上工作。

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

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

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

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

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

相关问题