前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hive系列:分桶表

Hive系列:分桶表

作者头像
kk大数据
发布2019-08-14 15:49:49
8720
发布2019-08-14 15:49:49
举报
文章被收录于专栏:kk大数据

1

什么是分桶表

分桶表,是相对分区表来说,进行更细粒度的划分。

分桶将整个数据内容按照某列属性值的hash值进行区分,如要按照 name 属性分为3个桶,就是对 name 属性值的hash值对3取模,按照取模结果对数据分桶。

取模结果为 0 的数据记录存放到一个文件,取模为1的数据存放到一个文件,取模为 2 的数据存放到一个文件。

在物理结构上,一个桶对应着一个文件。

而分区表,只是一个目录,目录下有多少东西都是随意的。

在大表join大表的时候,只需要把相同分区的数据join到一起就好,不用整个表join了。

2

如何建立一个分桶表

代码语言:javascript
复制
create table if not exists dw.bl_log_buck3 (
url string,url_alias string,access_start string,access_start_ymdhms string,access_cost string,tracker_global_id string,tracker_session_id string ,user_id string
)
comment '日志明细表'
clustered by (user_id) sorted by (user_id asc) into 32 BUCKETS
row format delimited
    fields terminated by '\001'
    collection items terminated by '\002'
    map keys terminated by '\003'
    lines terminated by '\n'
stored as orc ;

注意一:分桶之前要执行命令hive.enforce.bucketiong=true;

注意二:要使用关键字 clustered by 指定分区依据的列名,还要指定分为多少桶,这里指定分为 32 桶。

3

如何往桶表插入数据呢

代码语言:javascript
复制
set hive.enforce.bucketing = true;   
insert  overwrite table dw.bl_log_buck3
 select url,url_alias,access_start,access_start_ymdhms,access_cost,tracker_global_id,tracker_session_id,user_id 
 from dw.bl_log_test3;

必须使用这种跑 MapReduce 的方式才可以顺利的把文件分桶。

使用 load data inpath 这种方式加载数据,即使设置了强制分桶,也是不行的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 KK架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档