hive實現全自動動態分割槽

2021-10-12 07:37:38 字數 1358 閱讀 3405

我們在業務中往往會遇到一種情況就是:

現有的業務已經有很多的資料堆積,並且需要根據現有的資料以分割槽的形式來建立資料倉儲,這樣的話就需要將表中的乙個字段作為分割槽字段,以這個欄位的值作為分割槽的依據。

那麼就需要動態分割槽進行處理:

首先需要設定引數:

-- 表示開啟動態分割槽功能 (預設false)

set hive.exec.dynamic.partition =true

--(預設strict),表示允許所有分割槽都是動態的,否則必須有靜態分割槽字段

set hive.exec.dynamic.partition.mode = nonstrict

然後是可以調整的引數:(在這裡遇到過坑,分割槽數太多,超出預設限制)

set  hive.exec.max.dynamic.partitions.pernode=100 (預設100,一般可以設定大一點,比如1000)

表示每個maper或reducer可以允許建立的最大動態分割槽個數,預設是100,超出則會報錯。

set hive.exec.max.dynamic.partitions =1000(預設值)

表示乙個動態分割槽語句可以建立的最大動態分割槽個數,超出報錯

set hive.exec.max.created.files =10000(預設) 全域性可以建立的最大檔案個數,超出報錯。

設定完引數之後,將原有的資料對映成臨時表,將所有的字段對映進去,包括分割槽的字段。

然後設定分割槽表,跟臨時表少了乙個字段,就是分割槽的字段,

然後插入分割槽表,注意bdp_day是分割槽字段,在臨時表中的最後需要查詢出來,然後預設以臨時表的最後乙個字段作為分割槽字段,插入資料。

insert overwrite table ods_release.ods_01_release_session partition(bdp_day)

select

rel.release_session,

rel.release_status,

rel.device_num,

rel.device_type,

rel.sources,

rel.channels,

from_unixtime(rel.ct,'hh'),

from_unixtime(rel.ct,'yyyy-mm-dd hh:mm:ss'),

from_unixtime(rel.ct,'yyyy-mm-dd') as bdp_day

from

ods_release.ods_01_release_session_tmp rel

這樣就將bdp_day的值作為分割槽的值,分成多個分割槽儲存,也就是在hdfs中分成了多個目錄進行儲存。

hive實現全自動動態分割槽

我們在業務中往往會遇到一種情況就是 現有的業務已經有很多的資料堆積,並且需要根據現有的資料以分割槽的形式來建立資料倉儲,這樣的話就需要將表中的乙個字段作為分割槽字段,以這個欄位的值作為分割槽的依據。那麼就需要動態分割槽進行處理 首先需要設定引數 表示開啟動態分割槽功能 預設false set hiv...

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 ...