Hive的DDL--分桶表

Hive的DDL–分桶表

​分桶表(cluster by into num buckets)
指定开启分桶

hive (xiaoliu)> set hive.enforce.bucketing;
hive.enforce.bucketing is undefined
hive (xiaoliu)> set hive.enforce.bucketing=true;
hive (xiaoliu)> set mapreduce.job.reduces=4;
hive (xiaoliu)> set mapreduce.job.reduces;
mapreduce.job.reduces=4
hive (xiaoliu)> set hive.enforce.bucketing;
hive.enforce.bucketing=true

分桶表 创建之前 需要开启分桶功能
分桶表(分簇表)创建的时候 分桶字段必须是表中已经存在的字段,也就是说,要按照表中的字段进行分开

hive (xiaoliu)> create table stu_buck(Sno int,Sname string,Sex string,Sage int,Sdept string)
              > clustered by(Sno) #根据Sno进行分桶
              > into 4 buckets #分到4个桶中
              > row format delimited
              > fields terminated by ','
hive (xiaoliu)> select * from stu_buck;
OK
stu_buck.sno  stu_buck.sname  stu_buck.sex  stu_buck.sage  stu_buck.sdept
Time taken: 0.161 seconds

创建数据文档

[xiaokang@hadoop hive_data]$ vi students.txt
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,梦圆圆,,18,MA
95010,孔小涛,,19,CS
95011,包小柏,,18,MA
95012,孙花,,20,CS
95013,冯伟,,21,CS
95014,王小丽,,19,CS
95015,王君,,18,MA
95016,钱国,,21,MA
95017,王风娟,,18,IS
95018,王一,,19,IS
95019,邢小丽,,19,IS
95020,赵钱,,21,IS
95021,周二,,17,MA
95022,郑明,,20,MA

错误方式:

hive (xiaoliu)> load data local inpath '/home/xiaokang/hive_data/students.txt' into table stu_buck;
hive (xiaoliu)> select * from stu_buck;
OK
stu_buck.sno  stu_buck.sname  stu_buck.sex  stu_buck.sage  stu_buck.sdept
NULL  NULL  NULL  NULL  NULL
95020  赵钱  男  21  IS
95016  钱国  男  21  MA
95012  孙花  女  20  CS
95008  李娜  女  18  CS
95004  张立  男  19  IS
95017  王风娟  女  18  IS
95001  李勇  男  20  CS
95013  冯伟  男  21  CS
95009  梦圆圆  女  18  MA
95021  周二  男  17  MA
95005  刘刚  男  18  MA
95010  孔小涛  男  19  CS
95018  王一  女  19  IS
95002  刘晨  女  19  IS
95006  孙庆  男  23  CS
95022  郑明  男  20  MA
95014  王小丽  女  19  CS
95011  包小柏  男  18  MA
95007  易思玲  女  19  MA
95015  王君  男  18  MA
95019  邢小丽  女  19  IS
95003  王敏  女  22  MA

注意:
hive不支持load data方式导成分桶表的数据,没有分桶效果,原因在于load 本质上相当于hive去帮我们执行hadoop fs -put

正确方式:
向一张表中插入数据,插入的数据来自另一张表,即分桶表的数据采用insert+select,底层执行了mr程序。

#新建一张临时表student
hive (xiaoliu)> create table student(Sno int,Sname string,Sex string,Sage int,Sdept string)
              > row format delimited
              > fields terminated by ',';
hive (xiaoliu)> load data local inpath '/home/xiaokang/hive_data/students.txt' into table student;
hive (xiaoliu)> select * from student;
OK
student.sno  student.sname  student.sex  student.sage  student.sdept
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  梦圆圆  女  18  MA
95010  孔小涛  男  19  CS
95011  包小柏  男  18  MA
95012  孙花  女  20  CS
95013  冯伟  男  21  CS
95014  王小丽  女  19  CS
95015  王君  男  18  MA
95016  钱国  男  21  MA
95017  王风娟  女  18  IS
95018  王一  女  19  IS
95019  邢小丽  女  19  IS
95020  赵钱  男  21  IS
95021  周二  男  17  MA
95022  郑明  男  20  MA
NULL  NULL  NULL  NULL  NULL
# 底层执行mr程序
hive (xiaoliu)> insert overwrite table stu_buck
              > select * from student cluster by(sno);
hive (xiaoliu)> select * from stu_buck;
OK
stu_buck.sno  stu_buck.sname  stu_buck.sex  stu_buck.sage  stu_buck.sdept
NULL  NULL  NULL  NULL  NULL
95004  张立  男  19  IS
95008  李娜  女  18  CS
95012  孙花  女  20  CS
95016  钱国  男  21  MA
95020  赵钱  男  21  IS
95001  李勇  男  20  CS
95005  刘刚  男  18  MA
95009  梦圆圆  女  18  MA
95013  冯伟  男  21  CS
95017  王风娟  女  18  IS
95021  周二  男  17  MA
95002  刘晨  女  19  IS
95006  孙庆  男  23  CS
95010  孔小涛  男  19  CS
95014  王小丽  女  19  CS
95018  王一  女  19  IS
95022  郑明  男  20  MA
95003  王敏  女  22  MA
95007  易思玲  女  19  MA
95011  包小柏  男  18  MA
95015  王君  男  18  MA
95019  邢小丽  女  19  IS

在这里插入图片描述
分桶表也是把表所映射的结构化数据文件分成更加细致的部分,但是更多的是用在join查询提高效率上,只需要把join字段在各自表当中进行分桶操作即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小刘新鲜事儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值