Hive的数据模型之外部表
外部表(External Table)
- 指向已经在HDFS中存在的数据,可以创建Partition
- 它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异。
- 外部表侄有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当删除一个外部表时,仅删除该链接。
1、准备几张相同数据结构的数据txt文件,放在HDFS的/input 目录下。 2、在hive下创建一张有相同数据结构的外部表external_student,location设置为HDFS的/input 目录。则external_student会自动关连/input 下的文件。 3、查询外部表。显示/input下具有相同数据结构的所有文件的数据。 4、删除/input目录下的部分文件。 5、查询外部表。删除的那部分文件数据不存在。 6、将删除的文件放入/input目录。 7、查询外部表。放入的那部分文件数据重现。
举例如下:
(1)准备数据:
student1.txt 1,Tom,M,60,80,96 2,Mary,F,11,22,33 student2.txt 3,Jerry,M,90,11,23 student3.txt 4,Rose,M,78,77,76 5,Mike,F,99,98,98
查看HDFS文件系统现有的目录。 # hdfs dfs -ls / 创建input目录。 # hdfs dfs -mkdir /input
将文件放入HDFS文件系统 hdfs dfs -put localFileName hdfsFileDir # hdfs dfs -put student1.txt /input # hdfs dfs -put student2.txt /input # hdfs dfs -put student3.txt /input
(2)创建外部表
create table external_student (sid int, sname string, gender string, language int, math int, english int) row format delimited fields terminated by ',' location '/input';
(3)查询外部表
select * from external_student;
(4)删除HDFS上的student1.txt
# hdfs dfs -rm /input/student1.txt
(5)查询外部表
select * from external_student;
(6)将student1.txt 重新放入HDFS input目录下
# hdfs dfs -put student1.txt /input
(7)查询外部表
select * from external_student;