学习笔记Hive(五) —— Hive应用(3)—— Hive查询
五、Hive查詢
5.1、創建職工信息表
任務實現:
1、創建表dept,emp和salgrade
2、導入數據
將數據emp.txt導入到表emp
將數據dept.txt導入到表dept
#dept.txt 10,ACCOUNTING,NEW YORK 20,RESEARCH,DALLAS 30,SALES,CHICAGO 40,OPERATIONS,BOSTON將數據salgrade.txt導入到表salgrade
#salgrade.txt 1,700,1200 2,1201,1400 3,1401,2000 4,2001,3000 5,3001,9999
5.2、查詢入門
5.2.1、Select語法
SELECT [ALL|DISTINCT] 字段列表(字段1 別名,....) FROM 表1 別名, 表2 別名, .... WHERE 條件 …. GROUP BY 分組字段 HAVING(組約束條件) ORDER BY 排序字段1 Asc | Desc, 字段2 Asc|Desc, ..... [CLUSTER BY 字段 | [DISTRIBUTE BY字段] [SORT BY字段]] LIMIT M,N; DISTRIBUTE BY 相同字段值會分到一個分區 CLUSTER BY 相當于前兩個5.2.2、distinct去重查詢
任務實現:
1.查詢emp中所有的部門編號
2.查詢emp中相同部門不同職位的部門職位信息
5.2.3、order by查詢
任務實現:
1.將部門編號不為10的所有員工按員工編號升序排列
2.將所有員工先按部門編號升序,當部門一樣時,再按姓名降序排
5.2.4、內置函數
任務實現:
1.查看emp表中平均薪水是多少并對其四舍五入保留兩位小數顯示
2.統計emp表中有多少個不重復部門
group by…having分組查詢
group by按照其后的字段分組,可使用多個字段進行分組。通常配合having使用,having后面的條件是對組的約束。同時SELECT子句中的字段必須是分組中的字段或分組函數
任務實現: 查詢emp表平均薪水大于2000的部門編號、平均薪水
任務實現:
1.統計獲救與死亡情況
2.統計艙位分布情況
select pclass,count(pclass) from tidanic group by pclass;3.統計港口登船人員分布情況
select embarked,count(embarked) from tidanic group by embarked;5.3、select連接查詢和子查詢
5.3.1、join連接查詢
任務實現: 查詢emp表薪水大于2500的員工姓名及所在部門名稱
5.3.2、子查詢
任務實現:
1.在emp表中,工資最高的員工姓名、薪水
2.在emp表中,工資高于平均工資員工姓名、薪水
5.3.3、case…when…then查詢
任務實現:
查詢emp表中的員工姓名,薪水,如果薪水小于2000標記為low,如果薪水在2000和5000之間標記為middle,如果薪水大于5000標記為high
5.4、任務實現:分析影響生存率關系
1.統計各個性別存活數
select sex,count(*) as sexcount from tidanic where survived=1 group by sex2.計算存活總數
select count(*) as allcount from tidanic where survived=13.統計性別與生存率的關系
select a.sex,a.sexcount/b.allcount as count from (select sex,count(*) as sexcount from tidanic where survived=1 group by sex) a join (select count(*) as allcount from tidanic where survived=1) b on 1=1;同理:
4.統計客艙等級與生存率的關系
select a.pclass,a.sexcount/b.allcount as count from (select pclass,count(*) as sexcount from tidanic where survived=1 group by pclass) a join (select count(*) as allcount from tidanic where survived=1) b on 1=1;5.統計登船港口與生存率的關系
select a.embarked,a.sexcount/b.allcount as count from (select embarked,count(*) as sexcount from tidanic where survived=1 group by embarked) a join (select count(*) as allcount from tidanic where survived=1) b on 1=1;5.5、Hive語句執行順序
任務實現:
查詢emp表平均薪水大于2000的部門編號、平均薪水并按照部門編號排序,不包括10部門
可以在執行HQL語句前加explain,可查看執行順序
SQL執行順序
FROM ... WHERE ... GROUP BY ... AVG SUM 等聚合函數 ... HAVING ... SELECT... ORDER BY ...Hive執行順序
FROM ... WHERE ... SELECT ... GROUP BY ... HAVING ... ORDER BY ...Hive的執行順序也是MapReduce的執行順序
map階段:
- 執行from加載:進行表的查找與加載
- 執行where過濾:進行條件過濾與篩選
- 執行select查詢:進行輸出項的篩選
- 執行group by分組:描述了分組后需要計算的函數
- map端文件合并:map端本地溢出寫文件的合并操作,每個map最終形成一個臨時文件。 然后按列映射到對應的reduce階段
reduce階段:
- group by:對map端發送過來的數據進行分組并進行計算。
- Having:最后過濾列用于輸出結果
- order by:排序后進行結果輸出到HDFS文件
總結
以上是生活随笔為你收集整理的学习笔记Hive(五) —— Hive应用(3)—— Hive查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习笔记Hive(四) —— Hive应
- 下一篇: 学习笔记Hive(六) —— Hive开