Hive内部表和外部表理解测试

一、概念

1、内部表数据由Hive自身管理,外部表数据由HDFS管理;
2、内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse);
3、外部表数据的存储位置由自己制定(如果没有LOCATION,Hive将在HDFS上的/user/hive/warehouse文件夹下以外部表的表名创建一个文件夹,并将属于这个表的数据存放在这里);
4、未被external修饰的是内部表(managed table),被external修饰的为外部表(external table);
5、删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
6、对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)

二、建表及导入数据

1、内部表

(1)创建内部表

hive> create table student(id string,name string) row format delimited fields terminated by ',';
OK
Time taken: 0.512 seconds

(2)查看表结构

hive> desc student;
OK
id                  	string              	                    
name                	string              	                    
Time taken: 0.038 seconds, Fetched: 2 row(s)

(3)导入数据

[root@master test]# pwd
/home/test
[root@master test]# cat stu.txt 
001,xiaohong
002,xiaolan
hive> load data local inpath '/home/test/stu.txt' into table student;
Loading data to table default.student
OK
Time taken: 1.14 seconds
hive> select * from student;
OK
001	xiaohong
002	xiaolan
Time taken: 0.848 seconds, Fetched: 2 row(s)
hive> 

2、外部表

(1)创建外部表

hive> create external table leader(id string,name string) row format delimited fields terminated by ',' location '/user/leader' ;
OK
Time taken: 0.06 seconds

(2)查看表结构

hive> desc leader;
OK
id                  	string              	                    
name                	string              	                    
Time taken: 0.034 seconds, Fetched: 2 row(s)

(3)导入数据

hive> load data local inpath '/home/test/teacher.txt' into table leader;
Loading data to table default.leader
OK
Time taken: 0.163 seconds
hive> select * from leader;
OK
001	zhangfei
002	liubie
003	guanyu
Time taken: 0.068 seconds, Fetched: 3 row(s)

三、查看表数据位置

1、内部表

2、外部表

四、删除测试

1、删除内部表

hive> drop table student;
OK
Time taken: 1.122 seconds

2、删除外部表

hive> drop table leader;
OK
Time taken: 0.125 seconds
hive> show tables;
OK
teacher
Time taken: 0.023 seconds, Fetched: 1 row(s)

外部表由于删除了表,但是数据并没有被删除,故可以重新建立结构一样的表并指向数据路径来恢复数据:

hive> create external table leader(id string,name string) row format delimited fields terminated by ',' location '/user/leader' ;
OK
Time taken: 0.053 seconds
hive> select * from leader;
OK
001	zhangfei
002	liubie
003	guanyu
Time taken: 0.09 seconds, Fetched: 3 row(s)
hive> create external table leader02(id string,name string) row format delimited fields terminated by ',' location '/user/leader' ;
OK
Time taken: 0.032 seconds
hive> select * from leader02;
OK
001	zhangfei
002	liubie
003	guanyu
Time taken: 0.06 seconds, Fetched: 3 row(s)

五、总结

1.做etl处理时,通常会选择内部表做中间表,因为清理时,会将HDFS上的文件同时删除;
2.如果怕误删数据,可以选择外部表,因为不会删除文件,方便恢复数据;

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

郝少

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

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

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

打赏作者

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

抵扣说明:

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

余额充值