Hive的查找语法
基本語法格式:
select [all | DISTINCT ] a.id, a.sname, a.age from student a join student02 b on a.id = b.id # 匹配函數 where a.age >=18 # 條件語句 group by a.age having a.age >=18 # 分組,having:分組后的篩選條件 order by a.age # 全局排序 sort by a.age #局部排序,當reducetask = 1 時,功能與order by一致 distribute by a.age # 分桶 a.age % [reducetask的個數]余數一致的分到一個桶里 cluster by a.age #分桶并排序 limit 100 #僅查看結果中的前100行數據詳解舉例
匹配函數
1.內連接(inner join)join = inner join
select ... from t1 inner join t2 on t1.id=t2.id;
?
2.外連接(outer join)
輸出結果一般是兩個表的所有列
select ... from t1 left outer join t2 on t1.id=t2.id; #左外連接 select ... from t1 right outer join t2 on t1.id=t2.id; #右外連接 select ... from t1 full outer join t2 on t1.id=t2.id; #全外連接
?
3.半連接(semi join)
輸出結果一般是其中一個表的列
select ... from t1 left semi join t2 on t1.id=t2.id; #左半連接,僅輸出左表中的數據 select ... from t1 right semi join t2 on t1.id=t2.id; #右半連接,僅輸出右表中的數據
?
注意:
1)join只支持等值連接
原因:map端的key不好設置
select ... from t1 join t2 on t1.id=t2.id; # 支持
select ... from t1 join t2 on t1.id=t2.id+1; # 不支持
2)join只支持and連接,不支持or連接
原因:and連接:map端的key為id+age;但是or連接的話,map端的key設置太復雜;
select ... from t1 join t2 on t1.id=t2.id and t1.age=t2.age; # 支持
select ... from t1 join t2 on t1.id=t2.id+1 or t1.age=t2.age; # 不支持
3)join支持多表關聯
多表關聯是通過同一個字段(id)關聯的時候,只需要一個mr,否則就轉換成多個;
select ... from t1
join t2 on t1.id=t2.id
join t3 on t1.id=t3.id; # 支持
?
?
排序函數
1.order by(全局排序)
不管reducetask設置為何值,都是對輸出結果中的某列進行全局排序;
select ... from student order by age;
?
2.sort by(局部排序)
當reducetask = 1,相當于全局排序,= order by
當reducetask = 3,將結果隨機分成三部分,在每一個部分中進行排序;
select ... from student sort by age;
結果:
0001 張三 15
0002 李四 16
?
0004 王五 14
0003 孟七 17
?
0007 黃一 16
0005 李四 19
?
3.distribute by(分桶不排序)
select ... from student distribute by age; # 此時reducetask = 3
結果:
0001 張三 15 # age%3=0
?
0002 李四 16 # age%3=1
0005 李六 19
0007 黃一 16
?
0003 孟七 17 # age%3=2
0004 王五 14
?
4.cluster by(分桶且排序)
select ... from student cluster by age; # 此時reducetask = 3
結果:
0001 張三 15 # age%3=0
?
0002 李四 16 # age%3=1
0007 黃一 16
0005 李六 19
?
0004 王五 14 # age%3=2
0003 孟七 17
?
注意:
- cluster by 不能與 sort by同時使用;
- 當分桶字段與排序字段一致時,cluster by = distribute by(分桶) + sort by(排序)
- 當分桶字段與排序字段不一致時,不能使用cluster by:
elect ... from student distribute by age sort by id;
結果:
0001 張三 15 # age%3=0
?
0002 李四 16 # age%3=1
0005 李六 19
0007 黃一 16
?
0003 孟七 17 # age%3=2
0004 王五 14
?
?
?
?
?
?
?
總結
- 上一篇: python的序列类型及其特点_Flue
- 下一篇: 别再无脑wwm了!在下游任务中不一定有效