Hive 分桶表及作用

article/2025/8/15 9:42:52

Hive 分桶表

  • 一.概述
    • 分桶和分区的区别 ?
    • 如何创建分桶表 ?
    • 分桶表的作用 ?
  • 二. 补充:通用的 join 优化
      • (1)空key过滤
      • (2)空key转换
  • 三. 分桶表的作用
    • 2.1 数据的采样
    • 2.2 提升查询效率(多表join优化)
      • (一)小表 join 大表
      • (二)中表 join 大表
      • (三)大表 join 大表

一.概述

分区提供一个隔离数据和优化查询的便利方式。
不过,并非所有的数据集都可形成合理的分区。对于一张表或者分区,Hive 可以进一步组织成 ,也就是更为细粒度的数据范围划分;

分桶是将数据集分解成更容易管理的若干部分的另一个技术。
分区针对的是数据的存储路径;分桶针对的是数据文件。

分桶和分区的区别 ?

  1. 分桶针对的是数据文件,分区针对的是数据的存储路径;
  2. 分桶根据哈希函数进行分割,比较平均;分区按照字段的值进行分割,容易造成数据倾斜;
  3. 分桶分区互不干扰,可以把分区表进一步分桶;

如何创建分桶表 ?

在这里插入图片描述

分桶表的作用 ?

1)数据采样
案例1:如数据质量校验工作(一般会判断各个字段的结构信息是否完整);
案例2:在进行数据分析时,一天需要编写很多SQL,但是每编写一条SQL,都需要对SQL进行校验是否正确,
如果面对完整的数据集合做校验,会导致校验时间过长,影响进度,所以可以采样出一部分;

2)提升查询的效率(多表 join 优化)

二. 补充:通用的 join 优化

(1)空key过滤

使用场景
①【外连接时】才用,内连接已经默认过滤null了)
②不需null字段的情况下

有时 join 超时是因为某些 key 对应的数据太多,而相同 key 对应的数据都会发送到相同 的 reducer 上,从而导致内存不够。因此先干掉异常的key!

:在 join 之前就用 where is not null 过滤掉 ! 以免join之后再过滤;

select n.* from  (select * from nullidtable where id is not null)  nleft join bigtable o on n.id = o.id;

(2)空key转换

有时虽然某个 key 为空对应的数据很多,但是相应的数据不是异常数据,必须要包含在 join 的结果中
而同一个key的数据太大,同时进入一个reduce可能会导致数据倾斜;
此时可以表 a 中 key 为空的字段赋一个随机的值,使得数据随机均匀地 分不到不同的 reducer 上;

:用 nvl(id,rand()) 将为null 的字段赋为随机值;

select n.* from nullidtable n full join bigtable o on nvl ( n.id,rand() ) = o.id; 

三. 分桶表的作用

2.1 数据的采样

tablesample (bucket x out of y columnnanme)

x: 表示从第几个桶开始抽取,桶号是从1开始
y:抽取桶的比例,(总的桶数/2)=抽取桶的个数, 如10个桶,y=2即10/2=5个桶;
(y 必须是桶个数的因子或者倍数,如10个桶,y可以取2、5不能取3)
(x 一定要小于等于 y !)
columnname:表示按照哪个字段进行抽样(分桶字段)

tablesample 的位置:一定在from 表名的后面, 就算表有别名也要在别名的前面!

: select * from table tablesample (bucket x out of y on column) as q;


在这里插入图片描述
抽的桶个数: 20/5=4

2.2 提升查询效率(多表join优化)

(一)小表 join 大表

使用map joinBlock Cache缓存技术,和环形缓冲区无关),在进行join时,将小表放在每个读取大表的MapTask的内存上,让mapTask每读取一次大表都和内存中小表的数据进行join,将join的结果输出到reduce端,从而实现在map端即reduce之前完成join的操作!

如何开启:
①开启map -join ②设置小表的阀值 ,默认25mb
在这里插入图片描述

(二)中表 join 大表

解决方案
空key过滤,过滤成小表就能用map-join了
如:select n.* from (select * from nullidtable where id is not null) n left join bigtable o on n.id = o.id;

空key转换,可以尝试添加随机数(保证各个reduce接收的数据量差不多,减少数据倾斜)
如:select n.* from nullidtable n full join bigtable o on nvl ( n.id,rand() ) = o.id;

③基于分桶表bucket map join ,即两个表都以桶为单位拆分,让每个桶的数据分别去进行两个表的map-join,即中型表的桶就是map-join的小表,大表的桶和小表的桶对应进行join,比普通mapjoin效率更高;

bucket map join的条件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(三)大表 join 大表

整体思想和普通的bucket map join类似,将两个表按照桶进行拆分,不过此时两个表的数量相同,所以一个桶对应一个桶,每个桶达到map join的条件,一个桶放在一个maptask的内存中;
① 空key过滤,减少 join 的数量,提升效率;
② 空key转换,可以尝试添加随机数(保证各reduce接收的数据量接近,从而减少数据倾斜);
SMB(sort merge Buckect Map join);

SMB map join 条件
①开启参数
在这里插入图片描述
②两个表的bucket桶数量要相等! 而不是整数倍!
bucket列=join列=sort列


http://chatgpt.dhexx.cn/article/Ns1rUXsK.shtml

相关文章

服!造成程序员脱发的两大原因竟然是……

-“不管怎么样,这个项目一定要在这个ddl前完成。” 作为程序员,我们特别痛恨PM根据主观判断就随便订ddl!!有时候,因为一个小小的问题我们要回头检查好久,因此也特别容易不小心错过ddl。 -“Andy&#xff…

作为程序员你脱发吗?

每天熬夜加班,忙着敲代码,现在的你还有多少头发? 不管是80后还是90后,甚至是00后(热搜:98年的小伙子去植发),脱发好像是不可避免的事情,更何况是程序员? 记得…

Python程序员别秃了,护发防脱发小妙招,收藏吧

每个健康人大约有10万根左右的头发,每天可有70—100根脱落,同时也有等量头发再生,头发摸起来手感柔滑,一根一根的,结实牢固,易于梳理。 可是在生活中,有些人却经常出现这样的问题:头…

为程序员爆肝整理的防治脱发大集锦

防治脱发“感觉有用”系列 食疗 多吃蛋白质,鸡蛋清、瘦肉、牛奶和豆腐等高蛋白食物都是头发的最爱。此外,每周最好吃3次亚麻籽油,每次1茶匙,其中的植物雌激素可防脱发。缺铁也会导致大量脱发,建议多吃绿色和黄色的蔬…

绝密|程序员与脱发的故事

欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。 问题描述 现当今,脱发正成为办公室工作者的一个大烦恼,而在这批为脱发而担心…

《程序员脱发自救指南》笔记--头发基础知识

本博文源于《脱发自救指南》,如果接受审核,希望审核通过,毕竟这都是要面对的话题。脱发竟然发生在身边,我同学脱了。为了给予他更好的头发知识,我更新了此篇博文,收藏即可。 文章目录 1.头发的构造2、位于…

程序员脱发?看看各个创始人的发量?

前言 作为一个小白,在学习之前,我非常的明确,自己要学什么编程语言。   在这里我还是要说一下,我提供一个我的学习交流群,456926667,里面可以解决你们遇到的很多问题,共同学习进步 怎么判断某门编程语言掉不掉发? 说起掉发,在前言中讲过,程序员很多掉发原因都是…

1024全方位防脱发攻略?做发量和代码最刚的程序员

秋收冬藏,又到了年底冲刺撸代码的时节。 程序员宝宝天天和产品经理撕逼 半夜又和bug生死相依 某天,你选择了红色药丸,从Matrix中觉醒 突然发现: “我的头发呢!? 是不是有人在代码里面下了毒!&#x…

为什么程序员大多数都会脱发?( ConcurrentHashMap 并发)

为什么程序员大多数都会脱发? 其实这是一种误解,来看看现状数据说话,真实情况是这样的。 据脉脉统计出来的《程序员真相大调研2019》中,71.2%的程序员是不脱发的,仅有28.8%的程序员存在秃头情况。 为什么很多人印象中程…

程序员常秃顶?Python创始人笑了,防脱发还得学这门语言,不然干脆转行得了

程序员爱脱发,是不争的事实,经常面对电脑,工作压力大,都会导致脱发的产生。正所谓“聪明绝顶”,越厉害的程序员,谢顶的可能性就越大。那么,我们看看世界上顶级的程序员们,看看是否能…

为什么学计算机容易秃顶,为什么程序员更容易脱发?知道答案惊呆了!

在过去几年程序员是一个很抢手的行业,很多人都希望自己能够成为一名程序员,但最近几年程序员的工作岗位竞争压力却越来越小,有人指出这是因为程序员非常容易脱发,而且死得相对较早。为什么程序员更容易脱发呢? 长期面对…

程序员脱发自救:用计算机视觉技术安全植发

点击蓝色“程序猿DD”关注我 回复“资源”获取独家整理的学习资料! 脱发已经成了这个时代最严重的一种威胁。 从电商平台上护发产品的热销,到无处不在的植发广告,再到各大论坛里脱发话题的热度,都能窥见人们对于头发的深度焦虑。 …

程序员为什么更容易掉头发?

来源 | web前端教程(webjiaocheng) 近期,百度 CEO 李彦宏在中国科技大学院搞了一个演讲,后来到互动环节有个人提问:“李总对于科研狗防脱发有什么建议吗?” 瞬间全场都乐了,李彦宏说:“我不知道怎么回答&am…

学计算机应用技术掉头发,为什么程序员更容易脱发呢?

原标题:为什么程序员更容易脱发呢? 在过去几年程序员是一个很抢手的行业,很多人都希望自己能够成为一名程序员,但最近几年程序员的工作岗位竞争压力却越来越小,有人指出这是因为程序员非常容易脱发,而且死得…

程序员为什么更容易脱发?

转自微信号:web前端教程(webjiaocheng) 近期,百度CEO李彦宏在中国科技大学院搞了一个演讲,后来到互动环节有个人提问:“李总对于科研狗防脱发有什么建议吗?” 瞬间全场都乐了,李彦宏说:“我不知…

论程序员脱发是传言还是真的?

脱发到底和职业有关系吗? 脱发到底和职业有关系吗?为什么秃你心里没点数吗?遗传影响“我们”不秃为什么很多人印象中程序员秃头?先入为主(可能是历史上诸位编程大牛们的影响) 导致程序员脱发的真正原因1. 大…

秃头不用怕!程序员脱发自救指南来了

国家卫健委2019年的调查数据显示,我国脱发人数超2.5亿,平均每6人中就有1人脱发,其中男性约1.63亿,女性约0.88亿,30岁前脱发的比例高达84%,比上一代人的脱发年龄提前了20年,呈现明显的低龄化趋势…

Xshell的安装与使用

Xshell的安装与使用 一、作用二、安装三、连接虚拟机1. 登录虚拟机2.打开Xshell 四、连接中出现的一些错误 一、作用 Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。除此之外,其还有丰富的外观配色方案…

公司不让用Xshell,怎么办?

Xshell一直是我喜欢的终端工具,主要是因为它有“颜值”,但往往安逸的日子总是短暂,公司不准用破解或商业收费软件,无奈只能换用一些免费软件,接下来我将介绍PuTTY和MobaXterm两款可以商用的免费终端调试软件。 PuTTY …

xshell用ssh连接kali虚拟机超详细

Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。 Xshell 通过互联网安全连接到远程主机。 首先查看kali的IP地址 ifconfig 然后对xshell进行配置 配置名称,虚拟机IP,端口号默认22不用修…