Hive——分桶的理解

阿瑟東阿斯頓發表於2020-10-21

分割槽針對的是資料的儲存路徑;分桶針對的是資料檔案。

分桶建立

(1)建立分桶表

create table stu_buck(id int, name string)
clustered by(id) into 4 buckets
row format delimited fields terminated by '\t';

(2)設定分桶屬性

開啟分桶機制

 set hive.enforce.bucketing=true;

讓reducer的個數與定義分桶表時設定的分桶數相同

 set mapreduce.job.reduces=-1;

(3)匯入資料
不要用local 來匯入,因為這是把一個檔案put到hdfs的資料庫目錄下,而我們分桶需要多個檔案,這樣就失去分桶意義

insert into table stu_buck
select id, name from stu;

在這裡插入圖片描述

分桶的作用

對於非常大的資料集,有時使用者需要使用的是一個具有代表性的查詢結果而不是全部結
果。Hive 可以通過對錶進行抽樣來滿足這個需求。

語法
tablesample(bucket x out of y)
x 表示從哪個 bucket 開始抽取
y 表示從x開始間隔y個桶取一個桶出來

注意事項
y 必須是 table 總 bucket 數的倍數或者因子
x 的值必須小於等於 y 的值

比如一共有4個桶 x=1 y=2 我取1、3這兩個桶出來
再比如一共有8個桶 x=2 y=4 我就取2、6這兩個桶出來(y不能取3,因為8/3有餘數)

 select * from stu_buck tablesample(bucket 1 out of 1 on id);

表示我拿出所有桶的資料

相關文章