為分區導入數據(手動設置分區)
insert overwrite table 表名 partition(分區字段='分區名')
select
……
from 表名 where 分區字段 = '分區名';
動態分區
Hive默認是 靜態分區,我們在插入數據的時候要手動設置分區,如果源數據量很大的時候,那么針對一個分區就要寫一個insert,
比如說,有很多我們日志數據,我們要按日期作為分區字段,在插入數據的時候手動去添加分區,那樣太麻煩。
因此,Hive提供了動態分區,動態分區簡化了我們插入數據時的繁瑣操作。
--設置參數動態分區
--開啟動態分區
set hive.exec.dynamic.partition=true;
--這個屬性默認是strict,即限制模式,strict是避免全分區字段是動態的,必須至少一個分區字段是指定有值即靜態的,且必
--須放在最前面。設置為nonstrict之后所有的分區都可以是動態的了。
set hive.exec.dynamic.partition.mode=nonstrict;
------------------------------------------------------------------------
--表示每個節點生成動態分區的最大個數,默認是100
set hive.exec.max.dynamic.partitions.pernode=10000;
--表示一個DML操作可以創建的最大動態分區數,默認是1000
set hive.exec.max.dynamic.partitions=100000;
--表示一個DML操作可以創建的最大文件數,默認是100000
set hive.exec.max.created.files=150000;
--將select數據,覆蓋到表的動態分區
insert overwrite table table1 partition (ds, hr)
select key, value, ds, hr FROM table2 WHERE ds is not null;