hive動態分割槽
阿新 • • 發佈:2019-01-28
hive靜態分割槽需要制定分割槽欄位的值插入分割槽資料,動態分割槽可以根據分割槽欄位的值自動插入對應分割槽。使用Hive的動態分割槽,需要進行相應的配置。
-- 設定成true,可以選擇GZip壓縮方式
set hive.exec.compress.output=true;
-- GZip壓縮方式具有很好的壓縮效果,減少I/O,GZip壓縮格式檔案是不允許被分割的
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
-- 是否開啟動態分割槽功能,預設false關閉。使用動態分割槽時候,該引數必須設定成true
set hive.exec.dynamic.partition=true;
-- 動態分割槽的模式,預設strict,表示必須指定至少一個分割槽為靜態分割槽,nonstrict模式表示允許所有的分割槽欄位都可以使用動態分割槽。
set hive.exec.dynamic.partition.mode=nonstrict;
-- 在所有執行MR的節點上,最大一共可以建立多少個動態分割槽
SET hive.exec.max.dynamic.partitions=100000;
-- 在每個執行MR的節點上,最大可以建立多少個動態分割槽
SET hive.exec.max.dynamic.partitions.pernode=100000 ;
INSERT overwrite TABLE stg_tmp.${hiveconf:TABLE_NAME} PARTITION (DAY,SOURCE)
SELECT *
FROM stg.${hiveconf:TABLE_NAME}
WHERE DAY=${hiveconf:CURRENT_DATE}
AND SOURCE=200
DISTRIBUTE BY rand();
-- DISTRIBUTE BY rand() 保證reduce中的資料隨機分配,大小大致相同、防止小檔案過多和資料傾斜