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读取文件进行建表_第1张图片

HDFS、Hive(Impala)读取本地文件到HDFS,再使用Hive(Impala)从HDFS读取文件进行建表_第2张图片

然后在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;

查询结果

HDFS、Hive(Impala)读取本地文件到HDFS,再使用Hive(Impala)从HDFS读取文件进行建表_第3张图片

第二题的查询语句

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

至此两道题就完成了

你可能感兴趣的:(Hadoop,Hive,Impala)