使用動態分割槽插入資料時,無需指定分割槽鍵值,系統根據插入的資料,自動分配分割槽。
動態分割槽需注意以下幾點:
需有乙個同構的普通表做為源表;
分割槽鍵值和源表字段之間是根據位置來判斷的,而不是根據命名來匹配的,分割槽鍵值一般對應select後的最後乙個字段;
動態分割槽預設是關閉的,使用前要設定相關引數;
下面是乙個動態分割槽的例子:
# 建立分割槽表和普通表
create
table myhive.student_dynamic_partition
( stu_no int
, stu_name string
) partitioned by
(class_no int
)row format delimited fields
terminated
by' '
;create
table myhive.student
( stu_no int
, stu_name string,
class_no int
)row format delimited fields
terminated
by' '
;# 上傳資料檔案到hdfs
[hadoop@node01 hivedata]$ hdfs dfs -put student.txt /
[hadoop@node01 hivedata]$ hdfs dfs -cat /student.txt
1001 john 1
1002 susan 1
1003 smith 2
1004 tom 2
1005 simen 3
# 普通表匯入資料
hive (myhive)
>
load
data inpath '/student.txt' overwrite into
table student;
hive (myhive)
>
select
*from student;
student.stu_no student.stu_name student.class_no
1001 john 1
1002 susan 1
1003 smith 2
1004 tom 2
1005 simen 3
# 使用動態分割槽插入資料到分割槽表中
hive (myhive)
>
set hive.
exec
.dynamic.
partition
=true
;#開啟動態分割槽
hive (myhive)
>
set hive.
exec
.dynamic.
partition
.mode
=nonstrict;
#動態分割槽模式設定為非嚴格
hive (myhive)
>
set hive.
exec
.max.dynamic.partitions.pernode=
1000
;hive (myhive)
>
insert overwrite table student_dynamic_partition
>
partition
(class_no)
>
select stu_no,stu_name,class_no
>
from student;
hive (myhive)
>
select
*from student_dynamic_partition;
student_dynamic_partition.stu_no student_dynamic_partition.stu_name student_dynamic_partition.class_no
1001 john 1
1002 susan 1
1003 smith 2
1004 tom 2
1005 simen 3
hive使用動態分割槽插入資料詳解
往hive分割槽表中插入資料時,如果需要建立的分割槽很多,比如以表中某個字段進行分割槽儲存,則需要複製貼上修改很多sql去執行,效率低。因為hive是批處理系統,所以hive提供了乙個動態分割槽功能,其可以基於查詢引數的位置去推斷分割槽的名稱,從而建立分割槽。1.建立乙個單一字段分割槽表 creat...
HIVE動態分割槽
一 前段時間因為導表需求 從一張表中查詢出資料,按日期分割槽overwrite 到指定分割槽表中 在hive裡面研究了一下自動分割槽。步驟 1 建好所需分割槽表 2 設定分割槽引數?1 2 3 4 sethive.exec.dynamic.partition true 可通過這個語句檢視 sethi...
Hive動態分割槽
動態分割槽指不需要為不同的分割槽新增不同的插入語句,分割槽不確定,需要從資料中獲取。相關引數設定 set hive.exec dynamic partition true 使用動態分割槽 可通過這個語句檢視 set hive.exec dynamic partition set hive.exec ...