Hive之分桶表与实战

1:分桶表结构 

2:分桶表原理

①分桶是相对分区进行更细粒度的划分,Hive表或分区表可进一步的分桶。

②分桶将整个数据内容按照某列取hash值,对桶的个数取模的方式决定该条记录存放在哪个桶当中;具有相同hash值的数据进入到同一个文件中。

        比如按照name属性分为3个桶,就是对name属性值的hash值对3取摸,按照取模结果对数据分桶。

        取模结果为 0 的数据记录存放到一个文件

        取模结果为 1 的数据记录存放到一个文件

        取模结果为 2 的数据记录存放到一个文件

3:分桶表作用

①取样sampling更高效

         没有分桶的话需要扫描整个数据集

         做数据应用

②提升某些查询操作效率

         例如map side join

4:实战演练:创建分桶表        

①在创建分桶表之前要执行的命令

set hive.enforce.bucketing=true; #开启对分桶表的支持

set mapreduce.job.reduces=4; #设置与桶相同的reduce个数(默认只有一个reduce)

②进入hive客户端然后执行以下命令

use myhive;
set hive.enforce.bucketing=true; 
set mapreduce.job.reduces=4;  

-- 创建分桶表
create table myhive.user_buckets_demo(id int, name string)
clustered by(id) 
into 4 buckets 
row format delimited fields terminated by '\t';

-- 创建普通表
create table user_demo(id int, name string)
row format delimited fields terminated by '\t';

 ③准备数据文件 buckets.txt

#在linux当中执行以下命令
cd /install/hivedatas/
vim user_bucket.txt

1	anzhulababy1
2	anzhulababy2
3	anzhulababy3
4	anzhulababy4
5	anzhulababy5
6	anzhulababy6
7	anzhulababy7
8	anzhulababy8
9	anzhulababy9
10	anzhulababy10

④加载数据到普通表 user_demo 中

load data local inpath '/install/hivedatas/user_bucket.txt'  overwrite into table user_demo; 

⑤加载数据到桶表user_buckets_demo中

insert into table user_buckets_demo select * from user_demo;

⑥hdfs上查看表的数据目录

 ⑦抽样查询桶表的数据         

        tablesample抽样语句语法:tablesample(bucket x out of y)

                x表示从第几个桶开始做数据采样

                y与进行采样的桶数的个数、每个采样桶的采样比例有关        

select * from user_buckets_demo ;
 需要采样的总桶数 = 分桶数/y = 结果ret
  分两种情况
  
  情况一:ret>1
  需要采样的总桶数 = 分桶数/y = 4/2 = 2个
  即从2个桶进行数据的采样
  x = 1 先从第1个桶中取出数据
  x+y = 1+2 = 3 再从第3个桶中取出数据
  
  情况二:ret<1
  假设还是此表user_buckets_demo,分桶数是4
  x=1
  y=8
  ∴需要采样的总桶数 = 分桶数/y = 4/8 = 0.5
  ret<1,只能从1个桶进行数据的采样
  x = 1 从第1个桶中取出0.5一半的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不要迷恋发哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值