HDFS、Hive(Impala)讀取本地文件到HDFS,再使用Hive(Impala)從HDFS讀取文件進行建表

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;

至此兩道題就完成了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章