hive内部表于外部表的区别举例说明

  1. 结合例子说明Hive内部表与外部表的区别。

答:未被external修饰的是内部表(managed table),被external修饰的为外部表(external table)。

区别:1.  内部表数据由Hive自身管理,外部表数据由HDFS管理;

2.内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定(如果没有LOCATION,Hive将在HDFS上的/user/hive/warehouse文件夹下以外部表的表名创建一个文件夹,并将属于这个表的数据存放在这里);

3 .删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;(Hive元数据包括hive库信息、表信息(表的属性、表的名称、表的列、分区及其属性)以及表数据所在的目录等。

4.对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)

下面将通过例子说明内部表与外部表的区别

一:创建内部表

1,错误示例

 

原因:这是因为创建表格时没有对导入的数据格式没有处理,比如每行数据以tab键隔开,以换行键结尾

正确示例:

建表

导入数据

查询

 

二:外部表的创建

建表查询语句和内部表一样,区别在于在创建外部表的时候我们一般会指定位置,这样方便我们一会查看路径的时候区别。

三,位置查看

 

 

 

 四删除两个表

 

 

 

 

发现内部表已经被删除,而外部表仅仅删除元数据

重新创建外部表

 

 不给里面插入数据查询

 

发现数据依然还在

总结:

1因为hive内部表在删除表是同时删除表数据与元数据,而外部表删除的时候,仅仅会删除元数据,HDFS上的文件并不会被删除,所以外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。

2如果所有的数据都由hive处理,则创建内部表;如果数据的处理由hive和其他工具一起处理,则创建外部表。

3我们在管理表不方便和其他工作共享数据。可以创建一个外部表指向这份数据,而并不需要对其具有所有权。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值