- 為什么做分區(qū)
分區(qū)表將數(shù)據(jù)組織成分區(qū)层释,主要可以提高數(shù)據(jù)的查詢(xún)速度昔脯。
如果把一年或者一個(gè)月的日志文件存放在一個(gè)表下,那么數(shù)據(jù)量會(huì)非常的大放刨,當(dāng)查詢(xún)這個(gè)表中某一天的日志文件的時(shí)候工秩,查詢(xún)速度還非常的慢,這時(shí)候可以采用分區(qū)表的方式进统,把這個(gè)表根據(jù)時(shí)間點(diǎn)再劃分為小表助币。這樣劃分后,查詢(xún)某一個(gè)時(shí)間點(diǎn)的日志文件就會(huì)快很多螟碎,因?yàn)檫@是不需要進(jìn)行全表掃描眉菱。
Hive中的分區(qū)是根據(jù)“分區(qū)列”的值對(duì)表的數(shù)據(jù)進(jìn)行粗略的劃分,Hive中一個(gè)表對(duì)應(yīng)一個(gè)目錄掉分,再根據(jù)分區(qū)列在這個(gè)表目錄下創(chuàng)建子目錄俭缓,每個(gè)子目錄名就是分區(qū)列的名字。分區(qū)列定義與表中字段相似酥郭,但是與表中的字段無(wú)關(guān)华坦,是獨(dú)立的列。這樣就加快了數(shù)據(jù)查詢(xún)的速度不从,因?yàn)椴粫?huì)對(duì)這個(gè)表中進(jìn)行全盤(pán)掃描了季春。
- 如何做分區(qū)
(1)建表語(yǔ)句
create table if not exists latte_d_test
(
uid string comment "用戶(hù)ID",
vld_flg string comment "該條記錄是否有效,1-有效消返,0-無(wú)效"
)
COMMENT "test表"
PARTITIONED BY (day STRING);
(2)設(shè)置分區(qū)表參數(shù)
set hive.exec.dynamic.partition = true;
設(shè)置為true表示開(kāi)啟動(dòng)態(tài)分區(qū)功能(默認(rèn)為false)载弄。
set hive.exec.dynamic.partition.mode = nonstrict;
設(shè)置為nonstrict,表示允許所有分區(qū)都是動(dòng)態(tài)的(默認(rèn)為strict)撵颊。
(3)插入數(shù)據(jù)
insert overwrite table latte_d_test partition(day)
select uid,
'1',
'2016-10-10'
from test