2015-11-05 38 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中使用聚合函數。

相關問題