HiveSql基礎函數—row_number()、Join的類型和用法


一、row_number()

1、語法:

row_number() over (partition by col_list1 order by col_list2)  

rank() over(partition by col_list1 order by col_list2)

 

2、row_number() over (partition by col_list1 order by col_list2)  

首先根據col_list1分組,在分組內部根據col_list2排序,row_number()函數計算的值表示每組內部排序后的順序編號,組內連續的唯一的;例子:

數據顯示為
empid       deptid      salary
----------- ----------- ---------------------------------------
1           10          5500.00
2           10          4500.00
3           20          1900.00
4           20          4800.00
5           40          6500.00
6           40          14500.00
7           40          44500.00
8           50          6500.00
9           50          7500.00

需求:根據部門分組,顯示每個部門的工資等級

預期結果:
empid       deptid      salary                                  rank
----------- ----------- --------------------------------------- --------------------
1           10          5500.00                                 1
2           10          4500.00                                 2
4           20          4800.00                                 1
3           20          1900.00                                 2
7           40          44500.00                                1
6           40          14500.00                                2
5           40          6500.00                                 3
9           50          7500.00                                 1
8           50          6500.00                                 2

SQL腳本:
SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee

也可以不限分組,直接進行排序:

row_number() over (order by col_list2 decs) as 新列名,例子:

123

 

3、rank() 

rank() over()函數則是跳躍排序,序號不唯一,即當有數據值值相同時,並列,當遇到不同的數據,其序號為上一個數據的序號加上該序號的個數。如兩個並列第一,序列號為(1,1,3.......)

 

二、Join的類型和用法

Hive中除了支持和傳統數據庫中一樣的內關聯、左關聯、右關聯、全關聯,還支持LEFT SEMI JOIN和CROSS JOIN,但這兩種JOIN類型也可以用前面的代替。

注意:Hive中Join的關聯鍵必須在ON ()中指定,不能在Where中指定,否則就會先做笛卡爾積,再過濾。

hive> select * from lxw1234_a;
OK
1       zhangsan
2       lisi
3       wangwu
Time taken: 0.116 seconds, Fetched: 3 row(s)
hive> select * from lxw1234_b; OK 1 30 2 29 4 21 Time taken: 0.09 seconds, Fetched: 3 row(s)

10.1 內關聯(JOIN)

只返回能關聯上的結果。

  1. SELECT a.id,
  2. a.name,
  3. b.age
  4. FROM lxw1234_a a
  5. join lxw1234_b b
  6. ON (a.id = b.id);
  7.  
  8. --執行結果
  9.  
  10. 1 zhangsan 30
  11. 2 lisi 29

 

其他用法參考:
[一起學Hive]之十一-Hive中Join的類型和用法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM