ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Hive 的分桶表是什么?有什么作用?

2021-06-20 21:02:48  阅读:262  来源: 互联网

标签:分桶 -- demo buckets Hive user 数据 表是


前言

本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系

正文

  • 分桶是相对分区进行更细粒度的划分。

  • 分桶将整个数据内容安装某列属性值取 hash 值进行区分,具有相同 hash 值的数据进入到同一个文件中。

举例说明

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

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

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

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

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

作用

  1. 取样 sampling 更高效。没有分区的话需要扫描整个数据集。
  2. 提升某些查询操作效率,例如 map side join

实践

1、创建分桶表

# 在创建分桶表之前要执行命令
> set hive.enforce.bucketing=true;   //开启对分桶表的支持
> set mapreduce.job.reduces=4;       //设置与桶相同的reduce个数(默认只有一个reduce)
--分桶表
create table 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';

2、准备数据文件 buckets.txt

1	laowang1
2	laowang2
3	laowang3
4	laowang4
5	laowang5
6	laowang6
7	laowang7
8	laowang8
9	laowang9
10	laowang10

3、加载数据到普通表 user_demo 中

load data local inpath '/opt/bigdata/data/buckets.txt' into table user_demo;

4、加载数据到桶表user_buckets_demo中

insert into table user_buckets_demo select * from user_demo;

5、hdfs上查看表的数据目录

在这里插入图片描述

6、抽样查询桶表的数据

  • tablesample 抽样语句,语法:

tablesample(bucket x out of y)
- x表示从第几个桶开始取数据
- y表示桶数的倍数,一共需要从 桶数/y 个桶中取数据

select * from user_buckets_demo tablesample(bucket 1 out of 2)

-- 需要的总桶数=4/2=2个
-- 先从第1个桶中取出数据
-- 再从第1+2=3个桶中取出数据

标签:分桶,--,demo,buckets,Hive,user,数据,表是
来源: https://blog.csdn.net/Shockang/article/details/118074960

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有