Hive----分桶

简介: 分桶

分桶的场景:有的数据不适合形成合理的分区,尤其是需要确定合适大小的分区(分区之后,有的分区内数据量特别大,有的分区中数据量很小),分桶是将数据细粒度划分的另一个技术

 

create table tb_cluster(

udate string,

name string,

cost int,

yue double

)

clustered by(cost)                                        ------>注意此处不要少了小括号!分桶的字段为数据已知字段

sorted by (name desc) into 4 buckets          ------>注意此处不要少了小括号!排序的字段也为数据已知字段

row format delimited fields terminated by '\t';

 

set hive.enforce.bucketing=true;

打开分桶

set mapreduce.job.reduces=-1;

设置自动分区

 

insert into table  tb_cluster select utime,name,cost,yue from tmp;

 

分桶的原理:

和mapreduce中的hashPartitioner的原理一样,

将分桶字段的hash值和分桶个数取余,余数为几就放入几号桶

 

分桶的作用:

1、分桶可以将数据进行抽样分析

2、可以提高join的查询效率,如果两个互相join的表都进行了分桶,可以使用map端join,保存相同列值的桶进行join,可以减少join的数据量

 

抽样查询语法:

TABLESAMPLE(BUCKET x OUT OF y)?

假如有z个桶,从第x桶开始抽样,每隔y桶抽一桶,直到抽满z/y桶为止

4个桶,tablesample(bucket 1 out of 4) : 从第1桶开始抽,一共抽了1桶

4个桶,tablesample(bucket 1 out of 2) : 从第1桶开始抽,每隔2桶抽1桶,一共抽了2桶

4个桶,tablesample(bucket 1 out of 8) : 从第1桶开始抽,一共抽了0.5桶

4个桶,tablesample(bucket 2 out of 2) : 从第2桶开始抽,一共抽了2

select * from stu_buck tablesample(bucket 1 out of 4 on id);

 

建一张表,按照年、月二级分区,按照cost分桶

静态分区 + 分桶插入数据

动态分区 + 分桶插入数据

动静结合 + 分桶插入数据

 

静态分区 + 分桶插入数据:

insert into table clusterPar partition(uyear='2021',umonth='04') select utime,name,cost,yue from tmp where year(utime)='2021' and substring(utime,6,2)='04';

 

动态分区 + 分桶插入数据:

insert into table clusterPar partition(uyear,umonth) select utime,name,cost,yue,year(utime) uyear,month(utime) umonth from tmp;

 

动静结合 + 分桶插入数据:

insert into table clusterPar partition(uyear='2020',umonth) select utime,name,cost,yue,month(utime) umonth from tmp where year(utime)='2020';

 

 

 

 

目录
相关文章
|
4月前
|
SQL 存储 HIVE
hive分区与分桶
hive分区与分桶
55 1
|
SQL 存储 分布式计算
Hive学习---5、分区表和分桶表
Hive学习---5、分区表和分桶表
|
7月前
|
SQL 存储 HIVE
Hive中的分桶表是什么?请解释其作用和使用场景。
Hive中的分桶表是什么?请解释其作用和使用场景。
244 0
|
SQL 存储 分布式计算
Hive的分桶详解
Hive的分桶详解
129 0
|
SQL 分布式计算 Hadoop
【Hive】(八)Hive 的分区和分桶详解
【Hive】(八)Hive 的分区和分桶详解
499 0
【Hive】(八)Hive 的分区和分桶详解
|
分布式计算
|
SQL 存储 分布式计算
Apache Hive--DDL--创建表--分桶表创建&分桶数据导入| 学习笔记
快速学习Apache Hive--DDL--创建表--分桶表创建&分桶数据导入
153 0
Apache Hive--DDL--创建表--分桶表创建&分桶数据导入| 学习笔记
|
SQL 存储 数据库
|
SQL 存储 HIVE
hive分桶表
桶表是对数据进行哈希取值,然后放到不同文件中存储 创建一个桶表 create table bucket_table(id int,name string) clustered by(id) into 4 buckets; 加载数据 set hive.
1257 0
|
存储 SQL HIVE
Hive分区、分桶操作及其比较(转自:http://blog.csdn.net/epitomizelu/article/details/41911657)
1,Hive分区。      是指按照数据表的某列或某些列分为多个区,区从形式上可以理解为文件夹,比如我们要收集某个大型网站的日志数据,一个网站每天的日志数据存在同一张表上,由于每天会生成大量的日志,导致数据表的内容巨大,在查询时进行全表扫描耗费的资源非常多。那其实这个情况下,我们可以按照日期对数据表进行分区,不同日期的数据存放在不同的分区,在查询时只要指定分区字段的值就可以直接从该分区查找。
3312 0