Hive的內(nèi)部表和外部表的增刪改以及區(qū)別?

1,現(xiàn)象演示:

創(chuàng)建數(shù)據(jù)庫:
create database if not exists ma_ex
comment 'manager_external'
with dbproperties ('name'='dachun','date'='20200202');
我的另一篇博客詳細(xì)介紹了Hive的數(shù)據(jù)庫操作

2,內(nèi)部表演示

創(chuàng)建內(nèi)部表(MANAGED _TABLE):創(chuàng)建內(nèi)部表也可以指定location,內(nèi)部表的數(shù)據(jù)文件就會(huì)存儲(chǔ)在指定路徑下,否則走默認(rèn)的當(dāng)前庫/表名
create table if not exists one(
id int,
name string
) row format delimited fields termited by ',';

內(nèi)部表insert方式插入數(shù)據(jù),生產(chǎn)千萬不要用
因?yàn)樗敲坎迦胍粭l數(shù)據(jù),就會(huì)在該表目錄下生成一個(gè)小文件,每一個(gè)小文件對(duì)應(yīng)一條數(shù)據(jù),10W條對(duì)應(yīng)10W個(gè)小文件
insert into one values(1,'dema');
insert into one values(2,'xiya');


小文件

內(nèi)部表load方式插入數(shù)據(jù)
load data local inpath '/home/hadoopadmin/one.txt' into table one
load方式直接把這個(gè)文件拷貝到了目錄下.

load方式

或者不用這個(gè)load命令,直接再拷貝一個(gè)文件到表one目錄下,執(zhí)行select* from one發(fā)現(xiàn)數(shù)據(jù)也加載進(jìn)來了
hdfs dfs -put /home/hadoopadmin/one.txt
/user/hive/warehouse/ma_ex.db/one/one2.txt

直接上傳文件方式

在MySQL的元數(shù)據(jù)表TBLS里面查看
select * from TBLS;
字段TBL_TYPE=MANAGED_TABLE表示是內(nèi)部表


image.png

3,外部表不帶location演示

創(chuàng)建外部表
create external table if not exists one_external(
id int,
name string
) row format delimited fields terminated by ',';

如果創(chuàng)建外部表時(shí)候末尾沒有加上location,
他默認(rèn)讀取的是自己database/自己tablename/文件

通過hdfs上傳文件方式往這個(gè)目錄下上傳一個(gè)文件
hdfs dfs -put /home/hadoopadmin/one.txt /user/hive/warehouse/ma_ex.db/one_external

通過load方式網(wǎng)這個(gè)表里面添加數(shù)據(jù)
load data local inpath '/home/hadoopadmin/one2.txt' into table one_external;

外部表同樣也可以通過insert方式添加數(shù)據(jù),同樣對(duì)應(yīng)目錄下新增一個(gè)文件
insert into one_external values(1,'lala');

上面三中添加方式都可以在外部表添加數(shù)據(jù)

image.png

查看元數(shù)據(jù)TABLS


image.png

4,外部表帶location演示

創(chuàng)建外部表時(shí)候指定新的location
首先將文件導(dǎo)入到外部表的目錄下
hdfs dfs -put /home/hadoopadmin/one.txt /user/hive/warehouse/external/

create external table if not exists one_external2(
id int,
name string
) row format delimited fields terminated by ','
location '/user/hive/warehouse/external/'

因?yàn)槲覀冊(cè)谕獠勘淼穆窂较乱呀?jīng)導(dǎo)入了文件
直接執(zhí)行select * from one_external2是能夠看到數(shù)據(jù)的

hive (ma_ex)> select * from one_external2;
OK
3 shuruima
4 heisemeigui
5 niuqu

在元數(shù)據(jù)存儲(chǔ)的表的表TBLS也能看到


image.png

但是在hdfs上面并不能能夠看到相關(guān)的目錄,在該表數(shù)據(jù)庫文件夾的下關(guān)于external2的目錄也無法找到,通過下面這個(gè)desc formatted 表名,能夠知道這個(gè)外部表的路徑定在了外部表建表語句的location的文件夾下


image.png

為什么可以確認(rèn)外部表的文件夾自動(dòng)定位到了location文件夾下呢?
1,通過下面的desc table formatted確定了
2,insert into 表 values ();執(zhí)行完之后,發(fā)現(xiàn)這個(gè)外部表的location文件夾下多出來一個(gè)文件,這個(gè)文件就是我們插入的這一條數(shù)據(jù),所以呢,這就定位到了,創(chuàng)建帶location的外部表對(duì)應(yīng)的表數(shù)據(jù)存儲(chǔ)路徑就默認(rèn)使用這個(gè)location位置

5,desc formatted 表名獲取信息

使用desc formatted 表名,截圖關(guān)鍵點(diǎn)
desc formatted one;


one

desc formatted one_external;


one_external

desc formatted one_external2;


one_external2

我們會(huì)發(fā)現(xiàn)指定location的外部表,這個(gè)location路徑就是它對(duì)應(yīng)的文件的路徑,他并沒有自己創(chuàng)建相關(guān)路徑,但是創(chuàng)建內(nèi)部表和沒有指定路徑的外部表他是在數(shù)據(jù)庫的hdfs路徑下真實(shí)創(chuàng)建了這個(gè)文件夾.下面以刪除表為例測(cè)試.

6,總結(jié)

總結(jié):內(nèi)部表
內(nèi)部表創(chuàng)建時(shí)候,會(huì)在hdfs文件系統(tǒng)上面創(chuàng)建相應(yīng)的路徑文件夾,相關(guān)表的數(shù)據(jù)都會(huì)存在里面,如果是insert into 進(jìn)去的數(shù)據(jù),每一條都會(huì)對(duì)應(yīng)一個(gè)小文件,可以把文件已load方式加載進(jìn)去或者直接把文件放到hdfs文件系統(tǒng)對(duì)應(yīng)的路徑里面,前提是創(chuàng)建表的時(shí)候,制定好分隔符,然后執(zhí)行select * from 表,就可以將文件里面的數(shù)據(jù)讀到表中
刪除內(nèi)部表(MANAGED_TABLE)的時(shí)候,在 MySQL的元數(shù)據(jù)表TBLS里面對(duì)應(yīng)的one表內(nèi)容被刪除,另外HDFS文件系統(tǒng)上面的該表的數(shù)據(jù)都會(huì)被刪除

總結(jié):外部表沒有指定location.
外部表沒有指定location版本創(chuàng)建時(shí)候,會(huì)在hdfs文件系統(tǒng)上面創(chuàng)建相應(yīng)的路徑文件夾,相關(guān)表的數(shù)據(jù)都會(huì)存在里面,如果是insert into 進(jìn)去的數(shù)據(jù),每一條都會(huì)對(duì)應(yīng)一個(gè)小文件,可以把文件已load方式加載進(jìn)去或者直接把文件放到hdfs文件系統(tǒng)對(duì)應(yīng)的路徑里面,前提是創(chuàng)建表的時(shí)候,制定好分隔符,然后執(zhí)行select * from 表,就可以將文件里面的數(shù)據(jù)讀到表中
刪除時(shí)候,對(duì)應(yīng)的hdfs上面的表路徑以及數(shù)據(jù)都不會(huì)刪除,即使沒指定location,自己創(chuàng)建路徑的話,還是沒有刪除.但是在 MySQL的元數(shù)據(jù)表TBLS里面對(duì)應(yīng)的表內(nèi)容被刪除.

image.png

總結(jié):外部表指定location.
創(chuàng)建時(shí)候,如果指定了location的話,該外部表對(duì)應(yīng)的存儲(chǔ)路徑文件夾=location指定的文件夾位置,通過desc formatted tablename和insert into方式插入一條數(shù)據(jù)會(huì)多一個(gè)文件在location文件夾下,得到了驗(yàn)證
刪除時(shí)候,對(duì)應(yīng)的hdfs上面的表路徑以及數(shù)據(jù)都不會(huì)刪除,即使沒指定location,自己創(chuàng)建路徑的話,還是沒有刪除.但是在 MySQL的元數(shù)據(jù)表TBLS里面對(duì)應(yīng)的表內(nèi)容被刪除.

7,內(nèi)部表和外部表和外部表-location三者異同點(diǎn)

內(nèi)部表和外部表的共同點(diǎn):
指定好了分隔符的情況下,直接往他們相關(guān)的目錄下不管是load文件,還是直接hdfs命令上傳文件到這個(gè)路徑,都可以被識(shí)別為表數(shù)據(jù),而且都會(huì)在MySQL元數(shù)據(jù)TBLS表里面存儲(chǔ),刪除表的時(shí)候?qū)?yīng)的TBLS元數(shù)據(jù)都被刪除
另外在hdfs文件系統(tǒng)的a數(shù)據(jù)庫文件夾下都有一個(gè)one的文件夾,如果a數(shù)據(jù)庫下創(chuàng)建一個(gè)內(nèi)部表one,或者創(chuàng)建一個(gè)外部表one指定location為one這個(gè)路徑,或者創(chuàng)建外部表one不帶location,他們?nèi)齻€(gè)讀出來的數(shù)據(jù)一樣.

內(nèi)部表和外部表不同點(diǎn):
內(nèi)部表會(huì)把hdfs表相關(guān)的文件文件夾全干掉,外部表就不會(huì)

外部表指定location和沒指定location異同點(diǎn):
指定location的話該表的數(shù)據(jù)都存儲(chǔ)在location下,沒指定location的話,數(shù)據(jù)都存儲(chǔ)在當(dāng)前數(shù)據(jù)庫文件夾下一個(gè)名字為該表名的文件夾下,刪除表時(shí)候hdfs上面數(shù)據(jù)都不會(huì)被刪除,但是MySQL的元數(shù)據(jù)庫表TBLS數(shù)據(jù)都會(huì)被刪除.

Hive官方介紹
https://cwiki.apache.org/confluence/display/Hive/Managed+vs.+External+Tables

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市钉迷,隨后出現(xiàn)的幾起案子沃粗,更是在濱河造成了極大的恐慌愁茁,老刑警劉巖徒仓,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栅表,死亡現(xiàn)場(chǎng)離奇詭異谓晌,居然都是意外死亡笤妙,警方通過查閱死者的電腦和手機(jī)硅则,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門庭瑰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人抢埋,你說我怎么就攤上這事弹灭。” “怎么了揪垄?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵穷吮,是天一觀的道長。 經(jīng)常有香客問我饥努,道長捡鱼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任酷愧,我火速辦了婚禮驾诈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘溶浴。我一直安慰自己乍迄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布士败。 她就那樣靜靜地躺著闯两,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谅将。 梳的紋絲不亂的頭發(fā)上漾狼,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音饥臂,去河邊找鬼逊躁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛隅熙,可吹牛的內(nèi)容都是我干的稽煤。 我是一名探鬼主播核芽,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼念脯!你這毒婦竟也來了狞洋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤绿店,失蹤者是張志新(化名)和其女友劉穎吉懊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體假勿,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡借嗽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了转培。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恶导。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖浸须,靈堂內(nèi)的尸體忽然破棺而出惨寿,到底是詐尸還是另有隱情,我是刑警寧澤删窒,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布裂垦,位于F島的核電站,受9級(jí)特大地震影響肌索,放射性物質(zhì)發(fā)生泄漏蕉拢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一诚亚、第九天 我趴在偏房一處隱蔽的房頂上張望晕换。 院中可真熱鬧,春花似錦站宗、人聲如沸闸准。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恕汇。三九已至,卻和暖如春或辖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背枣接。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來泰國打工颂暇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人但惶。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓耳鸯,卻偏偏與公主長得像湿蛔,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子县爬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容