一起學Hive 之六 Hive的動態分割槽

2021-08-26 09:36:43 字數 3019 閱讀 5129

hive

hive動態分割槽

前面文章介紹了hive中是支援分割槽的。

關係型資料庫(如oracle)中,對分割槽表insert資料時候,資料庫自動會根據分割槽欄位的值,將資料插入到相應的分割槽中,hive中也提供了類似的機制,即動態分割槽(dynamic partition),只不過,使用hive的動態分割槽,需要進行相應的配置。

先看乙個應用場景,源表t_lxw1234的資料如下:

sql** 

select day,url from t_lxw1234;  

2015-05-10 url1  

2015-05-10 url2  

2015-06-14 url1  

2015-06-14 url2  

2015-06-15 url1  

2015-06-15 url2  

……  

目標表為:

sql** 

create table t_lxw1234_partitioned (  

url string  

) partitioned by (month string,day string)  

stored as textfile;  

需求:將t_lxw1234中的資料按照時間(day),插入到目標表t_lxw1234_partitioned的相應分割槽中。

如果按照之前介紹的往指定乙個分割槽中insert資料,那麼這個需求很不容易實現。

這時候就需要使用動態分割槽來實現,使用動態分割槽需要注意設定以下引數:

預設值:false

是否開啟動態分割槽功能,預設false關閉。

使用動態分割槽時候,該引數必須設定成true;

預設值:strict

動態分割槽的模式,預設strict,表示必須指定至少乙個分割槽為靜態分割槽,nonstrict模式表示允許所有的分割槽欄位都可以使用動態分割槽。

一般需要設定為nonstrict

預設值:100

在每個執行mr的節點上,最大可以建立多少個動態分割槽。

該引數需要根據實際的資料來設定。

比如:源資料中包含了一年的資料,即day欄位有365個值,那麼該引數就需要設定成大於365,如果使用預設值100,則會報錯。

預設值:1000

在所有執行mr的節點上,最大一共可以建立多少個動態分割槽。

同上引數解釋。

預設值:100000

整個mr job中,最大可以建立多少個hdfs檔案。

一般預設值足夠了,除非你的資料量非常大,需要建立的檔案數大於100000,可根據實際情況加以調整。

預設值:false

當有空分割槽生成時,是否丟擲異常。

一般不需要設定。

那麼,上面的需求可以使用如下的語句來完成:

sql** 

set hive.exec.dynamic.partition=true;  

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

set hive.exec.max.dynamic.partitions.pernode = 1000;  

set hive.exec.max.dynamic.partitions=1000;  

insert overwrite table t_lxw1234_partitioned partition (month,day)  

select url,substr(day,1,7) as month,day  

from t_lxw1234;  

注意:在partition (month,day)中指定分割槽欄位名即可;

在select子句的最後兩個字段,必須對應前面partition (month,day)中指定的分割槽字段,包括順序。

執行結果如下:

loading data to table liuxiaowen.t_lxw1234_partitioned partition (month=null, day=null)

loading partition

loading partition

loading partition

partition liuxiaowen.t_lxw1234_partitioned stats: [numfiles=1, numrows=2, totalsize=10, rawdatasize=8]

partition liuxiaowen.t_lxw1234_partitioned stats: [numfiles=1, numrows=2, totalsize=10, rawdatasize=8]

partition liuxiaowen.t_lxw1234_partitioned stats: [numfiles=1, numrows=2, totalsize=10, rawdatasize=8]

使用show partitions t_lxw1234_partitioned;檢視目標表有哪些分割槽:

hive> show partitions t_lxw1234_partitioned;

okmonth=2015-05/day=2015-05-10

month=2015-06/day=2015-06-14

month=2015-06/day=2015-06-15

一起學hive系列

—-hive概述,hive是什麼

—-hive函式大全-完整版

—-hive中的資料庫(database)和表(table)

—-hive的安裝配置

—-hive的檢視和分割槽

hive分析函式系列

hive索引

hive優化之——控制hive任務中的map數和reduce數

1

0

踩分享到:

[一起學hive]之八-使用hive命令列 | [一起學hive]之七-向hive表中載入資料

1 樓 annmi_cai 2016-03-11  

頂頂更健康

一起學Hive 之六 Hive的動態分割槽

前面文章介紹了hive中是支援分割槽的。關係型資料庫 如oracle 中,對分割槽表insert資料時候,資料庫自動會根據分割槽欄位的值,將資料插入到相應的分割槽中,hive中也提供了類似的機制,即動態分割槽 dynamic partition 只不過,使用hive的動態分割槽,需要進行相應的配置。...

一起學Hive 之八 使用Hive命令列

hive提供的幾種使用者互動介面中,最常用的就是命令列介面。本文簡單介紹一下hive命令列介面 hive command line 及hive互動shell hive interactive shell 的一些使用。輸入 hive home bin hive h 或者 help可以顯示幫助選項 d,...

一起學Hive 之八 使用Hive命令列

hive提供的幾種使用者互動介面中,最常用的就是命令列介面。本文簡單介紹一下hive命令列介面 hive command line 及hive互動shell hive interactive shell 的一些使用。輸入 hive home bin hive h 或者 help可以顯示幫助選項 d,...