Hive外部表操作
在7.6.2小节中,我们讲解了内部表,即不添加关键字External,内部表与结构化数据文件要想产生关系映射,那么数据文件就必须在指定的内部表文件夹下,而当遇到大文件的情况时,移动数据文件非常耗时,这就需要我们来创建外部表,因为它不需要移动结构化数据文件。下面我们通过一个小案例来,对外部表进行讲解。
现有结构化数据文件student.txt,且数据内容如文件所示。
文件 student.txt
1 95001,李勇,男,20,CS
2 95002,刘晨,女,19,IS
3 95003,王敏,女,22,MA
4 95004,张立,男,19,IS
5 95005,刘刚,男,18,MA
6 95006,孙庆,男,23,CS
7 95007,易思玲,女,19,MA
8 95008,李娜,女,18,CS
9 95009,梦圆圆,女,18,MA
10 95010,孔小涛,男,19,CS
11 95011,包小柏,男,18,MA
12 95012,孙花,女,20,CS
13 95013,冯伟,男,21,CS
14 95014,王小丽,女,19,CS
15 95015,王君,男,18,MA
16 95016,钱国,男,21,MA
17 95017,王风娟,女,18,IS
18 95018,王一,女,19,IS
19 95019,邢小丽,女,19,IS
20 95020,赵钱,男,21,IS
21 95021,周二,男,17,MA
22 95022,郑明,男,20,MA
首先,我们将student.txt文件上传至HDFS上的/stu路径下,用来模拟生产环境下的数据文件,具体命令如下所示:
$ hadoop fs -mkdir /stu
$ hadoop fs -put student.txt /stu
其次,创建一张外部表,具体语法如下所示:
hive> create external table student_ext(Sno int,Sname string,
Sex string,Sage int,Sdept string)
row format delimited fields terminated by ',' location '/stu';
在上述代码中,create external table表示创建一个外部表的固定语法格式;location则表示在HDFS上数据文件的路径。
再次,查看itcast数据库中的数据表,具体语法如下所示:
hive> show tables;
执行上述语句后,效果如图1所示。
图1 student_ext表
在图1中,我们看到student_ext外部表已经创建成功。
最后,HQL(HiveQL)对数据表的内容的查看、增加、删除以及修改的语句均与SQL语句一致。下面以查看数据表内容为例进行演示,具体语法如下所示:
hive> select * from student_ext;
执行上述语句后,效果如图2所示。
图2 student_ext表内容
在图2中,文件student.txt和数据表student_ext已经完成映射。我们通过WEB UI界面打开Hive数据库的默认HDFS路径(/user/hive/warehouse/itcast.db)进行查看,路径下并没有发现创建student_ext文件夹。
小提示:
Hive创建内部表时,会将数据移动到数据库指向的路径;创建外部表时,仅记录数据所在的路径,不会对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。