分桶表

使用示例:

CREATE TABLE page_view(viewTime INT, userid BIGINT,
     page_url STRING, referrer_url STRING,
     ip STRING COMMENT 'IP Address of the User')
 COMMENT 'This is the page view table'
 PARTITIONED BY(dt STRING, country STRING)
 CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS
 ROW FORMAT DELIMITED
   FIELDS TERMINATED BY '\001'
   COLLECTION ITEMS TERMINATED BY '\002'
   MAP KEYS TERMINATED BY '\003'
 STORED AS SEQUENCEFILE;

 为什么要分桶:

分桶是比分区更细粒度的数据存储,可以对表或者分区进行分桶

对分桶字段做哈希对桶数取余来获取对应的桶号,划分N个桶,就会在HDFS产生N个对应的存储文件

分桶的两个优点:

1、便于采样

table_sample: TABLESAMPLE (BUCKET x OUT OF y [ON colname])

若不是桶表,只是一张普通的表,则查询时候需要全表扫描,先分桶,再抽样

2、mapside join

join时如果两张表的分桶字段做join,就可以按相同的桶号进行join,这样就可以对对应的桶进行join,避免做全表的笛卡尔积,效率会比较高

当桶内的数据量小于25M可以将表内数据加载到内存中,在map端进行join,避免reduce join,是一种优化手段

 

参考:

1、https://zhuanlan.zhihu.com/p/66599255

2、https://cwiki.apache.org/confluence/display/Hive/LanguageManual

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值