天天看点

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;
           

至此两道题就完成了

继续阅读