Hive应用:数据外置内部表

Hive应用:数据外置内部表

介绍

个人认为这种表就体现了Hive的无节操无底线。会颠覆你对外部表和内部表的传统认知。

当你在创建内部表的时候,加上了location和目录,那么你的数据就存放在你指定的目录中,这个目录可以是在HDFS的任意目录,所以如果你的Hive库中存在这样的表,那么你就不能随意地删除你Hive中的任何表,因为使用show tables;命令查看Hive中的表的列表时,没有明确标识哪个表是外部表,哪个表是内部表,不小心删除之后,数据就彻底没了。

示例

先创建HDFS目录/data/person,将数据文件上传到此目录之下。数据内容如下:

1.0|张三|20.0|男|未知|0
2.0|李四|25.0|男|河北|0
3.0|张飞|30.0|男|河北|0
4.0|关羽|35.0|男|山东|0
5.0|小乔|38.0|女|浙江|0
6.0|刘备|40.0|男|成都|0
7.0|小李|29.0|男|江南|0

创建Hive内部表:

hive> create table person(id string,name string,age string,gender string,address string,test int) row format delimited fields terminated by '|' location 'hdfs://192.168.75.150:9000/data/person';
OK
Time taken: 0.148 seconds
hive> select * from person;
OK
1.0	张三	20.0	男	未知	0
2.0	李四	25.0	男	河北	0
3.0	张飞	30.0	男	河北	0
4.0	关羽	35.0	男	山东	0
5.0	小乔	38.0	女	浙江	0
6.0	刘备	40.0	男	成都	0
7.0	小李	29.0	男	江南	0
Time taken: 0.141 seconds, Fetched: 7 row(s)
hive> 

此时就创建了一个数据外置的内部表,这个表也允许先有数据,上面展示的数据,就是证明了这一点,完美展示了数据外置的内部表。

然而如果删除Hive中的这个表的话,数据也会跟着被删除。

下图是数据存放的目录:

在看一下test数据库目录:

没有person表的目录。

接下来将删除person表看看目录的变化:

hive> drop table preson;
OK
Time taken: 0.184 seconds
hive> show tables;
OK
person
promo
tab
Time taken: 0.222 seconds, Fetched: 3 row(s)
hive> drop table person;
OK
Time taken: 0.189 seconds
hive> show tables;
OK
promo
tab
Time taken: 0.076 seconds, Fetched: 2 row(s)
hive> 

第一遍删除竟然没有成功,不知道闹哪样,第二次删除成功,下面是目录结构:

data目录空了,person文件夹也不存在了。

总结

所以综上所述,这种内部表有普通外部表的先有数据的特性,还具有普通内部表删除表数据也同时删除的特性。那么如果这个表也是内部表的话,那么内部表和外部表的区别在哪里?只剩下一个external关键字了,其他的没有区别了,而且Hive中表的列表中没有明确标识表的种类,稀里糊涂一顿删除,有可能删除的就是这种表!

这种表出现有两种可能:一种是创建外部表的时候手误忘记写external关键字,另外一种就是真的需要这样一种表,但是好像在我的职业生涯中,还暂时没有遇到这种需求,而本人只是手误忘记写external关键字,才产生的这种表,然后删除,重新创建,发现存放数据的目录以及数据都没有了,才进一步做了以上的实验来证明这个事情。

上一篇:Hive应用:外部分区表

下一篇:Hive应用:设置字段自增

 

转载于:https://my.oschina.net/u/3754001/blog/1925297

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值