1. 程式人生 > >Hive程式設計指南---動態分割槽插入

Hive程式設計指南---動態分割槽插入

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是避免全分割槽欄位是動態的,必須有至少一個分割槽欄位是指定有值的
設定如下引數配置動態分割槽的使用環境: hive.exec.max.dynamic.partitions.pernode=100
預設值: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的輸出檔案
hive.merge.mapredfiles=false
預設值:false 描述:是否合併Reduce的輸出檔案