对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive也是针对某一列进行桶的组织。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。

把表(或者分区)组织成桶(Bucket)有两个理由:

(1)获得更高的查询处理效率。桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构。具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接 (Map-side join)高效的实现。比如JOIN操作。对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量。

(2)使取样(sampling)更高效。在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。

按我的理解,所谓Hive中的分桶,实际就是指的MapReduce中的分区。根据Reduce的数量,分成不同个数的文件。

我们以一个demo进行说明。

创建分桶表

drop tablestu_buck;create table stu_buck(id int, name string, score double)clustered by(id)

sortedby(id ASC)into 4buckets

row format delimited

fields terminatedby ‘,‘;

设置变量,设置分桶为true, 设置reduce数量是分桶的数量个数

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

我们从另外一个表student查询数据放到该表中,student中的表数据如下:

开始往创建的分通表插入数据(插入数据需要是已分桶, 且排序的)

可以使用distribute by(id) sort by(id asc)

排序和分桶的字段相同的时候也可以使用Cluster by(字段)

注意使用cluster by 就等同于分桶+排序(sort)

可以尝试以下几种方式:

insert into tablestu_buckselect id,name,score from student distribute by(id) sort by(id asc);insert overwrite tablestu_buckselect id,name,score from student distribute by(id) sort by(id asc);insert overwrite tablestu_buckselect id,name,score from student cluster by(id);insert overwrite tablestu_buckselect id,name,score from student cluster by(id) sort by(id); 报错,cluster 和 sort 不能共存

效果:

我们来查看以下文件的内容:

dfs -cat /user/hive/warehouse/test.db/stu_buck/000000_0;

dfs -cat /user/hive/warehouse/test.db/stu_buck/000001_0;

dfs -cat /user/hive/warehouse/test.db/stu_buck/000002_0;

dfs -cat /user/hive/warehouse/test.db/stu_buck/000003_0;

注:1、order by 会对输入做全局排序,因此只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。

2、sort by不是全局排序,其在数据进入reducer前完成排序。因此,如果用sort by进行排序,并且设置mapred.reduce.tasks>1,则sort by只保证每个reducer的输出有序,不保证全局有序。

3、distribute by(字段)根据指定的字段将数据分到不同的reducer,且分发算法是hash散列。

4、Cluster by(字段) 除了具有Distribute by的功能外,还会对该字段进行排序。

5、创建分桶表并不意味着load进数据也是分桶的,你必须先分好桶,然后再放到表中。

因此,如果分桶和sort字段是同一个时,此时,cluster by = distribute by + sort by

分桶表的作用:最大的作用是用来提高join操作的效率;但是两者的分桶数要相同或者成倍数。

为什么可以提高join操作的效率呢?因为按照MapReduce的分区算法,是Id的HashCode值模上ReduceTaskNumbers,所以一个ID会分到同一个桶中,这样合并就不用整个表遍历求笛卡尔积了,对应的桶合并就可以了。

hive 修改分桶数 分桶表_Hive中的分桶相关推荐

  1. sqoop导出 建表_hive中orc表sqoop导出到mysql

    环境: sqoop版本:1.4.6 hive版本:2.1.1 hadoop版本:2.7.3 起因: orc表导出到mysql有时碰到空字符串的问题一直没有时间整理,这次测试一下 结论: hive中为s ...

  2. hive查看一张表的分区字段_Hive表的分区与分桶

    1.Hive分区表 Hive使用select语句进行查询的时候一般会扫描整个表内容,会消耗很多时间做没必要的工作.Hive可以在创建表的时候指定分区空间,这样在做查询的时候就可以很好的提高查询的效率. ...

  3. 一文说透hive中的分桶及抽样查询

    目录 0 引 言 1 分桶与分区的区别 2 分桶及抽样查询 3 小 结 0 引 言 本文围绕hive中分桶问题进行展开研究,分析了hive分桶与分区的区别,分桶的相关原理.分桶的优势,并对分桶的操作方 ...

  4. android4.4系统 分屏,基于Android系统的宽屏后视镜分屏方法及系统与流程

    本发明涉及后视镜应用系统领域,尤其涉及一种基于Android系统的宽屏后视镜分屏方法及系统. 背景技术: 后视镜是驾驶员坐在驾驶室座位上直接获取汽车后方.侧方和下方等外部信息的工具.为了驾驶员操作方便 ...

  5. 查中考成绩为什么显示服务器错误,2019中考查分网站打不开怎么办 为什么会打不开...

    中考阅卷工作结束后,就会公布分数线,考生们就可以查分了.那么,查分网站打不开怎么办呢?为什么会打不开?下面和小编一起来看看吧! 中考查分网站为什么会打不开 中考查分网站打不开有以下几个原因: 首先,考 ...

  6. hive 修改分桶数 分桶表_疯狂Hive之DDL操作二(三)

    分区表创建 在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作.有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition分区概念 分区表指的是在创建表的时 ...

  7. hive 修改分桶数 分桶表_hive 学习之路(五)、Hive的分区表与分桶表

    Hive将表划分为分区(partition)表和分桶(bucket)表. 分区可以让数据的部分查询变得更快,也就是说,在加载数据的时候可以指定加载某一部分数据,并不是全量的数据. 分桶表通常是在原始数 ...

  8. hive 修改分区备注_Hive分区、分桶操作及其区别

    点击上方"风控圈子"  选择"星标"公众号 每天早上8:30,一起实现自我增值 Hive是基于Hadoop的一个数据仓库工具,使用类SQL的查询语句,即HQL对 ...

  9. hive 建表,分桶表(clustered by)、分桶且桶内排序(clustered by+sorted by)、分区表(partitioned by)、分区分桶一起用

    一.分桶表 1.建表语句 create table test_bucket_sorted ( id int comment 'ID', name string comment '名字' ) comme ...

最新文章

  1. 万万没想到,1200 年前老祖宗们就知道大数据了
  2. MPTCP 源码分析(五) 接收端窗口值
  3. C# 单元测试简单入门
  4. easyre-153 testre寒假逆向生涯(13/100)
  5. 揭秘阿里人工智能实验室首款智能音箱——天猫精灵X1
  6. Selenium-三种等待方式
  7. 二叉树:HDU1754
  8. 苹果7手机严重卡顿_苹果手机仅配备4GB运存都不会卡顿,安卓系统为何要更多内存?...
  9. 怎样用shell计算linux内存,计算Linux内存,CUP,硬盘使用率的shell脚本
  10. 判断一个整数的奇偶性php,【算法】- 判断一个整数是否是奇数
  11. 【Android】AsyncTask机制
  12. chrome最新版本下载
  13. 智慧水务项目建设方案
  14. 经典算法大全之费式数列
  15. python蒙特卡洛模拟return_蒙特卡罗方法入门
  16. phpStorm 配置关联php手册
  17. 两个三进制数相加,输出一个结果为三进制形式的和
  18. 你尿尿的时长是不是21秒?2次登上Nature封面的他,靠研究拉尿获得“诺贝尔奖”.........
  19. 英特尔OneAPI介绍
  20. div布局系列 - 两端对齐的方法

热门文章

  1. 计算机科学和PYTHON编程导论_15_概率与分布
  2. 2023 USNews全美计算机研究生院排名发布!MIT、CMU分别称霸总榜和AI分榜
  3. Google Research进军蛋白质结构预测:为Pfam数据库新增680万标注数据
  4. 程序员开发进度太慢被告上法庭!公司索赔90万,拿出百度词条当证据
  5. 计算机视觉系统学习书籍/综述汇总
  6. 关于寒假和春季开学!教育部通知来了!近400所高校寒假时间已公布!
  7. 英伟达GPU“屠榜”,谷歌TPU“退赛”,MLPerf最新推理榜单出炉
  8. Attention is All You Need?LSTM提出者:我看未必
  9. 矩阵乘法的优化及其在卷积中的应用
  10. Linux的19 个装B的命令,记得搂一遍!!!