hive 請不要用動態分割槽(如果分割槽可以確定)

2021-07-04 12:24:35 字數 964 閱讀 8228

標籤: hive

2014-08-19 16:26

1892人閱讀收藏 

舉報

如果分割槽是可以確定的話,千萬不要用動態分割槽,動態分割槽的值是在reduce執行階段確定的.也就是會把所有的記錄distribute by。 可想而知表記錄非常大的話,只有乙個reduce 去處理,那簡直是瘋狂的。如果這個值唯一或者事先已經知道,比如按天分割槽(i_date=20140819) 那就用靜態分割槽吧。靜態分割槽在編譯階段已經確定,不需要reduce處理。 例如以下兩個insert 表分割槽:

1.插入動態分割槽:

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

insert overwrite table a_test partition (i_date)

select id, page, extract, label_count,weight,'20140817'

from b.test_b where request_date_i = '20140817';

2. 插入靜態分割槽:

insert overwrite table a_test partition (i_date='20140817')

select id, page, extract, label_count,weight

from b.test_b where request_date_i = '20140817';

當然選靜態分割槽insert:如果schedule的話,可以動態把i_date傳進去:比如:

insert overwrite table a_test partition (i_date='$')

select id, page, extract, label_count,weight

from b.test_b where request_date_i = '20140817';

關於為什麼這樣,請理解hive執行原理,參考:

HIVE分割槽,靜態分割槽,動態分割槽

分割槽可以大大提公升hive的效能,這裡就要提到數倉的分層 原始資料層,儲存原始收集的資料 數倉明細層,裡面做的是轉換和分析,裡面包含部分的資料清洗的過程 數倉服務層,對外業務的處理,如維度轉 鍵 身份證清洗 會員註冊 清晰 字段合併 空值處理 髒資料處理 ip清晰轉換等 最終業務層 適合做增量表,...

Hive 動態分割槽 靜態分割槽

本文 參考 hive預設是靜態分割槽。但是有時候可能需要動態建立不同的分割槽來區分不同的分類。hive中建立分割槽表沒有什麼複雜的分割槽型別 範圍分割槽 列表分割槽 hash分割槽 混合分割槽等 分割槽列也不是表中的乙個實際的字段,而是乙個或者多個偽列。意思是說在表的資料檔案中實際上並不儲存分割槽列...

HIVE動態分割槽

一 前段時間因為導表需求 從一張表中查詢出資料,按日期分割槽overwrite 到指定分割槽表中 在hive裡面研究了一下自動分割槽。步驟 1 建好所需分割槽表 2 設定分割槽引數?1 2 3 4 sethive.exec.dynamic.partition true 可通過這個語句檢視 sethi...