Hive(五)内部表和外部表

在Hive中手动建表手动添加数据(包括insert和load方式),这种表称之为内部表

在Hive中手动建表来管理HDFS上已经存在的数据,这种表称之为外部表

一般外部表内部表都在用。在项目初期,一般会建立外部表来管理HDFS上已经存在的数据;但是当外部表建立之后,数据还不能够直接处理使用,还需要对数据进行抽取整理等清洗操作,建立能够实际使用的内部表.
 

在Hive中,表可以被定义为内部表(Internal Table)或外部表(External Table),它们之间有一些重要的区别。这些区别涉及数据存储位置、数据管理方式、数据的持久性以及数据的删除行为等方面。以下是内部表和外部表之间的详细区别:

  1.数据存储位置
  ·内部表:内部表的数据存储在Hive数据仓库目录中,通常位于HDFS(Hadoop Distributed File System)上的/user/hive/warehouse目录下,由Hive完全管理。当创建内部表时,Hive会在指定的数据仓库目录中创建相应的数据存储目录,并将表的数据直接存放在这些目录中。

  ·外部表:外部表的数据存储在用户指定的位置,可以是HDFS上的任意路径,也可以是本地文件系统或其他支持的存储系统。Hive仅在元数据中维护外部表的结构信息,不对数据的存储位置和文件管理负责。

  2.数据管理方式
  ·内部表:由于Hive完全管理内部表的数据,它会在表被删除时,同时删除表对应的数据。这意味着删除内部表将导致表数据的彻底丢失。内部表适用于需要完全由Hive管理和控制的数据。

  ·外部表:外部表的数据由用户自行管理,Hive仅维护元数据。如果删除外部表,只会删除元数据而不会影响存储在外部表位置的数据。这种特性使得外部表适用于对数据有更细粒度控制,希望在删除表时保留数据的情况。

Hive内部表和外部表的区别是什么?

  3.数据的持久性
  ·内部表:内部表的数据在被加载到表中后会持久保存,并且只有在显式删除表时才会被删除。在重启Hive或重新加载元数据后,内部表的数据会保留。

  ·外部表:外部表的数据在加载到表中后并不一定被持久保存,因为外部表的数据是由用户管理的。如果数据源是临时性的,那么在会话结束或Hive重启后,外部表的数据可能会丢失。

  4.数据的导入
  ·内部表:可以使用INSERT语句向内部表中插入数据,Hive会将数据存储在内部表的数据目录中。

  ·外部表:数据可以通过多种方式加载到外部表中,例如通过LOAD DATA语句从本地文件系统或其他数据源加载数据。在加载数据时,只是将数据的元数据信息添加到外部表中,实际数据保留在外部表的位置。

  5.ALTER操作
  ·内部表:对于内部表,可以使用ALTER TABLE语句更改表的属性,例如更改列名、添加/删除分区等。

  ·外部表:对于外部表,ALTER TABLE语句仅允许更改表的一些元数据信息,例如重命名表、更改列的注释等,但不能更改表的存储位置或数据本身。

  总的来说,内部表适用于需要由Hive完全管理和控制数据的情况,而外部表适用于希望自行管理数据的情况,保留数据并在删除表时不影响数据的情况。选择内部表还是外部表取决于具体的数据管理需求和数据的生命周期。

1.建立外部表

order.txt数据

2001 20180710 4 2
2002 20180710 3 3
2003 20180711 1 3
2004 20180711 4 3

建orders目录,将order.txt传上去

 然后再hive中创建外部表来管理数据

create external table orderstable(orderid int, orderdate string, productid int, number int) row format delimited fields terminated by ' ' location '/orders';

查看表的详细信息

desc extended orderstable;

 或者

desc formatted orders;        其中找到Table Type:EXTERNAL_TABLE

2.在Hive中,删除内部表的时候,这个表对应的目录也会从HDFS上删除drop table p13; drop table p14;删除外部表的时候,只是删除了元数据,而这个表对应的目录没有从HDFS上移除 drop table orderstable    demo5 orders的文件夹没有删除

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Allen019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值