hive分区用2个字段有何限制_[特性]Hive动态分区功能使用
[特性]Hive動(dòng)態(tài)分區(qū)功能使用
2016-01-31 21:40
說明
Hive有兩種分區(qū),一種是靜態(tài)分區(qū),也就是普通的分區(qū)。另一種是動(dòng)態(tài)分區(qū)。動(dòng)態(tài)分區(qū)在數(shù)據(jù)導(dǎo)入時(shí),會(huì)根據(jù)具體的字段值自行決定導(dǎo)入,并創(chuàng)建相應(yīng)的分區(qū)。使用上更為方面。
舉例
準(zhǔn)備工作
創(chuàng)建一個(gè)表,并導(dǎo)入相關(guān)數(shù)據(jù),作為源數(shù)據(jù)。
1
2
3CREATE TABLE student_data(id STRING, name STRING, year INT, major INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';
該表有如下數(shù)據(jù):
SELECT * FROM student_data;
+------------------+--------------------+--------------------+---------------------+--+
| student_data.id | student_data.name | student_data.year | student_data.major |
+------------------+--------------------+--------------------+---------------------+--+
| 2001810081 | cheyo | 2001 | 810 |
| 2001810082 | pku | 2001 | 810 |
| 2001810083 | rocky | 2001 | 810 |
| 2001810084 | stephen | 2001 | 810 |
| 2001810086 | rongqi | 2001 | 810 |
| 2001810087 | hauaa | 2001 | 810 |
| 2001810088 | file | 2001 | 810 |
| 2001810089 | note | 2001 | 810 |
| 2001820081 | hello | 2001 | 820 |
| 2001820082 | jaccy | 2001 | 820 |
| 2001820083 | micky | 2001 | 820 |
| 2001820084 | lucy | 2001 | 820 |
| 2002810081 | cindy | 2002 | 810 |
| 2002810082 | lemon | 2002 | 810 |
| 2002820081 | jacky | 2002 | 820 |
| 2002820082 | cindy | 2002 | 820 |
| 2002820083 | happy | 2002 | 820 |
| 2002820084 | snow | 2002 | 820 |
+------------------+--------------------+--------------------+---------------------+--+
使用靜態(tài)分區(qū)
創(chuàng)建一個(gè)表,準(zhǔn)備用靜態(tài)分區(qū)方式將數(shù)據(jù)導(dǎo)入此表。
1
2
3
4CREATE TABLE student_static_partition(id STRING, name STRING)
PARTITIONED BY (year INT, major INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';
使用靜態(tài)分區(qū)方式,將源表中的所有數(shù)據(jù)導(dǎo)入此表:
1
2
3
4
5
6
7
8
9
10
11INSERT INTO TABLE student_static_partition PARTITION(year=2001,major=810)
SELECT id,name FROM student_data WHERE year=2001 AND major=810;
INSERT INTO TABLE student_static_partition PARTITION(year=2001,major=820)
SELECT id,name FROM student_data WHERE year=2001 AND major=820;
INSERT INTO TABLE student_static_partition PARTITION(year=2002,major=810)
SELECT id,name FROM student_data WHERE year=2002 AND major=810;
INSERT INTO TABLE student_static_partition PARTITION(year=2002,major=820)
SELECT id,name FROM student_data WHERE year=2002 AND major=820;
導(dǎo)完后,查詢?cè)摫淼姆謪^(qū)信息:
1
2
3
4
5
6
7
8
9SHOW PARTITIONS student_static_partition;
+----------------------+--+
| partition |
+----------------------+--+
| year=2001/major=810 |
| year=2001/major=820 |
| year=2002/major=810 |
| year=2002/major=820 |
+----------------------+--+
使用動(dòng)態(tài)分區(qū)
然后再創(chuàng)建一個(gè)相同表結(jié)構(gòu)的表,準(zhǔn)備以動(dòng)態(tài)分區(qū)的方式導(dǎo)入數(shù)據(jù)。
1
2
3
4CREATE TABLE student_dynamic_partition(id STRING, name STRING)
PARTITIONED BY (year INT, major INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';
使用動(dòng)態(tài)分區(qū)前,需要先配置相同的Hive參數(shù),其中最重要的兩個(gè)參數(shù)是:
1
2set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
更多參數(shù)請(qǐng)參考下文中的參考文檔。
然后以動(dòng)態(tài)分區(qū)方式導(dǎo)入數(shù)據(jù):
1
2
3INSERT OVERWRITE TABLE student_dynamic_partition PARTITION (year, major)
SELECT id,name,year,major
FROM student_data;
注意:在SELECT子句的各個(gè)字段應(yīng)剛好與INSERT中的字段以及最后的PARTITION中的字段完全一致,包括順序。
這里,我們無需指定數(shù)據(jù)導(dǎo)入到哪一個(gè)分區(qū)。該語句會(huì)自動(dòng)創(chuàng)建相應(yīng)分區(qū),并將數(shù)據(jù)導(dǎo)入相應(yīng)的分區(qū)。
導(dǎo)入完成后,查看該表的分區(qū)信息:
1
2
3
4
5
6
7
8
9SHOW PARTITIONS student_dynamic_partition
+----------------------+--+
| partition |
+----------------------+--+
| year=2001/major=810 |
| year=2001/major=820 |
| year=2002/major=810 |
| year=2002/major=820 |
+----------------------+--+
兩種方式對(duì)比
通過上述實(shí)例,我們可以看到:通過動(dòng)態(tài)分區(qū)方式,我們無法手工指定數(shù)據(jù)導(dǎo)入的具體分區(qū),而是由SELECT中的相關(guān)字段的值自行決定導(dǎo)入到哪一個(gè)分區(qū)中,并自動(dòng)創(chuàng)建相應(yīng)的分區(qū)。使用上更加方便。
參考文檔
總結(jié)
以上是生活随笔為你收集整理的hive分区用2个字段有何限制_[特性]Hive动态分区功能使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ad18原理图器件批量修改_Altium
- 下一篇: python爬取js动态网页_Pytho