Hive优化(1)——分桶采样

分桶(Bucketing)

分桶是将数据按照某个字段的哈希值进行分组存储的一种技术。它的原理是将数据按照指定字段的哈希值分成固定数量的桶,将每条记录分配到对应的桶中。分桶可以帮助优化特定类型的查询,例如连接查询和聚合操作,因为它可以将数据分布得更加均匀,减少数据倾斜,提高查询效率。

在Hive中创建分桶表时,需要使用CLUSTERED BY语句指定分桶字段,并且使用INTO语句指定桶的数量。例如:

CREATE TABLE bucketed_table ( column1 INT, column2 STRING, ... ) CLUSTERED BY (column1) INTO 4 BUCKETS;

use itcast;
create table tb_test(
    id int,
    name string
)
row format delimited fields terminated by ',';
insert into tb_test values
                        (1,'张三'),
                        (2,'李四'),
                        (3,'沙和尚'),
                        (4,'唐僧'),
                        (5,'孙悟空'),
                        (6,'猪八戒');

-- 分桶表
create table tb_test_buckets(
    id int,
    name string
)clustered by(id) into 6 buckets
row format delimited fields terminated by ',';
insert into tb_test_buckets values
                        (1,'张三'),
                        (2,'李四'),
                        (3,'沙和尚'),
                        (4,'唐僧'),
                        (5,'孙悟空'),
                        (6,'猪八戒');

采样(Sampling)

采样是从数据集中抽取部分样本数据进行分析和查询的一种技术。它可以帮助在大数据集上进行快速的试验和分析,而不需要处理整个数据集,从而节省时间和资源。在Hive中,可以使用TABLESAMPLE子句来进行采样查询。

SELECT * FROM table_name TABLESAMPLE(BUCKET x OUT OF y);

其中,x表示每个桶采样的概率,y表示桶的数量。这个语句会从数据表中按照指定的桶数和采样概率进行采样。

分桶采样

  1. 当表的数据量比较庞大的时候, 在编写SQL语句后, 需要首先测试 SQL是否可以正常的执行, 需要在表中执行查询操作, 由于表数据量比较庞大, 在测试一条SQL的时候整个运行的时间比较久, 为了提升测试效率, 可以整个表抽样出一部分的数据, 进行测试

  2. 校验数据的可行性(质量校验)

  3. 进行统计分析的时候, 并不需要统计出具体的指标, 可能统计的都是一些相对性指标, 比如说一些比率(合格率)问题, 此时可以通过采样处理。

tablesample ( bucket x out of y [on column|rand()])

Hive中的分桶和采样是优化查询性能的两种重要技术,它们可以帮助提高查询效率、减少资源消耗和加速数据处理。

分桶表:

取值数量 = 分桶数/y值

x值决定从哪个分桶文件开始取值

未分桶表:

1-按字段分桶 hash(字段)%y值=余数 相同余数放在一起

2-按照x值找余数对应的值 x=1 就找第一个余数 0 x=2 找第二个余数 1 x=3 找第三个余数 2


分桶采样的优化

        分桶采样是将分桶和采样两种技术结合起来,可以在处理大数据集时更加高效地执行查询。通过在每个桶中进行采样,可以保证采样的数据分布更加均匀,避免了数据倾斜的问题。这样可以在保持查询效率的同时,减少了对资源的需求。

在Hive中,可以结合CLUSTERED BYTABLESAMPLE来进行分桶采样。例如:

SELECT * FROM bucketed_table TABLESAMPLE(BUCKET x OUT OF y);

这样可以在分桶的基础上对每个桶进行采样,从而达到更好的查询性能和资源利用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/9958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024OD机试卷-攀登者1 (java\python\c++)

题目:攀登者1 题目描述 攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。 地图表示为一维数组,数组的索引代表水平位置,数组的元素代表相对海拔高度。其中数组元素0代表地面。 例如:[0,1,2,4,3,1,0,0,1,2,3,1,2,1,0],代表如下图所示的地图,地图中有两个山脉位置分别…

TS-声明文件

目录 1,什么是声明文件2,作用3,位置1,tsconfig.json 配置的包含目录中2,node_modules/types 目录中3,typeRoots 配置项中的目录4,与 js 文件同名同目录的文件 4,编写1,ts…

java中List的toArray()方法

toArray()介绍 toArray()方法是List接口中提供的方法,用来实现List对象转换为数组对象的功能。 toArray()方法有两种形式,无参方法和带泛型的方法,接下来给出例子。 1.toArray() // toArray()源码public Object[] toArray() {return Arrays.…

携手鲲鹏昇腾 HashData展现云原生数仓创新力量

​5月9日-11日,鲲鹏昇腾开发者大会2024在北京中关村国际创新中心举行,众多行业领袖、专家学者及优秀开发们齐聚一堂,分享产业趋势、技术创新和应用实践。 酷克数据作为华为鲲鹏生态重要合作伙伴,受邀出席本次大会,展示…

C++ Primer Plus 知识的讲解

程序模板 #pragma region xxx.cpp //xxx.cpp -- xxx #if 0 #include <iostream> int main() {using namespace std;return 0; } #endif #pragma endregionC Primer Plus 知识的讲解 第一章&#xff1a;预备知识 本章内容包括&#xff1a; .C语言和C的发展历史和基本原…

大语言模型LLM原理篇

大模型席卷全球&#xff0c;彷佛得模型者得天下。对于IT行业来说&#xff0c;以后可能没有各种软件了&#xff0c;只有各种各样的智体&#xff08;Agent&#xff09;调用各种各样的API。在这种大势下&#xff0c;笔者也阅读了很多大模型相关的资料&#xff0c;和很多新手一样&a…

sass 详解

Sass&#xff08;Syntactically Awesome Style Sheets 的缩写&#xff09;是一种 CSS 预处理器&#xff0c;用于使CSS的使用更加高效和动态。它允许使用变量、嵌套规则、混合和函数等功能&#xff0c;以编写更可维护、更强大的代码。Sass 主要有两种语法格式&#xff1a;SCSS&a…

【Redis】用户登录校验

对于用 redis 对用户进行登录校验&#xff0c;大致可分为以下六步&#xff1a; 首先通过查询数据库来查找具有提供的用户名、密码和delFlag值为0的用户。如果未找到用户&#xff0c;则抛出一个带有消息"用户不存在"的ClientException&#xff08;用户不存在&#xf…

【产品应用】一体化伺服电机在拉力系统设备中的应用

随着工业自动化的快速发展&#xff0c;高精度、高效率的传动与控制设备需求日益增长。一体化伺服电机作为一种集驱动、控制、反馈于一体的智能型电机&#xff0c;因其卓越的性能&#xff0c;在各类工业设备中得到了广泛应用。特别是在拉力实验设备中&#xff0c;一体化伺服电机…

WebRTC 的核心:RTCPeerConnection

WebRTC 的核心&#xff1a;RTCPeerConnection WebRTC 的核心&#xff1a;RTCPeerConnection创建 RTCPeerConnection 对象RTCPeerConnection 与本地音视频数据绑定媒体协商ICE什么是 Candidate&#xff1f;收集 Candidate交换 Candidate尝试连接 SDP 与 Candidate 消息的互换远端…

线程同步--互斥锁,读写锁

线程同步 基本概念 线程的能力在于能够方便地通过全局变量或共享内存来交换信息&#xff0c;但这也带来了并发控制的复杂性&#xff0c;主要表现在如何安全地管理多个线程对共享资源的访问。这里涉及到几个关键的概念和技术&#xff1a; 临界区&#xff08;Critical Section…

jenkins部署想定报错

报错&#xff1a; 解决办法&#xff1a; 登录被编译的设备&#xff0c;清楚旧代码&#xff0c;在重新执行

Dependencies:查找项目中dll关联文件是否缺失。

前言 Dependencies工具作为一款优秀的DLL解析工具&#xff0c;能让你很直观地看到DLL的相关信息&#xff0c;如具备哪些功能函数、参数&#xff0c;又比如该DLL基于哪些DLL运行。判断该dll基于哪些dll运行&#xff0c;如果基于的dll丢失&#xff0c;那么就会提示。就能判断缺少…

【Ubuntu永久授权串口设备读取权限‘/dev/ttyUSB0‘】

Ubuntu永久授权串口设备读取权限 1 问题描述2 解决方案2.1 查看ttyUSB0权限&#xff0c;拥有者是root&#xff0c;所属用户组为dialout2.2 查看dialout用户组成员&#xff0c;如图所示&#xff0c;普通用户y不在dialout组中2.3 将普通用户y加入dialout组中2.4 再次查看dialout用…

知识付费系统规格表,添加家长微信后需要做什么?怎么维护?

一般来说&#xff0c;在认识家长的时候&#xff0c;都会加家长微信好友&#xff0c;这是为了能利用微信这个平台&#xff0c;达到更好做业绩的效果&#xff0c;教育机构一定要学会利用微信维护好与家长关系&#xff0c;从而吸引更多家长&#xff0c;添加家长微信后需要做什么?…

Redis-新数据类型-Hyperloglog

新数据类型-Hyperloglog 简介 在我们做站点流量统计的时候一般会统计页面UV(独立访客:unique visitor)和PV(即页面浏览量&#xff1a;page view)。 什么是基数&#xff1f; 数据集&#xff5b;1&#xff0c;2&#xff0c;5&#xff0c;7&#xff0c;5&#xff0c;7&#xff…

AI绘画的基本原理是什么?

目录 一、AI绘画的基本原理是什么&#xff1f; 二、Python中有几个库可以用于AI绘画&#xff1f; 三、OpenCV画一个人形 四、AI画的红苹果 一、AI绘画的基本原理是什么&#xff1f; AI绘画的原理基于机器学习和人工智能技术&#xff0c;通过这些技术模型能够理解文本描述并…

Php 如何使用进程

在PHP中&#xff0c;使用进程主要依赖于pcntl扩展&#xff0c;这是一个用于实现Unix风格的多进程编程的扩展 使用pcntl扩展 安装与启用pcntl扩展&#xff1a; 在大多数PHP发行版中&#xff0c;pcntl可能默认未启用。你需要确保它在php.ini文件中被激活&#xff0c;或者在编译P…

centos安装paddlespeech各种报错解决方案

背景 windows系统安装paddlespeech一路顺利 centos安装之前也是正常 今天centos再次安装各种报错,避免以后遇到浪费时间,记录下来,也给大家节约时间 报错 报错1 module numpy has no attribute complex. 解决方案 降低numpy # 1. 卸载当前numpy库 pip uninstall numpy…

设计模式-08 - 模板方法模式 Template Method

设计模式-08 - 模板方法模式 Template Method 1.定义 模板方法模式是一种设计模式&#xff0c;它定义了一个操作的骨架&#xff0c;而由子类来决定如何实现该操作的某些步骤。它允许子类在不改变算法结构的情况下重定义算法的特定步骤。 模板方法模式适合用于以下情况&am…