(18)Hive ——内部表和外部表的区别?

前言

    Hive 是一个基于 Hadoop 的数据仓库工具,本身并不存储数据,它会表数据存放到 hdfs 中,并利用自带的 sql 解析引擎,将 sql 语句转换成 mr job ,在 hadoop 的 mapreduce 引擎上对数据进行查询、统计和分析。

   内部表和外部表最根本的区别在于,是否由Hive管理表的全生命周期。例如,Hive 管理内部表的元数据以及实际的表数据,而对于外部表,则只管理它的元数据。

一、建表语句的区别

外部表的建表语句需要被 external 修饰,但是内部表是不需要的。

  • 外部表 - 被 external 修饰
create external table if not exists table_name(
prd_wid        bigint comment '时间维度'
,w_insert_dt   string comment '数据仓库插入时间'
,name          string comment '名称'
,age           bigint comment '年龄'
)comment '外部表'
partitioned by (dt string)
row format delimited fields terminated by '\t'
stored as parquet
;
  • 内部表
create table if not exists table_name(
prd_wid        bigint comment '时间维度'
,w_insert_dt   string comment '数据仓库插入时间'
,name          string comment '名称'
,age           bigint comment '年龄'
)comment '内部表'
partitioned by (dt string)
row format delimited fields terminated by '\t'.
stored as parquet
location '/test'
;

二、Hive管理范围不同

  • 内部表

    Hive管理内部表的元数据以及表的实际数据。当使用drop删除内部表的时候,不但会删除表的元数据,连同其对应的数据(即数据文件),都会被删除。

  • 外部表

   Hive只管理外部表的元数据,表的实际数据与元数据只是做了一个映射关系,可以借助元数据信息查询到表的实际数据信息。当使用drop删除外部表的时候,只有元数据会被删掉,表的实际数据仍然会存放在hdfs对应的路径中。

三、存储路径的区别

  • 内部表

   在创建内部表的时候,一般不需要指定数据的存储路径,在创建的时候,会将数据的存储在 hdfs 默认的路径中。一般是:/hive/warehouse/数据库名称/表名。

  • 外部表

  在实际使用中为了让数据存放更安全,外部表一般会搭配 location 来指定数据的存放目录,如果不使用 location ,将会默认在 /hive/warehouse/数据库名称/表名路径下建立数据目录。

注意,不论是外部表还是内部表,都能使用 location 指定数据的存放路径的

四、表结构与分区更改的区别

 当内部表的结构与分区发生变化的时候,会自动同步到元数据。当外部表的结构与分区发生变化的时候,则需要使用msck repair table table_name 进行修复。

总结

对比项内部表外部表
Hive 管理范围建表语句元数据、实际的表数据元数据
建表语句不需要 external 关键字修饰需要 external 关键字修饰
drop 表后果删除元数据和实际的表数据只删除元数据,实际的表数据保留
存储路径一般在默认位置存储数据一般搭配 location 指定数据存放位置
表结构和分区更改的区别自动同步到元数据需要修复表

 

 

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值