Hive 、Impala的用法相同,Hive直接輸入hive就能啓動,Impala使用Impala-shell命令進行啓動
下面用一道題進行講解這個過程:
給定一個企業對員工進行的安全培訓數據表TrainingRecord(如下圖),包括姓名(Name),培訓日期(Date)和培訓小時數(Hours),請寫出相應的SQL查詢回答下列問題:
(1)查詢每個員工的總培訓小時數,平均培訓時長和培訓次數,並給出結果集;
(2)查詢總培訓小時數超過8個小時的員工,並給出結果集。
Name |
Date |
Hours |
Tom |
2017-10-6 |
8 |
Jerry |
2017-10-6 |
8 |
Jimmy |
2017-10-6 |
4 |
Tom |
2017-10-7 |
4 |
Jerry |
2017-10-7 |
8 |
Tina |
2017-10-7 |
6 |
Jimmy |
2017-10-8 |
4 |
Allan |
2017-10-8 |
4 |
Fred |
2017-10-8 |
8 |
創建一個TrainingRocord.txt文件,將上面的表數據放進去,使用TAB分割每個字段(下面展示我放在/home/training/Documents裏面的文件截圖)
然後在HDFS中創建存放該文件的文件夾(-mkdir 後面的-p表示如果沒有上級文件夾,就同時創建上級文件夾)
$ hdfs dfs -mkdir -p /quiz/TrainingRecord
將之前的文件放進去(執行這個命令的時候需要進入上面我提到的/home/training/Documents文件夾下)
$ hdfs dfs -put TrainingRecord.txt /quiz/TrainingRecord
執行HDFS查詢語句,就能看見是否將文件放進去(非必要,只是作爲是否放進去的確認,實際上如果不報錯,就已經放進去了)
$ hdfs dfs -ls /quiz/TrainingReocrd
查詢結果如圖(最後一行)
下面的過程在hive中執行,輸入hive啓動命令,直至命令輸入行顯示“hive>”就表示已經啓動hive
$ hive //啓動hive命令
在hive中創建表並將HDFS中的數據導入hive,terminated by '\t'是指字段用TAB分割,如果文件中數據是以別的字符分割的話,需要修改單引號內的字符,比如改成','等。
hive> create external table trainingrecord(name STRING, dt STRING, hours INT)
row format delimited fields terminated by '\t' location '/quiz/TrainingRecord';
第一題的查詢語句
hive> select name,sum(hours),avg(hours),count(hours) from trainingrecord group by name;
查詢結果
第二題的查詢語句
hive> select name,sum(hours),from trainingrecord group by name having sum(hours)>8;
至此兩道題就完成了