Hive程式設計指南---動態分割槽插入
阿新 • • 發佈:2019-02-19
Hive如果需要建立非常多的分割槽,那麼使用者就需要寫很多的SQL,Hive提供了一個動態分割槽功能,其可以基於查詢引數推斷需要建立的分割槽名稱
INSERT OVERWRITE TABEL employee
PARTITION(country,state)
SELECT .......se.cnty,se.st
FROM staged_employee se;
hive根據select語句中最後2列來確定分割槽欄位country和state的值
使用者也可以使用動態分割槽和靜態分割槽
INSERT OVERWRITE INTO TABLE employee
PARTITION (country = 'US',state)
SELECT ......se.cnty ,se,st
FROM staged_employee se
WHERE se.cnty='US'
靜態分割槽必須出現在動態分割槽之前
動態分割槽功能預設情況下是沒有開啟的。開啟後,預設是以"嚴格"模式執行的,這這種模式下要求至少有一列分割槽欄位是靜態的。
設定如下引數開啟動態分割槽: hive.exec.dynamic.partition=true預設值:false 描述:是否允許動態分割槽hive.exec.dynamic.partition.mode=nonstrict
預設值:strict 描述:strict是避免全分割槽欄位是動態的,必須有至少一個分割槽欄位是指定有值的
預設值:100 描述:each mapper or reducer可以建立的最大動態分割槽數hive.exec.max.dynamic.partitions=1000
預設值:1000 描述:一個DML操作可以建立的最大動態分割槽數hive.exec.max.created.files=100000
預設值:100000 描述:一個DML操作可以建立的檔案數設定如下引數取消一些限制(HIVE 0.7後沒有此限制): hive.merge.mapfiles=false
預設值:true 描述:是否合併Map的輸出檔案
預設值:false 描述:是否合併Reduce的輸出檔案