對於每乙個表或者分割槽來說,可以進一步組織成 桶 ,其實就是更細粒度的資料範圍。
bucket是對指定列進行 hash,然後根據hash值除以桶的個數進行求餘,決定該條記錄存放在哪個桶中。
公式:whichbucket = hash(columnvalue) % numberofbuckets
公式:要往哪個桶存 = hash(列值) % 桶的數量
hive桶表最大限度的保證了每個桶中的檔案中的資料量大致相同,不會造成資料傾斜。
但說是不會造成資料傾斜,但這是在業務無關的情況下,只要有真實業務在,肯定會發生資料傾斜。
總結:桶表就是對一次進入表的資料進行檔案級別的劃分。
案例:多個國家的使用者日誌
--建立桶表的語法格式
create external table buckets_table(
col ...
.)comment
'this is the buckets_table table'
partitioned by
(`dt` string)
clustered
by(col1)
[sorted by
(col2 [
asc|
desc])
]into
2 buckets
location '.....'
示例:
-- 建立外部表桶表
create external table user_install_status_buckets(
`aid` string,
`pkgname` string,
`uptime`
bigint,`
type
`int
,`country` string,
`gpcategory` string)
comment
'this is the buckets_table table'
partitioned by
(`dt` string)
clustered
by(country)
sorted by
(uptime desc
)into
42 buckets
location 'hdfs://ns1/user/mydir/hive/user_install_status_buckets'
;
--建partition 分割槽
alter
table user_install_status_buckets add
ifnot
exists
partition
(dt=
'20141228'
) location '20141228'
partition
(dt=
'20141117'
) location '20141117'
;
在給分割槽插入資料的時候肯定有某些國家資料量大,某些少的情況
--給分割槽插入資料
insert overwrite table user_install_status_buckets partition
(dt=
'20141228'
)select
aid,pkgname,uptime,
type
,country,gpcategory
from user_install_status_orc
where dt=
'20141228'
;insert overwrite table user_install_status_buckets partition
(dt=
'20141117'
)select
aid,pkgname,uptime,
type
,country,gpcategory
from user_install_status_orc
where dt=
'20141117'
;
桶中的資料檔案:檔案大小參差不齊,明顯有資料傾斜現象
桶表抽樣:
當資料量特別大時,對全體資料進行處理存在困難時,抽樣就顯得尤其重要了。
抽樣可以從被抽取的資料中估計和推斷出整體的特性,是科學實驗、質量檢驗、社會調查普遍採用的一種經濟有效的工作和研究方法。
桶表抽樣的語法如下:table_sample: tablesample (bucket x out of y [on colname])
當建立桶表的字段和抽樣字段一致的時候,抽樣時不掃瞄全表,直接輸入指定的桶檔案。
select
*from user_install_status_buckets tablesample(bucket 11
outof
84on country)
;
上面的語句指定抽取第11個桶的一半,但是如果第11個桶中沒有第二個country,就會把所有記錄全部抽取出來。
hive 修改分桶數 分桶表 Hive中的分桶
對於每乙個表 table 或者分割槽,hive可以進一步組織成桶,也就是說桶是更為細粒度的資料範圍劃分。hive也是針對某一列進行桶的組織。hive採用對列值雜湊,然後除以桶的個數求餘的方式決定該條記錄存放在哪個桶當中。把錶 或者分割槽 組織成桶 bucket 有兩個理由 1 獲得更高的查詢處理效率...
hive分桶表join Hive分桶表
測試資料 95001,李勇,男,20,cs 95002,劉晨,女,19,is 95003,王敏,女,22,ma 95004,張立,男,19,is 95005,男,18,ma 95006,孫慶,男,23,cs 95007,易思玲,女,19,ma 95008,李娜,女,18,cs 95009,夢圓圓,女...
hive分桶表的學習
每乙個表或者分割槽,hive都可以進一步組織成桶,桶是更細粒度的資料劃分,他本質不會改變表或分割槽的目錄組織方式,他會改變資料在檔案中的分布方式。分桶規則 對分桶字段值進行雜湊,雜湊值除以桶的個數求餘,餘數決定了該條記錄在哪個桶中,也就是餘數相同的在乙個桶中。桶為表加上額外結構,鏈結相同列劃分了桶的...