Hive的分區(qū)表和分桶表的區(qū)別

本文鏈接:https://blog.csdn.net/JENREY/article/details/80588493

1蜘腌,Hive分區(qū)安拟。

???? 是指按照數(shù)據(jù)表的某列或某些列分為多個區(qū),區(qū)從形式上可以理解為文件夾训裆,比如我們要收集某個大型網(wǎng)站的日志數(shù)據(jù),一個網(wǎng)站每天的日志數(shù)據(jù)存在同一張表上,由于每天會生成大量的日志酪刀,導(dǎo)致數(shù)據(jù)表的內(nèi)容巨大,在查詢時進行全表掃描耗費的資源非常多钮孵。那其實這個情況下骂倘,我們可以按照日期對數(shù)據(jù)表進行分區(qū),不同日期的數(shù)據(jù)存放在不同的分區(qū)巴席,在查詢時只要指定分區(qū)字段的值就可以直接從該分區(qū)查找历涝。

下面從用shell命令操作分區(qū)表和從hdfs文件系統(tǒng)查看分區(qū)表相結(jié)合的方式加深對分區(qū)表的認識。

第一漾唉,創(chuàng)建分區(qū)表并將本地文件中的數(shù)據(jù)加載到分區(qū)表中荧库。

要注意的是:首先,創(chuàng)建分區(qū)表的時候赵刑,要通過關(guān)鍵字 partitioned by (name? string)聲明該表是分區(qū)表分衫,并且是按照字段name進行分區(qū),name值一致的所有記錄存放在一個分區(qū)中般此,分區(qū)屬性name的類型是string類型蚪战。當然,可以依據(jù)多個列進行分區(qū)铐懊,即對某個分區(qū)的數(shù)據(jù)按照某些列繼續(xù)分區(qū)邀桑。

其次,向分區(qū)表導(dǎo)入數(shù)據(jù)的時候科乎,要通過關(guān)鍵字partition(name=“jack”)顯示聲明數(shù)據(jù)要導(dǎo)入到表的哪個分區(qū)壁畸,這里表示要將數(shù)據(jù)導(dǎo)入到分區(qū)為name=jack的分區(qū)。

再次喜喂,這里要重點強調(diào)瓤摧,所謂分區(qū)竿裂,這是將滿足某些條件的記錄打包,做個記號照弥,在查詢時提高效率腻异,相當于按文件夾對文件進行分類,文件夾名可類比分區(qū)字段这揣。這個分區(qū)字段形式上存在于數(shù)據(jù)表中悔常,在查詢時會顯示到客戶端上,但并不真正在存儲在數(shù)據(jù)表文件中给赞,是所謂偽列机打。所以,千萬不要以為是對屬性表中真正存在的列按照屬性值的異同進行分區(qū)片迅。比如上面的分區(qū)依據(jù)的列name并不真正的存在于數(shù)據(jù)表中残邀,是我們?yōu)榱朔奖愎芾硖砑拥囊粋€偽列,這個列的值也是我們?nèi)藶橐?guī)定的柑蛇,不是從數(shù)據(jù)表中讀取之后根據(jù)值的不同將其分區(qū)芥挣。我們并不能按照某個數(shù)據(jù)表中真實存在的列,如userid來分區(qū)耻台。

第二空免,查看分區(qū)表目錄:

通過如下命令查看分區(qū)表在文件系統(tǒng)中的存儲路徑,我們會發(fā)現(xiàn)分區(qū)所依據(jù)的列反應(yīng)在文件路徑上盆耽,上面安裝name=“jack”分區(qū)蹋砚,實際上是創(chuàng)建了一個文件夾名為name=jack,并將該此導(dǎo)入的數(shù)據(jù)放置該在文件夾下面摄杂。

大家會發(fā)現(xiàn)坝咐,在下圖中當我們使用cat命令查看文件內(nèi)容時,會發(fā)現(xiàn)這個偽列也有顯示在客戶端匙姜,這其實只是顯示的一種效果而已畅厢,后面我們會同hdfs文件系統(tǒng)查看文件內(nèi)容,會發(fā)現(xiàn)文件中其實沒有真正存儲這列數(shù)據(jù)氮昧。

第三,查看分區(qū)數(shù)據(jù):

分區(qū)的目的就是提高查詢效率浦楣,查詢分區(qū)數(shù)據(jù)的方式就是指定分區(qū)名袖肥,指定分區(qū)名之后就不再全表掃描,直接從指定分區(qū)(如name=jack的分區(qū))中查詢振劳,從hdfs的角度看就是從相應(yīng)的文件系統(tǒng)中(如name=jack文件夾下)去查找特定的數(shù)據(jù)椎组。如下圖所示:

第四,查看分區(qū)信息:

第五历恐,向分區(qū)中插入數(shù)據(jù):

在這個操作中寸癌,我們就可以驗證分區(qū)所依據(jù)的列其實是一個偽列专筷,如果你要從具有相同結(jié)構(gòu)的分區(qū)表中導(dǎo)入數(shù)據(jù),會失敗蒸苇。比如兩個分區(qū)表磷蛹,都有兩個真實的列和一個分區(qū)列(偽列),我們要將一個分區(qū)表中的數(shù)據(jù)導(dǎo)入到另一個分區(qū)表溪烤,會報錯味咳。錯誤信息顯示要導(dǎo)入的表只有兩列(偽列不記在內(nèi),這說明其實數(shù)據(jù)表文件中只有兩列)檬嘀,而源表卻有三列(將偽列計算在類)槽驶,我覺得這是一個bug。



2鸳兽,分桶掂铐。

分桶是相對分區(qū)進行更細粒度的劃分。分桶將整個數(shù)據(jù)內(nèi)容安裝某列屬性值得hash值進行區(qū)分揍异,如要安裝name屬性分為3個桶全陨,就是對name屬性值的hash值對3取摸,按照取模結(jié)果對數(shù)據(jù)分桶蒿秦。如取模結(jié)果為0的數(shù)據(jù)記錄存放到一個文件烤镐,取模為1的數(shù)據(jù)存放到一個文件,取模為2的數(shù)據(jù)存放到一個文件棍鳖。

第一炮叶,如何分桶:

注意:第一,分桶之前要執(zhí)行命令hive.enforce.bucketiong=true;

第二渡处,要使用關(guān)鍵字clustered by 指定分區(qū)依據(jù)的列名镜悉,還要指定分為多少桶,這里指定分為3桶医瘫。

第三侣肄,與分區(qū)不同的是,分區(qū)依據(jù)的不是真實數(shù)據(jù)表文件中的列醇份,而是我們指定的偽列稼锅,但是分桶是依據(jù)數(shù)據(jù)表中真實的列而不是偽列。所以在指定分區(qū)依據(jù)的列的時候要指定列的類型僚纷,因為在數(shù)據(jù)表文件中不存在這個列矩距,相當于新建一個列。而分桶依據(jù)的是表中已經(jīng)存在的列怖竭,這個列的數(shù)據(jù)類型顯然是已知的锥债,所以不需要指定列的類型。

第二,向桶中插入數(shù)據(jù):

第三哮肚,查看桶信息:

由上圖可知分3個桶就是將數(shù)據(jù)表由一個文件存儲分為3個文件存儲登夫。

第四,查看分桶數(shù)據(jù):

要指定關(guān)鍵字tablesample允趟。



3恼策,分區(qū)又分桶。

可以對數(shù)據(jù)表分區(qū)之后繼續(xù)分桶拼窥。

但是分區(qū)之后繼續(xù)分桶戏蔑,我們在hdfs文件系統(tǒng)上看不出分桶的多個數(shù)據(jù)表文件,只能看見一個文件鲁纠,但是能從文件路徑上看出分區(qū)的信息总棵。

看看分區(qū)又分桶的查詢結(jié)果:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市改含,隨后出現(xiàn)的幾起案子情龄,更是在濱河造成了極大的恐慌,老刑警劉巖捍壤,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骤视,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹃觉,警方通過查閱死者的電腦和手機专酗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盗扇,“玉大人祷肯,你說我怎么就攤上這事×屏ィ” “怎么了佑笋?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長斑鼻。 經(jīng)常有香客問我蒋纬,道長,這世上最難降的妖魔是什么坚弱? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任蜀备,我火速辦了婚禮,結(jié)果婚禮上荒叶,老公的妹妹穿的比我還像新娘琼掠。我一直安慰自己,他們只是感情好停撞,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布吝秕。 她就那樣靜靜地躺著,像睡著了一般笛钝。 火紅的嫁衣襯著肌膚如雪议经。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天埋市,我揣著相機與錄音冠桃,去河邊找鬼。 笑死道宅,一個胖子當著我的面吹牛食听,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播污茵,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼樱报,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了泞当?” 一聲冷哼從身側(cè)響起迹蛤,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎襟士,沒想到半個月后盗飒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡陋桂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年逆趣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嗜历。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡宣渗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秸脱,到底是詐尸還是另有隱情落包,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布摊唇,位于F島的核電站咐蝇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏巷查。R本人自食惡果不足惜有序,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望岛请。 院中可真熱鬧旭寿,春花似錦、人聲如沸崇败。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缩膝,卻和暖如春混狠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背疾层。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工将饺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痛黎。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓予弧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親湖饱。 傳聞我的和親對象是個殘疾皇子掖蛤,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

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