1. 程式人生 > >對現有Hive的大表進行動態分割槽

對現有Hive的大表進行動態分割槽

分割槽是在處理大型事實表時常用的方法。分割槽的好處在於縮小查詢掃描範圍,從而提高速度。分割槽分為兩種:靜態分割槽static partition和動態分割槽dynamic partition。靜態分割槽和動態分割槽的區別在於匯入資料時,是手動輸入分割槽名稱,還是通過資料來判斷資料分割槽。對於大資料批量匯入來說,顯然採用動態分割槽更為簡單方便。

- 對現存hive表的分割槽

首先,新建一張我們需要的分割槽以後的表create table like 'origin'

若現存hive表中沒有分割槽資訊,我們需要手動修改hive配置資料庫來增加hive表的分割槽資訊。hive表分割槽存在PARTITION_KEYS資料表中,其中表項的| TBL_ID | PKEY_COMMENT | PKEY_NAME | PKEY_TYPE | INTEGER_IDX |分別是hive表名(在TBLS中儲存),備註,分割槽名,分割槽索引的順序。建立完成後我們就有一張類似於原始表,但是帶有分割槽的表。

然後,我們修改一下hive的預設設定以支援動態分割槽:

set hive.exec.dynamic.partition=true;

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

第二步僅在你僅使用動態分割槽欄位做分割槽索引時。

然後用hive的insert命令進行插入操作。注意,除了所有列外,需要將分割槽的動態欄位跟在後面。

INSERT OVERWRITE TABLE target PARTITION (dt) 
SELECT id,user_id,app_id,time,ip,substr(time,0,10) FROM origin 

可以看到,動態分割槽的欄位支援函式操作。

這樣,我們得到了一張分割槽後的hive大表。