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;
至此两道题就完成了