3 回答

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊
分區(qū)數(shù)據(jù)通常用于水平分布負(fù)載,這具有性能優(yōu)勢(shì),并有助于以邏輯方式組織數(shù)據(jù)。示例:如果我們處理的是一個(gè)大employee
表,并且經(jīng)常使用帶有WHERE
將結(jié)果限制到特定國(guó)家或地區(qū)的子句運(yùn)行查詢。為了獲得更快的查詢響應(yīng),Hive表可以是PARTITIONED BY (country STRING, DEPT STRING)
。分區(qū)表更改了Hive構(gòu)造數(shù)據(jù)存儲(chǔ)的方式,Hive現(xiàn)在將創(chuàng)建反映分區(qū)結(jié)構(gòu)的子目錄,例如
... /員工/ 國(guó)家 / 地區(qū)= ABC / DEPT = XYZ。
如果查詢來自雇員的限制country=ABC
,它將僅掃描一個(gè)目錄的內(nèi)容country=ABC
。僅當(dāng)分區(qū)方案反映通用篩選時(shí),這才能大大提高查詢性能。分區(qū)功能在Hive中非常有用,但是,創(chuàng)建過多分區(qū)的設(shè)計(jì)可能會(huì)優(yōu)化某些查詢,但會(huì)對(duì)其他重要查詢不利。另一個(gè)缺點(diǎn)是,分區(qū)過多是不必要地創(chuàng)建了大量的Hadoop文件和目錄,并給NameNode帶來了開銷,因?yàn)樗仨殞⑽募到y(tǒng)的所有元數(shù)據(jù)都保留在內(nèi)存中。
存儲(chǔ)桶是用于將數(shù)據(jù)集分解為更易于管理的部分的另一種技術(shù)。例如,假設(shè)一個(gè)表date
用作頂級(jí)分區(qū)和employee_id
第二級(jí)分區(qū)會(huì)導(dǎo)致太多的小分區(qū)。相反,如果我們對(duì)employee表進(jìn)行存儲(chǔ)并employee_id
用作存儲(chǔ)列,則該列的值將由用戶定義的數(shù)字散列到存儲(chǔ)桶中。具有相同記錄的記錄employee_id
將始終存儲(chǔ)在同一存儲(chǔ)桶中。假設(shè)的數(shù)量employee_id
遠(yuǎn)大于存儲(chǔ)桶的數(shù)量,則每個(gè)存儲(chǔ)桶將具有許多employee_id
。創(chuàng)建表時(shí),您可以指定如下CLUSTERED BY (employee_id) INTO XX BUCKETS;
其中XX是存儲(chǔ)桶數(shù)。桶裝有幾個(gè)優(yōu)點(diǎn)。桶的數(shù)量是固定的,因此它不會(huì)隨數(shù)據(jù)波動(dòng)。如果兩個(gè)表由進(jìn)行存儲(chǔ)employee_id
,則Hive可以創(chuàng)建邏輯上正確的采樣。桶也有助于進(jìn)行有效的地圖側(cè)聯(lián)接等。
- 3 回答
- 0 關(guān)注
- 1274 瀏覽
添加回答
舉報(bào)