Hive如何根據表中某個字段動態分割槽

2021-09-23 20:27:26 字數 1699 閱讀 2527

使用hive儲存資料時,需要對做分割槽,如果從kafka接收資料,將每天的資料儲存乙個分割槽(按天分割槽),儲存分割槽時需要根據某個欄位做動態分割槽,而不是傻傻的將資料寫到某乙個臨時目錄最後倒入到某乙個分割槽,這是靜態分割槽。

動態分割槽的核心就是修改兩個配置項。

hive動態分割槽步驟如下:

1、建立某乙個源表模擬資料來源並插入一些資料

create table t_test_p_source (

id string,

name string,

birthday string

) row format delimited fields terminated by '\t'

stored as textfile;

insert into t_test_p_source values ('a1', 'zhangsan', '2018-01-01');

insert into t_test_p_source values ('a2', 'lisi', '2018-01-02');

insert into t_test_p_source values ('a3', 'zhangsan', '2018-01-03');

insert into t_test_p_source values ('a4', 'wangwu', '2018-01-04');

insert into t_test_p_source values ('a5', 'sanzang', '2018-01-05');

insert into t_test_p_source values ('a6', 'zhangsan2', '2018-01-01');

2、建立一張分割槽表 (按birthday欄位分割槽)

create table t_test_p_target (

id string,

name string

)partitioned by (birthday string)

row format delimited fields terminated by '\t'

stored as textfile;

3、向分割槽表中插入資料

set hive.exec.dynamic.partition=true;   #是否開啟動態分割槽,預設是false,所以必須要設定成true

set hive.exec.dynamic.partition.mode=nonstrict; # 動態分割槽模式,預設為strict, 表示表中必須乙個分割槽為靜態分割槽,nostrict表示允許所有欄位都可以作為動態分割槽

insert into table t_test_p_target partition (birthday) select id, name, birthday from t_test_p_source;

4、測試是否動態分割槽了

2018-01-01這個分割槽只有2條資料,再來看下hdfs上的分割槽目錄

至此,hive動態分割槽已經完成了。

Hive如何根據表中某個字段動態分割槽

匯入資料 create external table if not exists behivour id int,account id int,types int,watch from int,product id int,duration int,create time string row fo...

hive中如何查詢除了其中某個字段剩餘所有字段

想要將hive分割槽表中的某個分割槽複製到新的分割槽中,使用如下sql語句 insert overwrite table zcfw sda.sda04 core request base ratio ifrs partition etl tx dt 20190327 select from zcfw...

treeview 讀取SQL表中某個字段

var index integer strfzyw string treenode ttreenode begin strfzyw main fm.rzstatuspane2.caption if rzpagecontrol1.activepage tabsheet2 then begin with...