步驟:建分區表、建臨時表、臨時表數據寫入、臨時表寫入數據到分區表
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='${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='${city}',sdate='${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會重寫數據,既先進行刪除,再寫入。
轉自:http://blog.sina.com.cn/s/blog_155cf0b760102x1ij.html