本文目录
一、分桶表概述
1.1、什么是分桶表?
分桶是将数据集分解成更容易管理的若干部分的一个技术,是比表或分区更为细粒度的数据范围划分。针对某一列进行桶的组织,对列值哈希,然后除以桶的个数求余,决定将该条记录存放到哪个桶中。
常用于:
- 获得更高的查询处理效率
- 抽样调查
1.2、分桶表和分区表有啥区别?
分区表提供了一个隔离数据和优化查询的便利方式。但是在实际场景下,并非所有的数据集都可形成合理的分区。对于一张表或者分区,Hive还可以进一步组织成桶,也就是更为细粒度的数据范围划分。
小结一波:
- 分桶对数据的处理比分区更加细粒度化;
- 分桶和分区两者不干扰,可以把分区表进一步分桶;
- 分区针对的是数据的存储路径;分桶针对的是数据文件。
二、分桶表实战
首先说明一下,我的hive环境是基于docker-compose构建,使用postgresql管理metastore,各重要组件版本如下:
hadoop:2.7.4
hive:2.3.2
java:1.8
其实环境不重要,不用花太多时间,主要还是技术部分,接下来就开始实战吧。
2.1、创建一个分桶表
我们创建一个简单的分桶表,只有两个字段(id,name),并且按照id进行分6个桶,sql如下:
create table test_buck(id int, name string)
clustered by(id)
into 6 buckets
row format delimited fields terminated by '\t';
执行并查看表结构:
使用desc formatted test_buck;
查看test_buck表结构,数据较多,这里截取重要数据如下: