溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何使用Hive動(dòng)態(tài)分區(qū)表

發(fā)布時(shí)間:2021-10-12 14:11:02 來源:億速云 閱讀:188 作者:iii 欄目:編程語言

這篇文章主要介紹“如何使用Hive動(dòng)態(tài)分區(qū)表”,在日常操作中,相信很多人在如何使用Hive動(dòng)態(tài)分區(qū)表問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何使用Hive動(dòng)態(tài)分區(qū)表”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

作用
如果我們按天去insert分區(qū)數(shù)據(jù),那么我們可以去指定靜態(tài)分區(qū)的名稱去插入數(shù)據(jù).但是當(dāng)我們不能確定分區(qū)名稱時(shí),便要使用動(dòng)態(tài)分區(qū)去處理分區(qū)表.

實(shí)例
準(zhǔn)備數(shù)據(jù)如下,為顧客數(shù)據(jù).字段分別為id,name,orderdate.

1,jack,2016/11/11
2,michael,2016/11/12
3,summer,2016/11/13
4,spring,2016/11/14
5,nero,2016/11/15
6,book,2016/12/21
7,node,2016/12/22
8,tony,2016/12/23
9,green,2016/12/24
10,andy,2016/12/25
11,kaith,2016/12/26
12,spring,2016/12/27
13,andy,2016/12/28
14,tony,2016/12/29
15,green,2016/12/30
16,andy,2016/12/31
17,kaith,2017/1/1
18,xiaoming,2017/1/2

我們把數(shù)據(jù)放入一張名為t_temp的表中.

create table t_temp(id int,name string,orderdate string)
row format delimited
fields terminated by ',';

load date local inpath '/home/spark/jar/testdata/Customer.txt' into table t_temp;
1
2
3
4
5
然后建立分區(qū)表t_part

create table if not exists t_part
(id int ,name string ,orderdate string)
partitioned by (year string,month string)
row format delimited 
fields terminated by ',';
1
2
3
4
5
我們使用靜態(tài)分區(qū)可能會(huì)執(zhí)行如下的語句插入數(shù)據(jù):

insert into t_part partition(year = '2016',month = '12')
select id,name,orderdate from t_temp
where substring(orderdate,1,7) = '2016/12'
1
2
3
當(dāng)分區(qū)數(shù)少的時(shí)候,我們可以采用這種方式去insert數(shù)據(jù).當(dāng)分區(qū)數(shù)過多或者分區(qū)名稱未知時(shí),我們需要去使用動(dòng)態(tài)分區(qū).

hive參數(shù)配置
在使用動(dòng)態(tài)分區(qū)之前,我們要進(jìn)行一些參數(shù)的配置.

hive.exec.dynamic.partition
默認(rèn)值:false

是否開啟動(dòng)態(tài)分區(qū)功能,默認(rèn)false關(guān)閉。

使用動(dòng)態(tài)分區(qū)時(shí)候,該參數(shù)必須設(shè)置成true;

hive.exec.dynamic.partition.mode
默認(rèn)值:strict

動(dòng)態(tài)分區(qū)的模式,默認(rèn)strict,表示必須指定至少一個(gè)分區(qū)為靜態(tài)分區(qū),nonstrict模式表示允許所有的分區(qū)字段都可以使用動(dòng)態(tài)分區(qū)。

一般需要設(shè)置為nonstrict

hive.exec.max.dynamic.partitions.pernode
默認(rèn)值:100

在每個(gè)執(zhí)行MR的節(jié)點(diǎn)上,最大可以創(chuàng)建多少個(gè)動(dòng)態(tài)分區(qū)。

該參數(shù)需要根據(jù)實(shí)際的數(shù)據(jù)來設(shè)定。

比如:源數(shù)據(jù)中包含了一年的數(shù)據(jù),即day字段有365個(gè)值,那么該參數(shù)就需要設(shè)置成大于365,如果使用默認(rèn)值100,則會(huì)報(bào)錯(cuò)。

hive.exec.max.dynamic.partitions
默認(rèn)值:1000

在所有執(zhí)行MR的節(jié)點(diǎn)上,最大一共可以創(chuàng)建多少個(gè)動(dòng)態(tài)分區(qū)。

同上參數(shù)解釋。

hive.exec.max.created.files
默認(rèn)值:100000

整個(gè)MR Job中,最大可以創(chuàng)建多少個(gè)HDFS文件。

一般默認(rèn)值足夠了,除非你的數(shù)據(jù)量非常大,需要?jiǎng)?chuàng)建的文件數(shù)大于100000,可根據(jù)實(shí)際情況加以調(diào)整。

hive.error.on.empty.partition
默認(rèn)值:false

當(dāng)有空分區(qū)生成時(shí),是否拋出異常。

一般不需要設(shè)置.

在設(shè)置完這些參數(shù)之后,我們可以執(zhí)行如下的insert指令去使用動(dòng)態(tài)分區(qū)

set hive.exec.dynamic.partition = true;
set hive.exec.dynamic.partition.mode = nonstrict;
insert overwrite table t_part partition(year,month)
select id,name,orderdate,substring(orderdate,1,4),substring(orderdate,6,2) from t_temp;
1
2
3
4
執(zhí)行結(jié)果如下:

Loading data to table test_neil.t_part partition (year=null, month=null)
     Time taken for load dynamic partitions : 651
    Loading partition {year=2016, month=12}
    Loading partition {year=2017, month=01}
    Loading partition {year=2016, month=11}
     Time taken for adding to write entity : 1
Partition test_neil.t_part{year=2016, month=11} stats: [numFiles=1, numRows=5, totalSize=97, rawDataSize=92]
Partition test_neil.t_part{year=2016, month=12} stats: [numFiles=1, numRows=11, totalSize=210, rawDataSize=199]
Partition test_neil.t_part{year=2017, month=01} stats: [numFiles=1, numRows=2, totalSize=43, rawDataSize=41]
1
2
3
4
5
6
7
8
9
我們可以去查看這張表的分區(qū)情況:

show partitions t_part;
1
顯示分區(qū)的情況如下:

partition
year=2016/month=11
year=2016/month=12
year=2017/month=01
year=__HIVE_DEFAULT_PARTITION__/month=__HIVE_DEFAULT_PARTITION__
1
2
3
4
5

到此,關(guān)于“如何使用Hive動(dòng)態(tài)分區(qū)表”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI