hive外部表改为内部表_【Hive教程】(八)HIVE内部表和外部表

内部表不多说,之前教程我们创建的全部都是内部表,因为我们没有加External关键字。

内部表和外部表区别:

内部表数据由Hive自身管理,外部表数据由HDFS管理;

删除内部表会直接删除元数据(metadata)及存储数据,即对应HDFS的目录也会没有;而删除外部表仅仅会删除HIVE元数据,HDFS上的文件并不会被删除;

内部表数据存储在数据仓库目录(hive.metastore.warehouse.dir(默认:/user/hive/warehouse))中,外部表数据的存储位置由自己指定(也可以不指定,那么还是放在/user/hive/warehouse中,但注意此时的目录是外部表目录,删除表不会删除此目录)。

对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)

外部表(External Table)

创建外部表相关目录文件到HDFS

[root@master home]# cat test.txt

1:12:qqqqq:woman:20180507

2:13:aaaaa:man:20180107

3:14:zzzzz:man:20180106

4:15:wwwww:woman:20180206

5:16:sssss:woman:20180207

[root@master home]# hadoop fs -put test.txt '/user/root'

创建外部表,指向上面我们创建的文件。

hive (default)> create external table user(id int ,age int, name string,sex string,date string)

> row format delimited fields terminated by ':'

> location '/user/root';

OK

Time taken: 0.139 seconds

hive (default)> select * from user;

OK

user.id user.age user.name user.sex user.date

1 12 qqqqq woman 20180507

2 13 aaaaa man 20180107

3 14 zzzzz man 20180106

4 15 wwwww woman 20180206

5 16 sssss woman 20180207

Time taken: 0.206 seconds, Fetched: 5 row(s)

刚创建好表,就可以查出数据来了!!

测试删除表:

hive (default)> drop table user;

查看HDFS中文件是否被删除:

外部表删除表之后文件没有被删除,可以自行测试内部表,删除表之后对应的HDFS目录肯定没了!

由此我们归纳出:

外部表指向已经在HDFS中存在的数据

它和内部表在元数据的组织上时相同的,而实际存储则有极大的差异

外部表只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只会与外部数据创建一个链接

当删除该表时,仅删除该链接而不删除实际的数据

BDStar原创文章。发布者:Liuyanling,转载请注明出处:http://bigdata-star.com/archives/1079

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值