Hive使用動態分區插入數據


   往hive分區表中插入數據時,如果一張表的數據量非常大,需要按照日期分區,且將指定日期的數據插入到對應分區,如果使用進來分區一天一天的手工輸入,效率極低,故hive提供了一個動態分區功能,其可以基於查詢參數的位置去推斷分區的名稱,從而建立分區。

假如有兩張表臨時表 trade_detail_his 和目標表 Historical 表

create table Historical (Id string) partitioned by (dt string) row format delimited fields terminated by ',';

然后往目標表Historical 插入數據

SET hive.exec.dynamic.partition=true;                                    --開啟動態分區,默認是false
SET hive.exec.dynamic.partition.mode=nonstric;                           -- 開啟允許所有分區都是動態的,否則必須要有靜態分區才能使用。
insert into  Historical partition(dt)
select id  as id, product_code as dt from default.trade_detail_his;      --寫成多行數據insert進去,目前也在找原因中

查看分區信息

show partitions Historical ;

注意:

要點1:分區字段放在最后,且要按照順序寫。因為Historical 表中只有一個字段,所以當我們查詢了兩個字段時(多了dt字段),所以系統默認以最后一個字段dt為分區名,因為分區表的分區字段默認也是該表中的字段,且依次排在表中字段的最后面。所以分區需要分區的字段只能放在后面,不能把順序弄錯。如果我們查詢了三個字段的話,則會報錯,因為該表加上分區字段也才兩個個。要注意系統是根據查詢字段的位置推斷分區名的,而不是字段名稱。

要點2:字段類型保持一致,不然進去的數據會用null填充

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM