例項演示hive的靜態分割槽和動態分割槽

2021-10-07 21:51:14 字數 3419 閱讀 6465

分割槽主要用於提高效能

分割槽列的值將表劃分為乙個個的資料夾

查詢時語法使用"分割槽"列和常規列類似

查詢時hive會只從指定分割槽查詢資料,提高查詢效率

注:由於hive實際是儲存在hdfs上的抽象,hive的乙個分割槽名對應乙個目錄名,子分割槽名就是子目錄名,並不是乙個實際字段。

所以可以這樣理解,當我們在插入資料的時候指定分割槽,其實就是新建乙個目錄或者子目錄,或者在原有的目錄上新增資料檔案。

分為靜態分割槽和動態分割槽

示例演示

建立資料,準備用性別分割槽

開啟hive建立表

hive> create table userinfo(

> userid string,

> username string,

> brithday string

>

)> partitioned by (*** string)

> row format delimited fields terminated by ','

> stored as textfile;

oktime taken: 0.247 seconds

hive> desc userinfo; //檢視表結構

okuserid string

username string

brithday string

*** string

# partition information //分割槽資訊

# col_name data_type comment

*** string

用load直接傳輸資料並用靜態分割槽(錯誤)

注意這裡會存在問題,這裡並不是真正的分割槽,而是強行把所有資料傳入分割槽,並把對應的屬性在展示時全改為分割槽的屬性,而實際屬性未發生改變。在hdfs上查詢檔案,其真實內容如下圖

先在hdfs上建立資料夾,存放資料檔案

hive>

!hdfs dfs -mkdir -p /wh;

hive>

!hdfs dfs -put /opt/software/info.csv /wh;

建立原始表存放資料,路徑為剛剛上傳位址

hive> create table ods_user (

> userid string,

> username string,

> brithday string,

> *** string

>

)> row format delimited fields terminated by ','

> location '/wh'

>

;

通過這張表向分割槽表中插入資料在插入資料時注意 ,後面select中不要將分割槽的屬性也查詢插入。按照分割槽的屬性分別插入

hive> insert into userinfo partition(***=

'male'

)select userid,username,brithday from ods_user where ***=

'male'

;

hive> insert into userinfo partition(***=

'female'

)select userid,username,brithday from ods_user where ***=

'female'

;

插入結束後可以檢視網頁192.168.73.39:50070頁面

如果用上述的靜態分割槽,插入的時候必須首先要知道有什麼分割槽型別,而且每個分割槽都要寫乙個insert語句,在某些場景下還是比較麻煩。使用動態分割槽可解決以上問題,其可以根據查詢得到的資料動態分配到分割槽裡。其實動態分割槽與靜態分割槽區別就是不指定分割槽目錄,由系統自己選擇。

建立表

hive> create table myusers(

> userid string,

> username string,

> brithday string

>

)> partitioned by (*** string)

> row format delimited fields terminated by ','

> stored as textfile;

使用動態分割槽需設定屬性

hive>

set hive.exec.dynamic.partition=true; //開啟

hive>

set hive.exec.dynamic.partition.mode=nonstrict; //設定分割槽模式為非嚴格模式

從原始表中直接插入資料

hive> insert into myusers partition(***)

select * from ods_user;

成功顯示,可以看出它直接根據***的兩個屬性自動分割槽

網頁顯示

Hive靜態分割槽和動態分割槽

需求 需要建立乙個備份帶分割槽的資料表,拷貝時若採用靜態分割槽方式需要寫n行語句,建議使用動態分割槽,節省大量時間。hive的分割槽方式 由於hive實際是儲存在hdfs上的抽象,hive的乙個分割槽名對應乙個目錄名,子分割槽名就是子目錄名,並不是乙個實際字段。hive中支援兩種型別的分割槽 靜態分...

高效辨別Hive的靜態和動態分割槽

1 hive中有分割槽表的概念,我們可以看到分割槽具有重要效能優勢,分割槽表可以將資料以一種符合邏輯的方式進行組織,比如分層儲存。2 查詢分割槽表中的資料時,除非where語句中包含分割槽字段過濾條件來顯示資料範圍,否則不允許執行。3 換句話說,就是使用者不允許掃瞄所有的分割槽。4 進行這個顯示的原...

hive中的動態分割槽和靜態分割槽

對於向一張hive分割槽表寫入資料,一般可以這樣 insert into tb partition par col par value select id,name from tb1 這樣,資料都會被插入到tb表的par value分割槽下。有時候我們會遇到這樣的場景 tb1表下有個字段,比如mon...