hive分桶表详解

2023-11-06

为什么要用分桶表?

单个分区或者表中的数据量越来越大,当分区不能更细粒的划分数据时,所以会采用分桶技术将数据更细粒度的划分和管理
分区提供了一个隔离数据和优化查询的便利的方式.但是当分区的数量过多时,会产生过多的小分区,这样会给namenode带来较大的压力.分桶是将数据集分解成更容易管理的若干部分的另一个技术.

分桶的意义:

1、为了保存分桶查询结果的分桶结构(数据已经按照分桶字段进行了hash散列)
2、分桶表数据进行抽样和JOIN时可以提高MR程序效率

分桶技术:

[CLUSTERED BY (col_name, col_name, …) [SORTED BY (col_name
[ASC|DESC], …)] INTO num_buckets BUCKETS]
关键字:BUCKET

创建一张分桶表
create table if not exists buck1(
id int,
name string,
age int
)
clustered by (id) into 4 buckets
row format delimited
fields terminated by ','
;

创建成功
在这里插入图片描述
在我们导入数据前,需要将hive.enforce.bucketing的值设置为true,
这个参数将强制控制ruduce的个数去和我们指定的分桶个数相适配.

set hive.enforce.bucketing = true;

如果我们直接load数据到我们的分桶表是创建不出来的,是假的分桶
正确导入数据的方式
我们要先创建一张临时表(表的字段都一样,不要是分桶)将数据导入临时表,从临时表中导入数据到分桶表

create TEMPORARY table if not exists buck1_t(
id int,
name string,
age int
)
row format delimited
fields terminated by ','
;

创建临时表成功
在这里插入图片描述

将数据导入临时表

在这里插入图片描述
加载数据

load data local inpath '/opt/bbb' into table buck1_t;

加载成功
在这里插入图片描述
将临时表的数据导入分桶表中

insert into table buck1 
select * from buck1_t
cluster by id;

查看web界面分桶成功
在这里插入图片描述
我们可以看到,我们的客户数据被分成了四份.那么这四份是如何进行划分的呢?其实我们已经制定了按照id进行划分,因此hive使用hash散列的方式,将id个数对桶个数求余数,我们id为12个,对桶个数(4个)求余数,结果为3.这样每个桶最少有4条数据,同时这样的方式得到的桶内数据其实相当于是随机的.
我们再次执行select查询时,会发现数据是按照分桶显示的
在这里插入图片描述
cluster by和distribute by
在这里插入图片描述
在上面的select语句中,我们使用了cluster by语句执行分桶的方式.我们发现其实桶内的数据是按照id字段进行升序排列的.其实cluster by相当于distribute by+sort by.sort by默认按照升序进行排列.distribute by+sort by的组合会更加的灵活,因此我们可以去按照id分桶,按照age去进行排序.我们可以做如下的试验.
清空分桶表中数据 重新写入

truncate  table buck1;

按照id分桶,按照age降序排序 ,age为表中字段 desc可以换成asc代表升序

insert into table buck1
select * from buck1_t
distribute by id
sort by age desc;    

排序成功!id无序,age有序
在这里插入图片描述
对分桶表的查询 :
查询所有

select * from buck1 tablesample(bucket 1 out of 1 on id)  

查询第1个桶的数据

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

在这里插入图片描述
那个1可以为1-4,为几就是第几桶开始,查询1桶

分桶查询公式:

select * from t_bucket tablesample(bucket x out of y on xx);

x表示从哪个bucket进行抽样,桶计数从1开始.y用来计算抽取数据的量,计算方式为分桶数/y.假设我们一共分了128个桶,y设置为32,则表示要抽取4个bucket,如果x为12,则抽取的数据来自于12/13/14/15.y的值可以不为桶个数的公约数,可以为任意值.

分桶的好处

1.分桶加快了join查询的速度.
对于map端连接的情况,两个表以相同方式划分桶。处理左边表内某个桶的 mapper知道右边表内相匹配的行在对应的桶内。因此,mapper只需要获取那个桶 (这只是右边表内存储数据的一小部分)即可进行连接。这一优化方法并不一定要求 两个表必须桶的个数相同,两个表的桶个数是倍数关系也可以.这样便采用了Map-side join的方式,避免全表进行笛卡尔积的操作.

关于桶内排序的意义:
桶中的数据可以根据一个或多个列另外进行排序。由于这样对每个桶的连接变成了高效的归并排序(merge-sort), 因此可以进一步提升map端连接的效率。

分桶个数:
如果两个表的分桶个数之间没有什么倍数的关系,这样分桶表在做join时并不会提升效率,因为数据随机分发,桶和桶之间并没有对应关系.

2.使取样(sampling)更加的高效
在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便.
使用上面的 buck1_t我们进行演示.
假如我们使用的为一个大规模的数据集,我们只想去抽取部分数据进行查看.使用bucket表可以变得更加的高效

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hive分桶表详解 的相关文章

  • JAVA基础(JDK+环境变量+首个程序HelloWorld.java)

    Day01 Java开发笔记 1 交互方式 2 键盘基本功能键 3 键盘快捷键 4 常用dos命令 5 java语言平台版本 6 java语言特点 7 java的两大器件 8 第一个java程序 HelloWorld java 9 环境变量
  • 计算机视觉(五):使用SVM分类Cifar-10数据集

    1 引言 之前我们使用了K NN对Cifar 10数据集进行了图片分类 正确率只有不到30 但是还是比10 高的 手动滑稽 这次我们将学习使用SVM分类器来对Cafi 10数据集实现分类 但是正确率应该也不会很高 要想继续提高正确率 就要对
  • 操作系统——存储管理-段式存储组织——2020.11.25

    存储管理 段式存储组织 一丶段式存储 嗟险阻 叹飘零 关山万里作雄行 一丶段式存储 按用户作业中的自然段来划分逻辑空间 然后调入内存 段的长度可以不一样 我们在进行页式存储时 由于页内地址都是一样的 所以我们只需要去需要页号和页帧号就行了
  • 微信小程序:页面或者按钮为什么会抖一下?

    其实不仅仅是小程序 我们再搞前端点击按钮或者切换状态时都会出现页面 抖动 的情况 举个例子我们自己设置一些选项按钮 让用户切换选择对应选项 有的会发现切换这个对应的按钮会发现按钮会 抖动一下 之所以抖动的原因就是 切换 选择 和 未选择 的
  • [视频图像处理]1. 色域基础知识与色域转换公式

    常见色域基础知识与色域转换公式 所谓色域 Color Space 就是一种颜色的表示方法 针对不同的显示设备不同的系统 往往有不同的表示方法 目前被广泛使用的色域可以被分为三大类 RGB YIQ YUV YCrCb CMYK RGB应用最广
  • Linux常用命令_文件处理命令:su root

    文章目录 1 命令格式与目录处理命令ls 1 1 命令格式 1 2 目录处理命令 ls 2 目录处理命令 2 1 目录处理命令 mkdir 2 2 目录处理命令 cd 2 3 目录处理命令 pwd 2 4 目录处理命令 rmdir 2 5
  • 使用arcgis修改行政区划图边界

    打开ArcMap 我的是10 8版本的 1 添加行政区划图数据 文件 添加数据 添加数据 弹出添加数据框 点击红色框中的按钮 连接到数据所在文件夹 选择要处理的数据 添加 不便放入整体规划图 放大后选取部分作为示例 本次处理目的是把红色框中
  • 3d散列点云的曲率的求法

    1 取某个区域内的n个最近邻点根据局部抛物面拟合公式 z x y Ax 2 By 2 Cxy Dx Ey F 用最小二乘法可求出上面的各个系数 即可求得空间曲面函数的系数 2 根据公式 Km A 1 E 2 B 1 D 2 CDE 1 D
  • 合宙Air105

    基础资料 基于Air105开发板 Air105 LuatOS 文档 上手 开发上手 LuatOS 文档 探讨重点 对官方Socket网络接口demo中DTU连接示例 dtu demo lua 进行复现及分析 进行用阻塞方式做串口透传DTU内
  • 数据资源丨原始数据哪里找?这些网站要用好!(建议收藏)

    资料搜集是个相当繁琐与累的工作 也是投资入门的基本 良好的信息资料搜集能力有利于我们快速了解投资主体的基本情况 为后续的调研及一手资料的获得打下较好的基础 目录 一 搜索引擎 重点掌握 1 搜索关键字的选择 2 搜索技巧 3 搜索引擎推荐
  • pptp流量分析之搭建pptp测试服务器

    1 前言 最近研究常见vpn流量协议 需要产出检测规则对此类流量进行检测 遂需要搭建测试环境抓取测试流量 简单记录一下 2 环境准备 1 ubuntu22 04 服务器 2 win11 客户机 3 安装及配置 3 1 ubuntu服务器安装
  • 高通平台USB 2.0和USB 3.0接口充电器识别原理

    1 BC 1 2 1 1 充电器类型探测 1 DCD DP上有150mV 10uA x 15K欧姆下拉电阻 的电压 DM上电压为0 2 Primary Det DP发起检测DM DP上加载0 6V电压 DM上电压为0 充电器类型是SDP D

随机推荐

  • Pikachu漏洞靶场的简介、下载与安装

    文章目录 简介 下载 安装 简介 pikachu是一个漏洞练习平台 其中包含了常见的web安全漏洞 Burt Force 暴力 漏洞 XSS 跨站脚本漏洞 CSRF 跨站请求伪造 SQL Inject SQL注入漏洞 RCE 远程命令 代码
  • [WSL-1-Ubuntu]使用oh-my-zsh美化你的WSL(附脚本)

    在腾讯云买的那个1c2g的服务器 想用mycat搭建一个mysql cluser 用docker部署了一主一从内存就没了一半 可一主一从没啥作用 起码也得2主2从吧 而且还有HA呢 但内存和钱包不给力 所以就想到WSL这个方案 在开wsl这
  • 发现1个拿来即用的Python高级脚本,收藏!

    今天 给大家推荐一些用Python爬虫做私活的渠道 先给各位还不熟悉Python爬虫的朋友介绍一下 可以短时间获得大量资料 可以进一步数据分析 当然也可以获得收益 学会Python爬虫以后 还可以通过各种渠道 网站接单 接单群 私人介绍 接
  • 今日头条信息流广告怎么做?(今日头条信息流广告费用解析)

    国内的各种渠道千千万 主流的广告平台不算多也不算少 而今日头条与其它平台最大区别在于 个性化推荐和智能分发 可以简单理解为 今日头条上投放的广告 是通过 机器人代码 过滤再分发出去的 因此了解 机器人 在分发过程中遵循的规则 随着网络的发展
  • pytorch: RuntimeError: DataLoader worker (pid(s) 27292) exited unexpectedly

    厉害了 用win10特有的bug 搞半天 就是把pytorch下dataloader的其中一个num workers参数注释掉 可能是win10只有一个thread的原因 torch utils data DataLoader self d
  • 同一套服务如何应对不同终端的需求——服务适配

    经过前几个章节的实践 会员已可以绑定手机号 更新个人信息 绑定个人车辆信息 开通月卡 签到等功能 下面从客户端查看自己的数据入手 再聊聊服务调用的问题 简单处理 我们已经将用户数据进行垂直拆分 分布在不同数据库中 当客户端数据展现时 就需要
  • 参加2012中国数据库技术大会大会有感

    上周末参加了 DTCC Database Technology Conference China 2012中国数据库技术大会 见到了很多熟人 开了3天 好多议题 我去了后两天 第一天是周五 没好意思向公司请假 干货还是很多的 比某些扯淡的行
  • 代理服务器(Proxy)

    目录 1 什么是代理服务器 2 代理服务器的作用 3 代理服务器的工作流程 4 安装代理服务器软件及配置文件解析 squid 5 正向代理 6 修改数据存放位置 7 设置磁盘使用阈值 代理 两字顾名思义就是以代理人的身份去帮助其他人取得所需
  • C++数组:发工资

    题目描述 财务处要给公司的n位员工发工资了 请你帮助计算最少要多少张人民币才能给每位员工发工资而不必找零呢 已知人民币的面额为100元 50元 10元 5元 2元和1元这6种 输入格式 第一个值为正整数n 后面接着n个正整数表示n位员工的工
  • Python天文数据处理——Astropy

    前言 Astropy是一个用于天文数据处理的Python包 它包含了许多常用的天文学函数和工具 可以用于处理 分析和可视化各种类型的天文数据 Astropy最新版本是v4 3 官网地址为https www astropy org Astro
  • Django计算机毕业设计个性化大学生图书推荐系统(程序+LW)Python

    该项目含有源码 文档 程序 数据库 配套开发软件 软件安装教程 项目运行 环境配置 Pychram社区版 python3 7 7 Mysql5 7 HBuilderX list pip Navicat11 Django nodejs 项目技
  • Linux进行AES加密每次结果都不一致并且解密失败报错

    1 现象 windows操作系统下进行 123456 的AES加密 encrypted message is below QLNYZyjRnKF zxAjzDt lw decrypted message is below 123456 阿里
  • [数值分析拟合]Matlab三次样条插值拟合数据

    三次样条插值是一种运用极为广泛的工程插值算法 本文章编写的函数默认使用端点处的导数值代替给定的两端点的导数值使用三转角构造法进行插值 该函数也可传入端点导数数值进行分析 对数据进行方便而迅速的拟合 但是目前没有三弯矩构造法 一 三次样条插值
  • Qt信号槽——传递自定义数据类型

    Qt信号槽 传递自定义数据类型 Qt的信号槽机制支持传递int short double等C语言的基本类型的变量 也可以传递Qt自己的数据类型 但是在传递用户自己定义的数据类型 或其他数据类型是需要进行注册的 原因 当一个signal被放到
  • 解决python打包的exe程序运行报错闪退不留痕迹问题

    打了exe 运行的时候往往会因为找不到文件而报错闪退 此时根本不知道程序问题出在哪里 也因为程序执行太快而抓不到屏 最简单的方法如下 1 打开已打包好的exe文件目录 2 资源管理器输入cmd 运行命令行程序 3 命令行窗口内运行exe程序
  • JDBC与Mybitabs实习笔记

    JDBC与mybatis学习 JDBC的使用 1 导入依赖jar包 2 加载驱动类 3 创建连接对象 4 创建传输对象 SQL的执行器 将SQL语句传输给SQL服务器 5 执行SQL语句 6 关闭资源 1 导入依赖jar包 去mvnreoi
  • oracle存储过程----mybatis传入参数调用存储过程查询

    上一篇的链接是 oracle存储过程 异常的写法介绍 有这样的需求 比如共有表B1 B17 17张表 现在要求传入年度 行政区划 查询出所有符合条件的B1 B17的所有记录 当然 仅查询这些表中共同有的字段 因为这算是跨表查询了 一般我们写
  • vue基础入门

    1 vue简介 1 1 什么是vue 官方概念 Vue 读音 vju 类似于view 是一套用于构建用户界面的前端框架 1 2 vue 的特性 vue 框架的特性 主要体现在如下两方面 数据驱动视图 双向数据绑定 数据驱动视图 在使用了 v
  • 用 卡莱特A35播放盒子 在局域网内更新单行文本

    将播放盒和led正常连接之后 1 到官方网下载配套软件PlayerMaster 下载开发文档 2 使用配套软件 PlayerMaster 找到并查看目标设备的ip 3 在开发文档中找到 ColorlightRESTfulAPI V1 9 中
  • hive分桶表详解

    为什么要用分桶表 单个分区或者表中的数据量越来越大 当分区不能更细粒的划分数据时 所以会采用分桶技术将数据更细粒度的划分和管理 分区提供了一个隔离数据和优化查询的便利的方式 但是当分区的数量过多时 会产生过多的小分区 这样会给namenod