1. 程式人生 > 其它 >Hive分桶表的建立和相關操作

Hive分桶表的建立和相關操作

1. 建立分桶分割槽表

set hive.enforce.bucketing=true; --設定自動分桶引數
CREATE Table `tmp_wfbwall_log_url`
(
  `log_time` string, 
  `log_key` string, 
  `url_detail` string, 
  `url_briefly` string, 
  `url_action` string, 
  `time_situation` string
)
partitioned by(dt STRING)
clustered by (log_key)  sorted by (log_time) 
INTO 
5 buckets --分5個通 row format delimited fields terminated by ',' lines terminated by '\n';

2. 往分割槽分桶後的表裡插入資料

insert into `tmp_wfbwall_log_url` partition (dt='20210630')
select   
 `log_time`
,log_key
,url_detail
,url_briefly
 ,url_action
,time_situation
from wfbmal.wfbwall_log_url 

3. 檢視分桶表的存放位置,

4. 檢查分桶檔案資訊,已經被分成了5個桶

分桶抽樣查詢

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

select * from tmp_wfbwall_log_url tablesample(bucket 1 out of 2 on log_key);

注:tablesample是抽樣語句,語法:TABLESAMPLE(BUCKET x OUT OF y) 。

y必須是table總bucket數的倍數或者因子。hive根據y的大小,決定抽樣的比例。例如,table總共分了4份,當y=2時,抽取(4/2=)2個bucket的資料,當y=8時,抽取(4/8=)1/2個bucket的資料。

x表示從哪個bucket開始抽取,如果需要取多個分割槽,以後的分割槽號為當前分割槽號加上y。例如,table總bucket數為4,tablesample(bucket 1 out of 2),表示總共抽取(4/2=)2個bucket的資料,抽取第1(x)個和第3(x+y)個bucket的資料

注意:x的值必須小於等於y的值,否則

FAILED: SemanticException [Error 10061]: Numerator should not be bigger than denominator in sample clause for table stu_buck