Hive分割槽和分桶區別

2021-08-27 14:00:26 字數 1655 閱讀 3112

一.定義上

分割槽:

//建立分割槽表

create table student(

id int,

name string,

age int,

address string

)partitioned by (dt string,type string) //制定分割槽

row format delimited fields terminated by '\t' //指定字段分隔符為tab

collection items terminated by ',' //指定陣列中欄位分隔符為逗號

map keys terminated by ':' //指定字典中kv分隔符為冒號

lines terminated by '\n' //指定行分隔符為回車換行

stored as textfile //指定儲存型別為檔案

;//將資料載入到表中(此時時靜態分割槽)

load data local inpath '/root/student.txt' into test.student partition(class='一班');

分桶:
注意:

建立分割槽表時:

#可以使用distribute by(sno) sort by(sno asc) 或是使用clustered by(字段)

#當排序和分桶的字段相同的時候使用cluster by, 就等同於分桶+排序(sort)

//建立分桶表

create table student(

id int,

name string,

age int,

address string

)clustered by(id) sorted by(age) into 4 buckets

row format delimited fields terminated by '\t'

stored as textfile;

//開啟分桶

set hive.enforce.bucketing = true;

//插入資料

insert overwrite table studentselect id ,name ,age ,address from employees;

//也可以用另一種插入方式

load data local inpath '/root/student.txt' into test.student;

二.資料型別上

分桶隨機分割資料庫,分割槽是非隨機分割資料庫。因為分桶是按照列的雜湊函式進行分割的,相對比較平均;而分割槽是按照列的值來進行分割的,容易造成資料傾斜。

分桶是對應不同的檔案(細粒度),分割槽是對應不同的資料夾(粗粒度)。桶是更為細粒度的資料範圍劃分,分桶的比分區獲得更高的查詢處理效率,使取樣更高效。

注意:普通表(外部表、內部表)、分割槽表這三個都是對應hdfs上的目錄,桶表對應是目錄裡的檔案

感謝他們博主的總結

Hive 分割槽 和 分桶 的區別

背景 hive使用select語句進行查詢的時候一般會掃瞄整個表內容,會消耗很多時間做沒必要的工作。hive可以在建立表的時候指定分割槽空間,這樣在做查詢的時候就可以很好的提高查詢的效率。分割槽 在hdfs上的表現形式是乙個目錄,分桶 在hdfs上的表現形式是乙個單獨的檔案 建立分割槽表 creat...

hive面試 Hive分割槽和分桶的區別

分割槽針對的是資料的儲存路徑,分割槽提供乙個隔離資料和優化查詢的便利方式。不過並不是所有的資料集都可形成合理的分割槽。create table student partitioned score int name string name string partitioned by age int r...

HIVE 索引 分割槽和分桶的區別

一 索引 hive支援索引,但是 hive 的索引與關係型資料庫中的索引並不相同,比如,hive 不支援主鍵或者外來鍵。hive索引可以建立在表中的某些列上,以提公升一些操作的效率,例如減少 mapreduce 任務中需要讀取的資料塊的數量。為什麼要建立索引?hive的索引目的是提高 hive 表指...