溫馨提示×

溫馨提示×

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

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

如何使用Hive動態分區表

發布時間:2021-10-12 14:11:02 來源:億速云 閱讀:223 作者:iii 欄目:編程語言

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

作用
如果我們按天去insert分區數據,那么我們可以去指定靜態分區的名稱去插入數據.但是當我們不能確定分區名稱時,便要使用動態分區去處理分區表.

實例
準備數據如下,為顧客數據.字段分別為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

我們把數據放入一張名為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
然后建立分區表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
我們使用靜態分區可能會執行如下的語句插入數據:

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
當分區數少的時候,我們可以采用這種方式去insert數據.當分區數過多或者分區名稱未知時,我們需要去使用動態分區.

hive參數配置
在使用動態分區之前,我們要進行一些參數的配置.

hive.exec.dynamic.partition
默認值:false

是否開啟動態分區功能,默認false關閉。

使用動態分區時候,該參數必須設置成true;

hive.exec.dynamic.partition.mode
默認值:strict

動態分區的模式,默認strict,表示必須指定至少一個分區為靜態分區,nonstrict模式表示允許所有的分區字段都可以使用動態分區。

一般需要設置為nonstrict

hive.exec.max.dynamic.partitions.pernode
默認值:100

在每個執行MR的節點上,最大可以創建多少個動態分區。

該參數需要根據實際的數據來設定。

比如:源數據中包含了一年的數據,即day字段有365個值,那么該參數就需要設置成大于365,如果使用默認值100,則會報錯。

hive.exec.max.dynamic.partitions
默認值:1000

在所有執行MR的節點上,最大一共可以創建多少個動態分區。

同上參數解釋。

hive.exec.max.created.files
默認值:100000

整個MR Job中,最大可以創建多少個HDFS文件。

一般默認值足夠了,除非你的數據量非常大,需要創建的文件數大于100000,可根據實際情況加以調整。

hive.error.on.empty.partition
默認值:false

當有空分區生成時,是否拋出異常。

一般不需要設置.

在設置完這些參數之后,我們可以執行如下的insert指令去使用動態分區

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
執行結果如下:

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
我們可以去查看這張表的分區情況:

show partitions t_part;
1
顯示分區的情況如下:

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

到此,關于“如何使用Hive動態分區表”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女