關係型資料庫中,對分割槽表 insert 資料時候,資料庫自動會根據分割槽欄位的值,將資料插入到相應的分割槽中,hive 中也提供了類似的機制,即動態分割槽(dynamic partition),只不過,使用 hive 的動態分割槽,需要進行相應的配置。
1、開啟動態分割槽引數設定
(1)開啟動態分割槽功能(預設 true,開啟)
hive.exec.dynamic.partition=true
(2)設定為非嚴格模式
動態分割槽的模式,預設 strict,表示必須指定至少乙個分割槽為 靜態分割槽,nonstrict 模式表示允許所有的分割槽欄位都可以使用動態分割槽。
hive.exec.dynamic.partition.mode=nonstrict
(3)在所有執行 mr 的節點上,最大一共可以建立多少個動態分割槽。
hive.exec.max.dynamic.partitions=1000
(4)在每個執行 mr 的節點上,最大可以建立多少個動態分割槽
該引數需要根據實際 的資料來設定。比如:源資料中包含了一年的資料,即 day 欄位有 365 個值,那麼該引數就 需要設定成大於 365,如果使用預設值 100,則會報錯。
hive.exec.max.dynamic.partitions.pernode=100
(5)整個 mr job 中,最大可以建立多少個 hdfs 檔案。
hive.exec.max.created.files=100000
(6)當有空分割槽生成時,是否丟擲異常。一般不需要設定。
hive.error.on.empty.partition=false
2、案例
(1)建立分割槽表
create table ori_partitioned(
id bigint,
time bigint,
uid string,
keyword string,
url_rank int,
click_num int,
click_url string
)partitioned by (pkeyword string)
row format delimited fields terminated by '\t';
(2)設定動態分割槽
set hive.exec.dynamic.partition = true;
set hive.exec.dynamic.partition.mode = nonstrict;
set hive.exec.max.dynamic.partitions = 1000;
set hive.exec.max.dynamic.partitions.pernode = 100;
set hive.exec.max.created.files = 100000;
set hive.error.on.empty.partition = false;
匯入資料:
insert overwrite table ori_partitioned partition (pkeyword)
select id, time, uid, keyword, url_rank, click_num, click_url,
keyword as pkeyword
from ori;
注意:insert overwrite table ori_partitioned partition (pkeyword) 中的pkeyword必須叫pkeyword,否則報錯。
(3)檢視目標分割槽表的分割槽情況
Hive 分割槽之靜態與動態分割槽
hive 分割槽之動態靜態分割槽 hive 分割槽 盡量不要用動態分割槽,因為動態分割槽的時候,將會為每乙個分割槽分配reducer數量,當分割槽數量多的時候,reducer數量將會增加,對伺服器是一種災難。動態分割槽和靜態分割槽的區別,靜態分割槽不管有沒有資料都將會建立該分割槽,動態分割槽是有結果...
HIVE動態分割槽
一 前段時間因為導表需求 從一張表中查詢出資料,按日期分割槽overwrite 到指定分割槽表中 在hive裡面研究了一下自動分割槽。步驟 1 建好所需分割槽表 2 設定分割槽引數?1 2 3 4 sethive.exec.dynamic.partition true 可通過這個語句檢視 sethi...
Hive動態分割槽
動態分割槽指不需要為不同的分割槽新增不同的插入語句,分割槽不確定,需要從資料中獲取。相關引數設定 set hive.exec dynamic partition true 使用動態分割槽 可通過這個語句檢視 set hive.exec dynamic partition set hive.exec ...