日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

hive分区用2个字段有何限制_[特性]Hive动态分区功能使用

發布時間:2025/3/11 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hive分区用2个字段有何限制_[特性]Hive动态分区功能使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[特性]Hive動態分區功能使用

2016-01-31 21:40

說明

Hive有兩種分區,一種是靜態分區,也就是普通的分區。另一種是動態分區。動態分區在數據導入時,會根據具體的字段值自行決定導入,并創建相應的分區。使用上更為方面。

舉例

準備工作

創建一個表,并導入相關數據,作為源數據。

1

2

3CREATE TABLE student_data(id STRING, name STRING, year INT, major INT)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ',';

該表有如下數據:

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 |

+------------------+--------------------+--------------------+---------------------+--+

使用靜態分區

創建一個表,準備用靜態分區方式將數據導入此表。

1

2

3

4CREATE TABLE student_static_partition(id STRING, name STRING)

PARTITIONED BY (year INT, major INT)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ',';

使用靜態分區方式,將源表中的所有數據導入此表:

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;

導完后,查詢該表的分區信息:

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 |

+----------------------+--+

使用動態分區

然后再創建一個相同表結構的表,準備以動態分區的方式導入數據。

1

2

3

4CREATE TABLE student_dynamic_partition(id STRING, name STRING)

PARTITIONED BY (year INT, major INT)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ',';

使用動態分區前,需要先配置相同的Hive參數,其中最重要的兩個參數是:

1

2set hive.exec.dynamic.partition=true;

set hive.exec.dynamic.partition.mode=nonstrict;

更多參數請參考下文中的參考文檔。

然后以動態分區方式導入數據:

1

2

3INSERT OVERWRITE TABLE student_dynamic_partition PARTITION (year, major)

SELECT id,name,year,major

FROM student_data;

注意:在SELECT子句的各個字段應剛好與INSERT中的字段以及最后的PARTITION中的字段完全一致,包括順序。

這里,我們無需指定數據導入到哪一個分區。該語句會自動創建相應分區,并將數據導入相應的分區。

導入完成后,查看該表的分區信息:

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 |

+----------------------+--+

兩種方式對比

通過上述實例,我們可以看到:通過動態分區方式,我們無法手工指定數據導入的具體分區,而是由SELECT中的相關字段的值自行決定導入到哪一個分區中,并自動創建相應的分區。使用上更加方便。

參考文檔

總結

以上是生活随笔為你收集整理的hive分区用2个字段有何限制_[特性]Hive动态分区功能使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。