分割槽是在處理大型事實表時常用的方法。分割槽的好處在於縮小查詢掃瞄範圍,從而提高速度。分割槽分為兩種:靜態分割槽static partition和動態分割槽dynamic partition。靜態分割槽和動態分割槽的區別在於匯入資料時,是手動輸入分割槽名稱,還是通過資料來判斷資料分割槽。對於大資料批量匯入來說,顯然採用動態分割槽更為簡單方便。
對現存hive表的分割槽
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.dynamic.partitions.pernode=50000;
set hive.exec.dynamic.partitions.partitions=50000;
set hive.exec.max.created.files=500000;
set mapred.reduce.tasks =20000;
set hive.merge.mapfiles=true;
drop
table itemset;
create
table itemset(
auctions string)
partitioned by (category_id string)
row format delimited
fields terminated by
'\t'
stored as textfile
location '/data/itemset';
insert overwrite table itemset partition(category_id)
select auctions, category_id from source_table distribute by category_id;
注意首先需要在hive語句中設定允許動態分割槽。即:
set hive.exec
.dynamic
.partition=true;
set hive.exec
.dynamic
.partition
.mode=nonstrict;
但是這還不夠,在動態分割槽有可能很大的情況下,還需要其他的調整:
hive.exec.dynamic.partitions.pernode 引數指的是每個節點上能夠生成的最大分割槽,這個在最壞情況下應該是跟最大分割槽一樣的值
hive.exec.dynamic.partitions.partitions 引數指的是總共的最大的動態分割槽數
hive.exec.max.created.files 引數指的是能夠建立的最多檔案數(分割槽一多,檔案必然就多了…)
最後要注意的是select語句中要把distribute的key也select出來
對現有Hive的大表進行動態分割槽
分割槽是在處理大型事實表時常用的方法。分割槽的好處在於縮小查詢掃瞄範圍,從而提高速度。分割槽分為兩種 靜態分割槽static partition和動態分割槽dynamic partition。靜態分割槽和動態分割槽的區別在於匯入資料時,是手動輸入分割槽名稱,還是通過資料來判斷資料分割槽。對於大資料批...
hive 動態分割槽表
注意 1 並不是都要建輔助表,因為是用load的方式載入資料,所以才要建 2 select 的時候,分割槽欄位要寫在最後面 使用動態分割槽表必須配置的引數 設定為true允許使用dynamic partition hive.exec.dynamic.partition 預設false 設定dynam...
指定動態分割槽 hive分割槽表
1.建立分割槽表 create external table if not exists table1 col1 string,col2 string partitioned by state string,country string row format delimited fields ter...