Hive内部表和外部表

Hive表分为内部表和外部表vim

Hive默认创建的表是内部表,内部表create以后,而后load加载hdfs上的数据,会移动物理数据到Hive的数据仓库默认目录(/user/hive/warehouse/xx.db/)下。网站

内部表drop以后,元数据和物理数据都会删除。spa

外部表在导入hdfs的数据后,数据并无移动到本身的数据仓库目录下,也就是说外部表中的数据并非由它本身来管理的!3d

外部表drop掉以后,元数据删掉了,可是实际物理数据还存在原位置。code

 

如下是示例:orm

在本地创建vim一个course.txt文件blog

上传到hdfs文件系统上inner目录下和ext目录下qt

[root@master hiveTest]# hdfs dfs -put ./course.txt /inner
[root@master hiveTest]# hdfs dfs -put ./course.txt /ext

hive建立内部表数据分析

hive> create table db_hive.courseInner(id int,course string) row format delimited fields terminated by ',';

加载hdfs的inner目录下的course.txt到内部表string

hive> load data inpath '/inner/course.txt' into table db_hive.courseInner;

此时,inner目录下的文件已经被移到了hive数据仓库的目录/user/hive/warehouse/db_hive.db/下。

[root@master hiveTest]# hdfs dfs -ls /user/hive/warehouse/db_hive.db

而后执行drop table db_hive.courseInner,则该目录及目录下的数据被删除。


 

Hive建立外部表,关键字external,location指定数据存放的文件夹。

hive> create external table courseext(id int,course string) row format delimited fields terminated by ',' location '/external'

此时courseex外部t表就已经连接到这个物理数据,不须要执行load语句了。

执行查询语句,能够查到外部表的数据。

 

外部表执行drop table courseext,则该表的元数据被删除,但物理数据依然存在,能够经过命令验证。

[root@master hiveTest]# hdfs dfs -ls /external

 

使用场景:

天天收集到的网站数据,须要作大量的统计数据分析,因此在数据源上可使用外部表进行存储,方便数据的共享。

在作统计分析时候用到的中间表,结果表可使用内部表,由于这些数据不须要共享,使用内部表更为合适。

相关文章
相关标签/搜索