hive之insert導入分區數據


 

 

數據庫分區的主要目的是為了在特定的SQL操作中減少數據讀寫的總量以縮減響應時間,主要包括兩種分區形式:水平分區與垂直分區。水平分區是對表進行行分區。而垂直分區是對列進行分區,一般是通過對表的垂直划分來減少目標表的寬度,常用的是水平分區。

 

1、分區參數介紹

 
  • hive.exec.dynamic.partition:是否啟動動態分區。默認false。

  • hive.exec.dynamic.partition.mode:打開動態分區后,動態分區的模式為strict和nonstrict。

    • strict可設置為靜態和半動態,要求至少包含一個靜態分區列。

    • nonstrict可設置為靜態、半動態和動態,動態必須設置此參數。

  • hive.exec.max.dynamic.partitions:允許的最大的動態分區的個數。默認1000。

  • hive.exec.max.dynamic.partitions.pernode:一個mapreduce job所允許的最大的動態分區的個數。默認是100。

 

2、分區表的創建

 

(1)分區表創建

 
create table test.user_list(
user_id  string,
msisdn   string,
imsi     string)
partitioned by (city string,sdate string)
row format delimited fields terminated by ',';
 

(2)臨時表創建(輔助分區表測試)

 
create table test.user_list_tmp(
user_id  string,
msisdn   string,
imsi     string
city     string,
sdate    string)
row format delimited fields terminated by ',';
 

3、數據插入方式

 

(1)靜態分區插入數據:

 
insert into table user_list partition(city='HANGZHOU',sdate='20200101')   
select 
    t.user_id,
    t.msisdn,
    t.imsi
from test.user_list_tmp t
 

(2)動靜混合分區插入數據

 
set hive.exec.dynamic.partition=true;  
set hive.exec.dynamic.partition.mode=strick;
--set hive.exec.dynamic.partition.mode=nonstrick;
insert into table user_list partition(city='HANGZHOU',sdate)   
select 
    t.user_id,
    t.msisdn,
    t.imsi,
    t.sdate
from test.user_list_tmp t
 

注意:動靜分區混合時,靜態分區參數必須放置在前面。

 

(3)動態分區插入數據

 
set hive.exec.dynamic.partition=true;  
set hive.exec.dynamic.partition.mode=nonstrick;
insert into table user_list partition(city,sdate)   
select 
    t.user_id,
    t.msisdn,
    t.imsi,
    t.city,
    t.sdate
from test.user_list_tmp t
 

4、insert into 和 insert overwrite

 

insert into示例:

 
insert into table user_list partition(city='HANGZHOU',sdate='20200101')  
select 
    t.user_id,
    t.msisdn,
    t.imsi
from test.user_list_tmp t
 

insert overwrite示例:

 
insert overwrite table user_list partition(city='HANGZHOU',sdate='20200101')   
select 
    t.user_id,
    t.msisdn,
    t.imsi
from test.user_list_tmp t
 

兩者區別:insert into直接追加到表中數據的尾部,而insert overwrite會重寫數據,既先進行刪除,再寫入。


免責聲明!

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



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