Hive應用:數據外置內部表

Hive應用:數據外置內部表

介紹

我的認爲這種表就體現了Hive的無節操無底線。會顛覆你對外部表和內部表的傳統認知。數據庫

當你在建立內部表的時候,加上了location和目錄,那麼你的數據就存放在你指定的目錄中,這個目錄能夠是在HDFS的任意目錄,因此若是你的Hive庫中存在這樣的表,那麼你就不能隨意地刪除你Hive中的任何表,由於使用show tables;命令查看Hive中的表的列表時,沒有明確標識哪一個表是外部表,哪一個表是內部表,不當心刪除以後,數據就完全沒了。bash

示例

先建立HDFS目錄/data/person,將數據文件上傳到此目錄之下。數據內容以下:spa

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內部表:.net

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>

此時就建立了一個數據外置的內部表,這個表也容許先有數據,上面展現的數據,就是證實了這一點,完美展現了數據外置的內部表。code

然而若是刪除Hive中的這個表的話,數據也會跟着被刪除。orm

下圖是數據存放的目錄:blog

在看一下test數據庫目錄:get

沒有person表的目錄。文件上傳

接下來將刪除person表看看目錄的變化:string

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應用:設置字段自增

相關文章
相關標籤/搜索