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中的相關字段的值自行決定導入到哪一個分區中,并自動創建相應的分區。使用上更加方便。

參考文檔

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/542218.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542218.shtml
英文地址,請注明出處:http://en.pswp.cn/news/542218.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux系統中輸出輸入的管理

1.什么是輸入和輸出 輸入和輸出是計算機系統中的主機與外部進行通信的系統。它由外圍設備和輸入輸出控制系統兩部分組成,我們在shell中鍵入指令,然后送入CPU中運算產生結果,再將結果送到字符設備中顯示。簡單點來說輸入輸出就是通過我們的鍵盤…

find 命令示例_數組find()方法以及JavaScript中的示例

find 命令示例JavaScript find()方法 (JavaScript find() method) find() method is used to get the first element from an array which passes the given test (condition). find()方法用于從通過給定測試(條件)的數組中獲取第一個元素。 Syntax: 句法: array.…

統計Apache或Nginx訪問日志里的獨立IP訪問數量的Shell

1、把IP數量直接輸出顯示: cat access_log_2011_06_26.log |awk ‘{print $1}’|uniq -c|wc -l 2、把IP數量輸出到文本顯示: cat access_log_2011_06_26.log |awk ‘{print $1}’|uniq -c|wc -l > ip.txt 總結:如果單個訪問日志大小超過2G…

ggplot2箱式圖兩兩比較_R繪圖 第四篇:繪制箱圖(ggplot2)

箱線圖通過繪制觀測數據的五數總括,即最小值、下四分位數、中位數、上四分位數以及最大值,描述了變量值的分布情況。箱線圖能夠顯示出離群點(outlier),離群點也叫做異常值,通過箱線圖能夠很容易識別出數據中的異常值。箱線圖提供了…

Linux系統中用戶的管理

#####用戶管理###### 1在Linux中,有三種用戶: 1 root : 也成為超級用戶,對系統有控制權限,超級用戶可以不受限制的運行任何命令,root 用戶可以看作是系統的管理員。 2 系統用戶: 系統用戶通常為系統功能所必…

c# 命名空間命名規范_C#命名空間能力問題和解答 套裝3

c# 命名空間命名規范1) There are following namespaces are given below, which is correct about "using" statement in C#.NET? In C#.Net, "using" statement is used to import the namespace in our programWe can create a new namespace with the…

shell 查出文件并復制到另一個文件夾

找出所有大于100M的文件并展示出來find / -size 100M -exec ls -lh {} \;找出特定文件內大于200字節的文件并備份到另一個文件夾里去find /opt/test -type f -size 200c -exec cp {} /opt/test/cp/ \;轉載于:https://blog.51cto.com/406647516/1875417

correl函數相關系數大小意義_用Correl函數返回相關系數,以確定屬性關系

我們辛辛苦苦制作了表格,當然是要作出分析的,肯定不能就是這么幾個數據吧。常用的分析法都是圖表,雖然看起來直觀,但是對于非作者來說,理解意思顯然不是那么方便。下面,教大家使用函數,來算出相…

Java之類的構造器(反射)

反射: Java反射機制:指的是在Java程序運行狀態中,對于任何一個類,都可以獲得這個類的所有屬性和方法;對于給定的一個對象,都能夠調用它的任意一個屬性和方法。這種動態獲取類的內容以及動態調用對象的方法稱為反射機制。Java的反射機制允許在對類未知的情…

java 系統自動檢測_如何在Java中檢測OS(操作系統)名稱?

java 系統自動檢測To detect the OS (operating system) name in Java, we use the getProperties() method, which is defined in System class, while calling the method, we need to pass the property name to get the OS (operating system name). 要檢測Java中的OS(操作…

shell中返回值是1為真還是假_shell腳本中判斷上一個命令是否執行成功

SQL Server 系列文章快速導航(SWF版)一.前言 在博客園寫博客不自不覺已經有5個年頭了,一開始只是為了記錄工作中遇到的問題和解決辦法,后來寫的文章不自不覺的側重在SQL Server方面的技術文章,在2014年1月終于鼓起勇氣申請了微軟S ...duilib幫助1.窗口基類:見介紹 順便貼下出來…

Linux中對進程的管理

1.what is 進程 程序(program)放置在儲存媒體中(如硬盤、光盤、軟盤、磁盤等),為實體的型態存在。 進程:程序被觸發后,執行者的權限與屬性、程序的程序碼與所需數據等都會被載入內存中&#xff…

帶C#示例的String.Equality(==)運算符

C#String.Equality運算符 (C# String.Equality operator ) "" is a String.Equality operator in C#, it is used to check whether two strings objects have the same values or not. “ ”是C#中的String.Equality運算符 ,用于檢…

jQuery 倒計時

function getSec(){//獲取名稱為remindataSec的ulobj document.getElementsByName("remindataSec");for(i0;i<obj.length;i){//循環得到每個毫秒數var intDiff $("#remindataTime"i"").text();var id "reminTime"i;//得到毫秒數…

Linux遠程連接與sshd服務安全設定

1.遠程連接&#xff1a; 首先設置ip&#xff1a; 設置好之后&#xff0c;先ping一下IP 看能不能通 ssh root172.25.13.103 ##表示的是&#xff1a;連接ip為172.25.13.103的root用戶 2.系統控制命令 系統控制命令的查看相關參數如下表 systemctl服務控制命令systemctl stat…

rabbitmq 同步策略_RabbitMQ高可用方案總結

RabbitMQ的集群方案有以下幾種&#xff1a;1.普通的集群exchange&#xff0c;buindling再所有的節點上都會保存一份&#xff0c;但是queue只會存儲在其中的一個節點上&#xff0c;但是所有的節點都會存儲一份queue的meta信息。因為這樣有兩個好處&#xff1a;1)存儲空間。如果每…

一個簡單的封ip規則

2019獨角獸企業重金招聘Python工程師標準>>> 一個簡單通過nginx日志封ip規則&#xff08;僅僅自己方便使用&#xff09; #!/bin/bash #Version:1.0 #Date:2016-08-09 #作用:防刷IP地址,解封蜘蛛,解封5天前封的IP地址function deny () { Date$(date "%F-%H-%M&q…

c程序預處理器的設計與實現_C預處理器-能力問題與解答

c程序預處理器的設計與實現C programming Pre-processor Aptitude Questions and Answers: In this section you will find C Aptitude Questions and Answers on Pre-processor topics like #define, #undef, #if, #endif etc. C編程預處理程序能力問題和解答&#xff1a;在本…

系統日志管理

1 查看系統中的日志 rsyslog 此服務是用來采集系統日志的&#xff0c;他不產生日志&#xff0c;只是起到采集作用 2 rsyslog 的管理 /var/log/messages服務信息日志/var/log/secuer系統登陸日志/var/log/cron定時任務日志/var/log/maillog郵件日志/var/log/boot.log系統啟動日…

pythonassertbug_還在 Bug 不斷?不妨試試這 2 個裝X技巧

原標題&#xff1a;還在 Bug 不斷&#xff1f;不妨試試這 2 個裝X技巧作者 | luanhz來源 | 小數志(ID&#xff1a;Datazhi)程序員每天遇到 bug 就像喝水吃飯一樣稀松平常&#xff0c;關鍵在于怎么高效而不失優雅的面對這些 bug&#xff01;所以&#xff0c;你還在固執的使用 tr…