内部表外部表的操作与区别

内部表外部表

未被external修饰的表是内部表(managed table),被external修饰的是外部表(external table)

内部表操作

准备工作:

创建stu.txt

1,zs
2,ls
3,ww
4,wmz

上传stu.txt到hdfs中 , 我的上传目录是 /user/mwf

hadoop fs -mkdir /user/mwf/ 
hadoop fs -put stu.txt /user/mwf
创建内部表
> create table stu(id int,name string) row format delimited fields terminated by ","
> load data inpath "/user/mwf/stu.txt" into table stu ;
> select * from stu ;
结果:
1	zs
2	ls
3	ww
4	wmz
说明:
  1. 创建表的时候可以通过指定location来指定表文件的存放路径,如果不指定的话,默认是将数据存放在/user/hive/warehouse/库名/ 下的
  2. load data 是数据的迁移,执行load data后,数据会从hdfs中的原来的位置移动到指定的位置或者是默认的存放位置(数据会发生移动的,如上例中数据从/user/mwf移动到了/user/hive/warehouse/目录下)
  3. 内部表删除的时候,会在元数据库中删除元数据,并且hdfs中的文件也会被删除

外部表操作

接着做准备工作,创建stu.txt,上传到hdfs中

创建外部表
> create external table stu_external (id int,name string) row format delimited fields terminated by "," location '/external/stu';
> load data inpath "/user/mwf/stu.txt" into table stu_external ;
> select * from stu_external;

> drop table stu_external ;
> create external table stu_external (id int,name string) row format delimited fields terminated by "," location '/external/stu';
> select * from stu_external;
说明:
  1. 外部表和内部表最不同的一点在于location,外部表的location指定表文件所在的位置,如果在指定的位置下有符合表结构的数据,直接查询就可以查询出数据来;如果loaction下不存在数据,可以通过load data将数据移动到location所指定的目录,然后也可以查询出数据来

    如上例,通过load data将/user/mwf/下的stu.txt移动到了/external/stu下,就可以通过select查询出数据来;我们也可以在创建表的时候,直接将location指定为/external/stu,就可以通过select查询数据出来

  2. 外部表删除表的时候,会从元数据库中删除,但是不会从hdfs中删除

    如上例,删除表后,会发现数据还安静的躺在/external/stu目录下;再次执行建表语句,并指定location为/external/stu,执行查询,会发现表和数据都回来了

总结

  1. 内部表的数据是由Hive自身管理的,外部表的数据是由HDFS管理的;删除内部表会删除元数据和存储的数据;删除外部表只删除元数据不删除存储的数据

    内部表的数据在hive中删除,在HDFS中也就删除了;但是外部表的数据,在Hive中删除,HDFS中还是存在的

  2. 两者都可以在建表的时候指定location,指定数据文件的存放位置;如果不指定的话,默认都是在/user/hive/warehouse/目录下(这个目录是可以在配置文件中修改的)。

  3. 两者的load 操作都会移动数据!!!


个人理解,有不对的地方欢迎指正~~


个人微信公众号【码农峰】,每天推送最新行业资讯,每周推送原创技术文章,欢迎关注。

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值