hive 内部表和外部表的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive 内部表和外部表的区别相关的知识,希望对你有一定的参考价值。

  Hive中内部表与外部表的区别:

  Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。
  需要注意的是传统数据库对表数据验证是 schema on write(写时模式),而 Hive 在load时是不检查数据是否符合schema的,hive 遵循的是 schema on read(读时模式),只有在读的时候hive才检查、解析具体的数据字段、schema。
  读时模式的优势是load data 非常迅速,因为它不需要读取数据进行解析,仅仅进行文件的复制或者移动。

  写时模式的优势是提升了查询性能,因为预先解析之后可以对列建立索引,并压缩,但这样也会花费要多的加载时间。
参考技术A Hive中内部表与外部表的区别:
Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,
不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,
而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。

需要注意的是传统数据库对表数据验证是 schema on write(写时模式),而 Hive 在load时是不检查数据是否
符合schema的,hive 遵循的是 schema on read(读时模式),只有在读的时候hive才检查、解析具体的
数据字段、schema。
读时模式的优势是load data 非常迅速,因为它不需要读取数据进行解析,仅仅进行文件的复制或者移动。
写时模式的优势是提升了查询性能,因为预先解析之后可以对列建立索引,并压缩,但这样也会花费要多的加载时间。本回答被提问者和网友采纳

2min快速了解,Hive内部表和外部表

在了解内部表和外部表区别前,

我们需要先了解一下Hive架构 :

大家可以简单看一下这个架构图,我介绍其中要点:

Hive的数据分为两种,一种为普通数据,一种为元数据。

1.元数据存储着表的基本信息,增删改查记录,类似于Hadoop架构中的namespace。普通数据就是表中的详细数据。

2.Hive的元数据默认存储在derby中,但大多数情况下存储在MySQL中。普通数据如架构图所示存储在hdfs中。


下面我们来介绍表的两种类型:内部表和外部表

1.内部表(MANAGED):hive在hdfs中存在默认的存储路径,即default数据库。之后创建的数据库及表,如果没有指定路径应都在/user/hive/warehouse下,所以在该路径下的表为内部表。

2.外部表(EXTERNAL):指定了/user/hive/warehouse以外路径所创建的表

而内部表和外部表的主要区别就是 
- 内部表:当删除内部表时,
MySQL的元数据和HDFS上的普通数据都会删除 ;
- 外部表:当删除外部表时,
MySQL的元数据会被删除,HDFS上的数据不会被删除;

1.准备数据:  按tab键制表符作为字段分割符

cat /tmp/ruozedata.txt

1   jepson  32  110

2   ruoze   22  112

3   www.ruozedata.com   18  120


2.内部表测试:

1.在Hive里面创建一个表:

hive> create table ruozedata(id int,

    > name string,

    > age int,

    > tele string)

    > ROW FORMAT DELIMITED

    > FIELDS TERMINATED BY '\t'

    > STORED AS TEXTFILE;

OK

Time taken: 0.759 seconds


2.这样我们就在Hive里面创建了一张普通的表,现在给这个表导入数据:

load data local inpath '/tmp/ruozedata.txt' into table ruozedata;

3.内部表删除

hive> drop table ruozedata;


3.外部表测试:

1.创建外部表多了external关键字说明以及hdfs上location ‘/hive/external’

hive> create external table exter_ruozedata(

    > id int,

    > name string,

    > age int,

    > tel string)

    > location '/hive/external';

OK

Time taken: 0.098 seconds

创建外部表,需要在创建表的时候加上external关键字,同时指定外部表存放数据的路径

(当然,你也可以不指定外部表的存放路径,这样Hive将 在HDFS上的/user/hive/warehouse/文件夹下以外部表的表名创建一个文件夹,并将属于这个表的数据存放在这里)


2.外部表导入数据和内部表一样:

load data local inpath '/tmp/ruozedata.txt' into table exter_ruozedata;

3.删除外部表

hive> drop table exter_ruozedata;



打个小小的广告哟2min快速了解,Hive内部表和外部表2min快速了解,Hive内部表和外部表2min快速了解,Hive内部表和外部表

1.若泽数据 官网:  

www.ruozedata.com     

微信不支持链接跳转,单击下方[阅读全文]

2.面试题/博客汇总: 

 https://github.com/ruozedata/BigData

 微信不支持内链接跳转,浏览器拼写一下


每周3篇大数据相关原创文章,联系客服领取,

若泽2017+2018年所有腾讯课堂公开课视频,尚未外泄,独此1家

2min快速了解,Hive内部表和外部表

4.


5.若泽大数据--星星: ruoze_star ,加我邀请进群


单击下方【阅读全文】,进入官网!

以上是关于hive 内部表和外部表的区别的主要内容,如果未能解决你的问题,请参考以下文章

Hive内部表和外部表的区别详解

Hive中内部表和外部表之间的相互转换

2min快速了解,Hive内部表和外部表

Hive面试题

hive内部表与外部表区别

精选Hive高频面试题11道,附答案详细解析(好文收藏)