HIVE動態分割槽

2021-07-03 00:11:13 字數 2460 閱讀 2855

一、前段時間因為導表需求(從一張表中查詢出資料,按日期分割槽overwrite 到指定分割槽表中),在hive裡面研究了一下自動分割槽。

步驟:1、建好所需分割槽表

2、設定分割槽引數?

1

2

3

4

sethive.exec.dynamic.partition=true;(可通過這個語句檢視:sethive.exec.dynamic.partition;)

sethive.exec.dynamic.partition.mode=nonstrict;

sethive.exec.max.dynamic.partitions=100000;(如果自動分割槽數大於這個引數,將會報錯)

sethive.exec.max.dynamic.partitions.pernode=100000;

3、書寫**(特別注意:日期字段一定要放在末尾),例如: ?

12

3

4

5

6

7

insertoverwritetabledw_stage.ds_info_msg partition(cal_dt)

selectid

,...

,pv

,0  uv

,cal_dt

fromdw_stage.tiny_info_msg

二、如果要在partition欄位用函式處理也可通過通過這種方式實現;例如:

1

2

3

4

5

6

7

8

sethive.exec.dynamic.partition=true;

sethive.exec.dynamic.partition.mode=nostrick;

insertoverwritetabledw_stage.ds_info_msg partition(cal_dt)

selectid

,...

,pv

,date_sub('2014-03-23',7) cal_dt

fromdw_stage.tiny_info_msg07;

注意:

果分割槽是可以確定的話,千萬不要用動態分割槽,動態分割槽的值是在reduce執行階段確定的.也就是會把所有的記錄distribute by。 可想而知表記錄非常大的話,只有乙個reduce 去處理,那簡直是瘋狂的。如果這個值唯一或者事先已經知道,比如按天分割槽(i_date=20140819) 那就用靜態分割槽吧。靜態分割槽在編譯階段已經確定,不需要reduce處理。?

Hive動態分割槽

動態分割槽指不需要為不同的分割槽新增不同的插入語句,分割槽不確定,需要從資料中獲取。相關引數設定 set hive.exec dynamic partition true 使用動態分割槽 可通過這個語句檢視 set hive.exec dynamic partition set hive.exec ...

hive動態分割槽

不需要為不同的分割槽新增不同的插入語句 分割槽不確定,需要從資料中獲取 幾個引數 set hive.exec dynamic partition true 使用動態分割槽 set hive.exec dynamic partition mode nonstrick 無限制模式,如果模式是strict...

Hive動態分割槽

insert overwrite table part1 partition dt 2016 09 03 select from test datatest data表 idname 1liming 2jenny 3denny 上面 是往表的某乙個固定分割槽插入資料 但是當我們要插入的分割槽不確定的...