天天看點

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、Hive(Impala)讀取本地檔案到HDFS,再使用Hive(Impala)從HDFS讀取檔案進行建表
HDFS、Hive(Impala)讀取本地檔案到HDFS,再使用Hive(Impala)從HDFS讀取檔案進行建表

然後在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
           

查詢結果如圖(最後一行)

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

下面的過程在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;
           

查詢結果

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

第二題的查詢語句

hive> select name,sum(hours),from trainingrecord group by name having sum(hours)>8;
           

至此兩道題就完成了

繼續閱讀