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

2021-06-17 22:29:47 字數 743 閱讀 9370

分割槽是在處理大型事實表時常用的方法。分割槽的好處在於縮小查詢掃瞄範圍,從而提高速度。分割槽分為兩種:靜態分割槽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命令進行插入操作。注意,除了所有列外,需要將分割槽的動態欄位跟在後面。

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

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

參考:

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

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

Hive中小表與大表關聯 join 的效能分析

經常看到一些hive優化的建議中說當小表與大表做關聯時,把小表寫在前面,這樣可以使hive的關聯速度更快,提到的原因都是說因為小表可以先放到記憶體中,然後大表的每條記錄再去記憶體中檢測,最終完成關聯查詢。這樣的原因看似合理,但是仔細推敲,又站不住腳跟。多小的表算小表?如果所謂的小表在記憶體中放不下怎...

Hive中小表與大表關聯 join 的效能分析

經常看到一些hive優化的建議中說當小表與大表做關聯時,把小表寫在前面,這樣可以使hive的關聯速度更快,提到的原因都是說因為小表可以先放到記憶體中,然後大表的每條記錄再去記憶體中檢測,最終完成關聯查詢。這樣的原因看似合理,但是仔細推敲,又站不住腳跟。多小的表算小表?如果所謂的小表在記憶體中放不下怎...