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

您所在的位置:网站首页 hive管理表和外部表 Hive内部表和外部表理解测试

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

2023-07-18 16:10| 来源: 网络整理| 查看: 265

一、概念

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.如果怕误删数据,可以选择外部表,因为不会删除文件,方便恢复数据;



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3