日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

学习笔记Hive(五) —— Hive应用(3)—— Hive查询

發布時間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习笔记Hive(五) —— Hive应用(3)—— Hive查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

五、Hive查詢

5.1、創建職工信息表

任務實現:
1、創建表dept,emp和salgrade





2、導入數據
將數據emp.txt導入到表emp

#emp.txt 7369,SMITH,CLERK,7902,1980-12-17,800.00,,20 7499,ALLEN,SALESMAN,7698,1981-2-20,1600.00,300.00,30 7521,WARD,SALESMAN,7698,1981-2-22,1250.00,500.00,30 7566,JONES,MANAGER,7839,1981-4-2,2975.00,,20 7654,MARTIN,SALESMAN,7698,1981-9-28,1250.00,1400.00,30 7698,BLAKE,MANAGER,7839,1981-5-1,2850.00,,30 7782,CLARK,MANAGER,7839,1981-6-9,2450.00,,10 7839,KING,PRESIDENT,,1981-11-17,5000.00,,10 7844,TURNER,SALESMAN,7698,1981-9-8,1500.00,0.00,30 7900,JAMES,CLERK,7698,1981-12-3,950.00,,30 7902,FORD,ANALYST,7566,1981-12-3,3000.00,,20 7934,MILLER,CLERK,7782,1982-1-23,1300.00,,10

將數據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 別名,....) FROM1 別名,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.統計獲救與死亡情況

select survived,count(survived) from tidanic group by survived;

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的員工姓名及所在部門名稱

left outer join:左邊表的所有記錄連接結果會被返回,右邊表沒有符合on條件的,連接的右邊的列為Null right outer join:右邊表的所有記錄連接結果會被返回,左邊表沒有符合on條件的,連接的左邊的列為Null full outer join:返回兩個表所有的記錄連接結果 left semi join:左半開邊連接,只返回滿足連接條件的左邊記錄,類似MySQL in 注意:On后面只支持=,優化的方式就是大表放在最后面去連接,因為前面的表會被緩存,只有最后一個會通過掃描的方式,left semi join:一旦滿足條件就返回左邊記錄,不進行連接,類似于in。。。exists

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 sex

2.計算存活總數

select count(*) as allcount from tidanic where survived=1

3.統計性別與生存率的關系

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部門

SELECT deptno,avg(sal) as avg_sal FROM emp WHERE deptno<>10 GROUP BY deptno HAVING avg(sal)>2000 ORDER BY deptno;

可以在執行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查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。