Hive的数据存储(外部表)
Hive的数据存储(外部表)
外部表
- 指向已经在HDFS中存在的数据,可以创建Partition
- 它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异
- 外部表只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。而删除一个外部表时,仅删除该链接
○如何创建一个外部表?
hdfs源文件查看
[root@hadooppseudo ~]# ls student0*
student01.txt student02.txt student03.txt
[root@hadooppseudo ~]# more student01.txt
Tom,23
Mary,20
[root@hadooppseudo ~]# more student02.txt
Mike,25
[root@hadooppseudo ~]# more student03.txt
Scott,21
King,20
[root@hadooppseudo ~]# hdfs dfs -put student01.txt /input
[root@hadooppseudo ~]# hdfs dfs -put student02.txt /input
[root@hadooppseudo ~]# hdfs dfs -put student03.txt /input
把student0*.txt各文件放入hdfs的过程中, 需要确认input目录已存在,否则hdfs会认为把student01.txt放入名为input的文件中,再放入student02.txt时会提示 File exist
创建一张外部表来指向这三个文件
create external table external_student
(sid int,sname string,age int)
row format delimited fields terminated by ','
location '/input';
查询一下表中的数据
select * from external_student;
Tom 23
Mary 20
Mike 25
Scott 21
King 20
将外部其中一个文件从hdfs中删除掉
[root@hadooppseudo ~]# hdfs dfs -rm /input/student03.txt
此时hive中
select * from external_student;
Tom 23
Mary 20
Mike 25
相应数据也被删除掉了
如果我们再执行
[root@hadooppseudo ~]# hdfs dfs -put student03.txt /input
那么再次执行查询,hive中消失的两行数据又回来了
select * from external_student;
Tom 23
Mary 20
Mike 25
Scott 21
King 20
这就是外部表