Hive内部表&外部表详解

内部表(managed table): 未被external修饰的表,也叫管理表。
外部表(external table):external修饰的表。

内部表&外部表的区别:
内部表:删除表会删除表的元数据(metadata)和表数据(data)。
外部表:删除表会删除表的元数据(metadata),但不会删除表数据(data)。

数据管理方式:
数据(data)都存储在HDFS上,内部表由Hive自身管理,外部表数据由HDFS管理;
元数据(metadata)都存储在mysql上,由mysql管理。

一、内部表&外部表

1、内部表:

(1)、创建内部表:

create table student1(
id int,
name string)
row format delimited fields terminated by '\t'
stored as textfile;

在这里插入图片描述
(2)、查看表格式化数据

desc formatted student1;

在这里插入图片描述
可以看到这是一张内部表。

(3)、上传表数据并查询表数据存储在HDFS的文件

dfs -put /opt/module/data/student.txt /user/hive/warehouse/temp.db/student1;

在这里插入图片描述
在这里插入图片描述

(4)、查询表存储数据(DATA)

select * from  student1;

在这里插入图片描述
(5)、查询表的元数据(METADATA),元数据在mysql

select * from tbls;

在这里插入图片描述
(6)、删除表,并查看表data和metadata。

 drop table student1;

在这里插入图片描述
删除表后hdfs的data被删除
在这里插入图片描述
表的源数据也被删除
在这里插入图片描述
2、外部表

(1)、创建外部表:

create external table  student2(
id int,
name string)
row format delimited fields terminated by '\t'
stored as textfile
location '/tmp/student';

(2)、查看表格式化数据

desc formatted student2;
--查看表存储在HDFS的位置以及表类型。

在这里插入图片描述
在这里插入图片描述
(3)、上传表数据并查询表数据存储在HDFS的文件

dfs -put /opt/module/data/student.txt /tmp/student;

在这里插入图片描述
(4)查询表数据DATA
在这里插入图片描述
(5)查询表的元数据
在这里插入图片描述
(6)、删除表,并查看表data和metadata

删除表
在这里插入图片描述
查看data,未被删除
在这里插入图片描述
查看metadata,已被删除
在这里插入图片描述

综上:内部表被drop后,表的data和metadata都会被删除;外部表被drop后,表的metadata会被删除,但是data不会被删除。如果不小心删掉外部表,重新建表location到数据存放在HDFS的相应路径即可。

使用场景:
(1)外部表:因其指删除表时不会删除HDFS上的数据,安全性相对较高,且指定目录的特性,适合数据需要共享或者数据的处理需要 hive和其他工具一起处理的场景。

(2)内部表:对原始数据或比较重要的中间数据进行建表存储。

3、内外部表的相互转换。

(1)、将外部表转换成内部表

转换前:
在这里插入图片描述

alter table student2 set tblproperties('EXTERNAL'='FALSE');

转换后:
在这里插入图片描述
2、将内部表转化成外部表:

alter table student2 set tblproperties('EXTERNAL'='FALSE');

注意:(‘EXTERNAL’=‘TRUE’)和(‘EXTERNAL’=‘FALSE’)为固定写法,区分大小写!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值