hive的分桶,和分割槽

2021-08-19 11:34:42 字數 1177 閱讀 4865

#開啟分桶模式

set hive.enforce.bucketing=true;

#制定reduce個數是4

set mapreduce.job.reduces=4;

建立乙個分桶表

create table stu_buck(sno int,sname string,*** string,sage int,sdept string)

clustered by(sno)   //這裡的clustered是因為這裡的資料必須是被分好的才行

sorted by(sno desc)

into 4 buckets

row format delimited

fields terminated by ',';

insert語句

將sql語句查詢結果插入到分桶表中

基本語法

insert overwrite table tablename1 [partition (partcol1=val1, partcol2=val2 ...)] select_statement1 from from_statement

注:1、order by 會對輸入做全域性排序,因此只有乙個reducer,會導致當輸入規模較大時,需要較長的計算時間。

2、sort by不是全域性排序,其在資料進入reducer前完成排序。因此,如果用sort by進行排序,並且設定mapred.reduce.tasks>1,則sort by只保證每個reducer的輸出有序,不保證全域性有序。

3、distribute by根據distribute by指定的內容將資料分到同乙個reducer。

4、cluster by 除了具有distribute by的功能外,還會對該字段進行排序。分區分桶同乙個字段時候可以直接用clusterby

因此,hive裡面分桶常常被認為cluster by = distribute by + sort by,相當與mapreduce的「分割槽」因為hive已經有了分割槽表這個概念,hive這裡叫做分桶,而不是分割槽

hive裡面分割槽(分割槽表,並沒有對資料做改變)相當於多建了一層資料夾進行管理

select a.id a.name b.addr from a join b on a.id =b.id

分桶的最大作用在於可以提高join的效率,因為相同id的值都在乙個桶裡面;無需做全域性的笛卡兒積查詢

Hive分割槽和分桶區別

一.定義上 分割槽 建立分割槽表 create table student id int,name string,age int,address string partitioned by dt string,type string 制定分割槽 row format delimited fields...

Hive 分割槽 和 分桶 的區別

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

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

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