一起學(xué)Hive——?jiǎng)?chuàng)建內(nèi)部表怀喉、外部表书妻、分區(qū)表和分桶表及導(dǎo)入數(shù)據(jù)

Hive本身并不存儲(chǔ)數(shù)據(jù),而是將數(shù)據(jù)存儲(chǔ)在Hadoop的HDFS中躬拢,表名對(duì)應(yīng)HDFS中的目錄/文件躲履。根據(jù)數(shù)據(jù)的不同存儲(chǔ)方式,將Hive表分為外部表聊闯、內(nèi)部表工猜、分區(qū)表和分桶表四種數(shù)據(jù)模型。每種數(shù)據(jù)模型各有優(yōu)缺點(diǎn)馅袁。通過(guò)create user命令創(chuàng)建user表時(shí)域慷,會(huì)在HDFS中生成一個(gè)user目錄/文件荒辕。

外部表

數(shù)據(jù)不由Hive管理汗销,使用drop命令刪除一個(gè)表時(shí),只是把表的元數(shù)據(jù)給刪除了抵窒,而表的數(shù)據(jù)不會(huì)刪除弛针。 創(chuàng)建外部表的SQL語(yǔ)句:

create external table bigdata17_user(
userid int,
username string,
fullname string)  
row format delimited fields terminated by ','   
lines terminated by '\n';

在hive的命令行中執(zhí)行show tables;sql語(yǔ)句,會(huì)看到bigdata17_user的表李皇。

image

通過(guò)執(zhí)行hadoop fs -ls /user/hive/warehouse/bigdata17.db/bigdata17_user 命令削茁,可以看到在HDFS中有一個(gè)bigdata17_user的目錄宙枷。這時(shí)候文件夾下面是沒(méi)有數(shù)據(jù)的,因?yàn)檫€沒(méi)有導(dǎo)入數(shù)據(jù)茧跋。bigdata17.db是數(shù)據(jù)庫(kù)名慰丛,hive默認(rèn)的數(shù)據(jù)庫(kù)是default。

image

執(zhí)行SQL語(yǔ)句:load data inpath '/data/user.csv' overwrite into table bigdata17_user;導(dǎo)入數(shù)據(jù)到bigdata17_user表中瘾杭。

執(zhí)行hadoop fs -ls /user/hive/warehouse/bigdata17.db/bigdata17_user命令诅病,就看到該目錄下面有個(gè)user.csv的文件。

image

通過(guò)drop table bigdata17_user;語(yǔ)句刪除表粥烁。
然后執(zhí)行show tables語(yǔ)句贤笆,發(fā)現(xiàn)該表已經(jīng)不存在。

我們?cè)俅螆?zhí)行hadoop fs -ls /user/hive/warehouse/bigdata17.db/bigdata17_user讨阻,發(fā)現(xiàn)bigdata17_user目錄還存在芥永,目錄中還有user.csv文件。

image

通過(guò)上述的操作钝吮,驗(yàn)證了使用drop刪除表時(shí)是不會(huì)刪除外部表的數(shù)據(jù)埋涧。而我們要恢復(fù)外部表只需再次執(zhí)行創(chuàng)建bigdat17_user表的SQL即可:

create external table bigdata17_user(
userid int,
username string,
fullname string)  
row format delimited fields terminated by ','   
lines terminated by '\n';

內(nèi)部表

內(nèi)部表(有些人會(huì)翻譯成管理表)的數(shù)據(jù)由hive管理,當(dāng)使用drop刪除表時(shí)奇瘦,會(huì)把表的元數(shù)據(jù)和數(shù)據(jù)一起刪除飞袋,數(shù)據(jù)無(wú)法恢復(fù),因此一定要慎用drop刪除內(nèi)部表链患。

創(chuàng)建內(nèi)部表的sql語(yǔ)句:

create table bigdata17_user( userid int, username string, fullname string)
row format delimited fields terminated by ','
lines terminated by '\n';

和外部表創(chuàng)建的語(yǔ)法基本一樣巧鸭,只是創(chuàng)建外部表需要使用external關(guān)鍵字。沒(méi)有external關(guān)鍵字則是創(chuàng)建內(nèi)部表麻捻。

分區(qū)表

內(nèi)部表和外部表都可以使用分區(qū)的功能纲仍,使用分區(qū)的內(nèi)部或外部表稱為分區(qū)表。 創(chuàng)建分區(qū)表的語(yǔ)句:

create external table bigdata17_user_partition(
username string,
fullname string)
partitioned by(userid string)
row format delimited fields terminated by ','   
lines terminated by '\n';

往分區(qū)表導(dǎo)入數(shù)據(jù)分為靜態(tài)分區(qū)導(dǎo)入和動(dòng)態(tài)分區(qū)導(dǎo)入贸毕,靜態(tài)分區(qū)是在導(dǎo)入語(yǔ)句中指定分區(qū)值郑叠,例如:

insert overwrite table bigdata17-user_parttion
 partition(userid=1)
 select username ,fullname from bigdata17_user;

該語(yǔ)句的分區(qū)值默認(rèn)是1,如果有多個(gè)分區(qū)值明棍,必須寫多個(gè)sql語(yǔ)句乡革,效率低下。

一般情況在我們都是使用動(dòng)態(tài)分區(qū)導(dǎo)入數(shù)據(jù)摊腋,
在導(dǎo)入數(shù)據(jù)之前必須執(zhí)行下面的兩條語(yǔ)句讓hive支持動(dòng)態(tài)分區(qū)功能沸版,默認(rèn)是不支持動(dòng)態(tài)分區(qū)的。


set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict;

動(dòng)態(tài)分區(qū)導(dǎo)入數(shù)據(jù)的sql語(yǔ)句:

insert overwrite table bigdata17_user_partition
 partition(userid)
 select username ,fullname,userid from bigdata17_user;

我們來(lái)看下分區(qū)表的數(shù)據(jù)在hdfs中是以何種形式組織存放的兴蒸,執(zhí)行hadoop fs -ls /user/hive/warehouse/bigdata17.db/bigdata17_user_partition命令视粮,會(huì)看到下圖的內(nèi)容:

image

因?yàn)閎igdata17_user_partition表是按照userid字段進(jìn)行分區(qū)的,bigdata17_user_partition一共有1橙凳、2和3的三個(gè)數(shù)值蕾殴,因此有3個(gè)文件笑撞。由此可見(jiàn),分區(qū)字段有多少個(gè)不同的值钓觉,就有幾個(gè)文件茴肥。相同分區(qū)的數(shù)據(jù)存放在同一個(gè)文件中。

注意:在使用insert overwrite table select方式導(dǎo)入數(shù)據(jù)到分區(qū)表時(shí)荡灾,有多個(gè)分區(qū)字段時(shí)炉爆,分區(qū)partition中的字段順序必須和select字段的順序一致。

分桶表

分桶是將某個(gè)字段取哈希值卧晓,值相同的數(shù)據(jù)分發(fā)到一個(gè)桶中芬首。在創(chuàng)建分桶表的時(shí)候必須指定分桶的字段,并且指定要分桶的數(shù)量逼裆。 創(chuàng)建分桶表對(duì)SQL語(yǔ)句如下:

create table bigdata17_user_bucket( userid int, username string, fullname string)
clustered by(userid) into 2 buckets  
row format delimited fields terminated by ','
lines terminated by '\n';

導(dǎo)入數(shù)據(jù)到bigdata17_user_bucket分桶表中的步驟: 1. 設(shè)置使用分桶屬性:set hive.enforce.bucketing = true郁稍。
2. 執(zhí)行SQL語(yǔ)句
sql insert overwrite table bigdata17_user_bucket select userid,username ,fullname from bigdata17_user;

執(zhí)行hadoop fs -ls /user/hive/warehouse/bigdata17.db/bigdata17_user_bucket命令,會(huì)看到bigdata17_user_bucket目錄中有兩個(gè)文件胜宇。

image

其中userid為1和3的數(shù)據(jù)寫入到000001_0文件中耀怜,userid為2的數(shù)據(jù)寫入到000000_0的文件中。

注意:分區(qū)和分桶都是按字段來(lái)組織數(shù)據(jù)的存放桐愉,分區(qū)是相同的字段值存放在一個(gè)文件中财破,而分桶是字段哈希值相同的數(shù)據(jù)存放在一個(gè)文件中。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末从诲,一起剝皮案震驚了整個(gè)濱河市左痢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌系洛,老刑警劉巖俊性,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異描扯,居然都是意外死亡定页,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門绽诚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)典徊,“玉大人,你說(shuō)我怎么就攤上這事恩够∽渎洌” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵玫鸟,是天一觀的道長(zhǎng)导绷。 經(jīng)常有香客問(wèn)我,道長(zhǎng)屎飘,這世上最難降的妖魔是什么妥曲? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮钦购,結(jié)果婚禮上檐盟,老公的妹妹穿的比我還像新娘。我一直安慰自己押桃,他們只是感情好葵萎,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著唱凯,像睡著了一般羡忘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上磕昼,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天卷雕,我揣著相機(jī)與錄音,去河邊找鬼票从。 笑死漫雕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的峰鄙。 我是一名探鬼主播浸间,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼吟榴!你這毒婦竟也來(lái)了魁蒜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吩翻,失蹤者是張志新(化名)和其女友劉穎梅惯,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仿野,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铣减,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了脚作。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片葫哗。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖球涛,靈堂內(nèi)的尸體忽然破棺而出劣针,到底是詐尸還是另有隱情,我是刑警寧澤亿扁,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布捺典,位于F島的核電站,受9級(jí)特大地震影響从祝,放射性物質(zhì)發(fā)生泄漏襟己。R本人自食惡果不足惜引谜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望擎浴。 院中可真熱鬧员咽,春花似錦、人聲如沸贮预。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)仿吞。三九已至滑频,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唤冈,已是汗流浹背峡迷。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留务傲,地道東北人凉当。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像售葡,于是被迫代替她去往敵國(guó)和親看杭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

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

  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說(shuō)明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí)挟伙,會(huì)觸發(fā)此異常楼雹。 O...
    我想起個(gè)好名字閱讀 5,333評(píng)論 0 9
  • 概述 目前,在利用hive建設(shè)數(shù)據(jù)倉(cāng)庫(kù)的過(guò)程中尖阔,總會(huì)遇見(jiàn)分區(qū)分桶的贮缅,跟傳統(tǒng)的DBMS系統(tǒng)一樣,通過(guò)表分區(qū)能夠在特定...
    原上野閱讀 3,036評(píng)論 0 0
  • 快樂(lè)大數(shù)據(jù)第5次課 hive(1)工作原理Hive的執(zhí)行入口是Driver介却,執(zhí)行的SQL語(yǔ)句首先提交到Drive驅(qū)...
    快樂(lè)大數(shù)據(jù)閱讀 412評(píng)論 0 0
  • Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具谴供,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,并提供類SQL查詢功能齿坷。本...
    felix521閱讀 1,310評(píng)論 0 0
  • 15年注冊(cè)的隨手記桂肌,中間斷斷續(xù)續(xù)的記賬。自從加入橙子學(xué)院的理財(cái)島之后永淌,持續(xù)每筆記賬崎场,看看錢到底花去何方? 記賬是第...
    原味的夏天寶寶閱讀 454評(píng)論 0 1