Hive管理表和外部表的区别

前言:
所谓外部表,就是Hive并非认为其完全拥有这份数据。删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉。关于Hive数据仓库的管理表(MANAGED_TABLE)和外部表(EXTERNAL_TABLE)的区别,在创表的时候,如果不指定,则默认创建管理表。如果不知道此表是什么类型的表的话,可以在hive的命令行里打desc formatted table_name查看TABLE TYPE行查看;如果需要创建外部表则需要在创表的语句指定为external,如:create external table table_name。

案例:
1.管理表
我现在有一份名为student.txt,内容如下:
1001 lisi
1002 wangwu
1003 zhaoliu
我把他上传到hdfs上的/student目录下:

hive (default)> dfs -mkdir /student;
hive (default)> dfs -put /opt/module/datas/student.txt /student;

然后创建一个普通表(即默认管理表),并指定用/student下的数据为表数据:

hive (default)> create table stu(
id int, 
name string) 
row format delimited fields terminated by '\t' 
location '/student';

查看表数据:

hive (default)> select * from stu_;
OK
stu_.id stu.name
1001    lisi
1002    wangwu
1003    zhaoliu

说明已经成功引用了student.txt的数据,现在来删除表,drop table stu;然后再去hdfs上查看刚上传的student.txt文件,发现连/student都已经不见了。
2.外部表
先上传student.txt文件到hdfs:

hive (default)> dfs -mkdir /student;
hive (default)> dfs -put /opt/module/datas/student.txt /student;

然后创建外部表,指定student目录下的student.txt作为数据:

hive (default)> create external table stu_external(
id int, 
name string) 
row format delimited fields terminated by '\t' 
location '/student';

查看表数据:

hive (default)> select * from stu_external;
OK
stu_external.id stu_external.name
1001    lisi
1002    wangwu
1003    zhaoliu

删除表:

drop table stu_external;

删除外部表后,发现student.txt文件还在,其实外部表删除后,只删除metadata中stu_external的元数据,hdfs的数据还在。

管理表和外部表的转换
管理表转换为外部表:

alter table table_name set tblproperties('EXTERNAL'='TRUE');

外部表转换为管理表:

alter table student2 set tblproperties('EXTERNAL'='FALSE');
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值