hive外部表与内部表的区别

测试一下,放三个文件到HDFS中

hdfs dfs -mkdir /input

hdfs dfs -put student01.txt /input

hdfs dfs -put student02.txt /input

hdfs dfs -put student03.txt /input

测试1:

现在建立一个外部表来指向这三个文件

create external table external_student

(sname string, age int)

row format delimited fields terminated by ','

location '/input';

发现这张表把元数据信息存放在mysql中,在hdfs上并没有任何数据的信息

hdfs dfs -rm /input/student03.txt

发现外部表查询数据也减少了

测试2:

创建内部表

create table internal_student

(sname string, age int)

row format delimited fields terminated by ','

location '/input';

这种情况下,发现与外部表的情况是相同的

1. 并没有在hdfs下创建表

2. 删除hdfs中的数据,其查询的结果也没有了

但是当我删除内部表的时候,数据被删除了

测试3:

如果load的时候,使用内部表load

create table internal_student2

(sname string, age int)

row format delimited fields terminated by ',';

 

load data inpath '/input/student01.txt' overwrite into table internal_student2

这句的结果是:

数据文件只有一份,会被传来传去

测试4:

如果想生成一份数据,而不要传来传去,那么通过select+insert来进入内部表

insert into table internal_student select sname, age from internal_student2;

其会启动一个mr的程序,生成结果放到/input下

总结:

1.  删除内部表会直接删除元数据及存储数据,删除外部表仅仅会删除元数据

2. 内部表数据由hive自身管理(因为内部表数据会放到hdfs hive相关目录下),而外部表数据仍然是放在HDFS上的,由HDFS自己管理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值