学科分类
目录
Hadoop技术栈

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所示。

img

图1 student_ext表

在图1中,我们看到student_ext外部表已经创建成功。

最后,HQL(HiveQL)对数据表的内容的查看、增加、删除以及修改的语句均与SQL语句一致。下面以查看数据表内容为例进行演示,具体语法如下所示:

hive> select * from student_ext;

执行上述语句后,效果如图2所示。

img

图2 student_ext表内容

在图2中,文件student.txt和数据表student_ext已经完成映射。我们通过WEB UI界面打开Hive数据库的默认HDFS路径(/user/hive/warehouse/itcast.db)进行查看,路径下并没有发现创建student_ext文件夹。

小提示:

Hive创建内部表时,会将数据移动到数据库指向的路径;创建外部表时,仅记录数据所在的路径,不会对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。

点击此处
隐藏目录