一.定義上
分割槽:
//建立分割槽表
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 表指...