一、分桶表的创建
-
原始分桶表
create table test_tb_f ( id int, name string, age int, gender string ) row format delimited fields terminated by ',';
-
创建分桶表
create table test_tb_ft( id int, name string, age int, gender string )clustered by (gender) sorted by (age desc ) into 2 buckets ;
-
将原始数据中的数据进行分桶操作,本质是将原始数据表中的某个字段进行平均分配
insert into test_tb_ft select * from python.test_tb_f;
二、分桶计算过程
- 指定了分桶字段gender,在分桶时,会对gender下的数据进行hash计算,再将计算的数据结果除以分桶数取模,余数相同的数据放在同一分桶目录下
三、分桶表和分区表的区别
- 分区表是对数据类型的划分,目的是将数据按照时间、地域进行整体数据划分,每个分区对应的是一个目录,可以进行多层分区,在分区目录下存放分区后的数据文件
- 分桶是对已有的数据按照字段进行一个分组操作,分桶的数据是一个文件,分桶的数据不能再次分桶
- 分区的数据可以使用分桶再次按照字段划分
- 分区和分桶都是优化查询的一种方式,并不是创建表的必要条件