【Hive从入门到精通之基础篇】Hive的内部表与外部表区别与使用场景

1、Hive的内部表(管理表)

(1)基本概念:在Hive中,默认创建的表都是管理表(内部表),它与表的原始数据息息相关,Hive默认情况下会将管理表的数据存储在由配置参数hive.metastore.warehouse.dir指定的HDFS目录下(/user/hive/warehouse/),当删除管理表时,会删除表的元数据并连同表的原始数据一起删除(所以管理表不适合与其它工具来共享数据)。

(2)案例实操

# 创建一张普通的表,如果不加external关键字,默认创建的表都是内部表
create table if not exists t_student(
id int,
name string
)
row format delimited fields terminated by '\t'
stored as textfile
location '/user/hive/warehouse/t_student';

(3)通过命令desc formatted 表名来查看表的结构

desc formatted t_student;

 


2、Hive的外部表

(1)基本概念:Hive的外部表的创建需要通过关键字external来声明,由于其是外部表,所以在使用命令drop table 表名的时候,只是将其表的元数据删除(即在使用show tables命令的时候已经查看不到该表的信息了),并不会删除表的源数据。

(2)案例实操

create external table if not exists t_teacher(
id int,
name string
)
row format delimited fields terminated by '\t'
stored as textfile
location '/user/hive/warehouse/t_teacher';

(3)使用命令drop table 表名来删除t_teacher表,实际上只是删除关于该表在mysql中存储的元数据信息,其在HDFS上存储的表数据并没有被删除

drop table t_teacher;

 


3、内部表与外部表的使用场景

(1)外部表一般用于比如存储流量日志或者是从业务系统导过来的这些原始数据

(2)内部表一般用于做临时表或中间表来存储根据业务分析产生的结果数据

 


4、内部表与外部表的相互转换

(1)通过命令alter 表名 set tblproperties('EXTERNAL'='TRUE');来实现将内部表转换成外部表。

(2)反之也可以通过命令alter 表名 set tblproperties('EXTERNAL'='FALSE');来实现将外部表转换成内部表。

(3)尖叫提升:'EXTERNAL'='TRUE'和'EXTERNAL'='FALSE'是固定写法,并且区分大小写

 

你可能感兴趣的:(Hive,Hive)