Hive分桶

目录

一:概念

二:操作

1、开启分桶开关

2、创建分桶表

3、往分桶表里插入数据

4:注意


一:概念

分桶实际上是对文件(数据)的进一步切分 Hive默认关闭分桶

作用:在往分桶表中插入数据的时候,会根据 clustered by 指定的字段 进行hash分区 对指定的buckets个数 进行取余,进而可以将数据分割成buckets个数个文件,以达到数据均匀分布,可以解决Map端的“数据倾斜”问题,方便我们取抽样数据,提高Map join效率 分桶字段 需要根据业务进行设定

二:操作

1、开启分桶开关

set hive.enforce.bucketing=true;

2、创建分桶表

create table students_cluster(

id bigint comment '学生id',

name string comment '学生姓名',

age int comment '学生年龄',

gender string comment '学生性别',

clazz string comment '学生班级'

) comment '学生信息表'

clustered by (clazz) into 12 buckets

ROW FORMAT DELIMITED FIELDS TERMINATED BY ',’;

3、往分桶表里插入数据

// 直接使用load data 并不能将数据打散
load data local inpath '/usr/local/soft/data/students.txt' into table students_buks;

// 需要使用下面这种方式插入数据,才能使分桶表真正发挥作用
insert into students_buks select * from students;

Hive会自动根据bucket个数自动分配Reduce task的个数

Reduce个数与bucket个数一致

4:注意

分桶和分区一样需要先建立原始表然后建立分桶表将数据插入原始表然后再进行插入到分桶表

分桶表中数据可能不会正确分到一个reduce中因为按照key进行进入reduce时会进行取余操作

分桶字段来源普通字段,分桶数量是明确的

分桶加载数据:

load:不会触发分桶

insert into:自动触发分桶

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值