[Hive]Hive中表连接的优化,加快查询速度

2024-04-16 09:08

本文主要是介绍[Hive]Hive中表连接的优化,加快查询速度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、多表连接的执行顺序和MapReduce job优化

selecta.ymd,a.price_close,b.price_close,c.price_close
from stocks a join stocks b on a.ymd = b.ymdjoin stocks c on a.ymd = c.ymd
where a.symbol = 'APPL' and b.symbol = 'IBM' and c.symbol = 'GE'

 

大多数情况下Hive会对每对 JOIN 连接对象启动一个MapReduce任务。上例中会首先启动一个MapReduce job对表 a 和表 b 进行连接操作,
然后会启动一个MapReuce job将第一个MapReduce job的输出和表 c 进行连接操作。

当对3个或者更多个表进行 JOIN 连接时,如果每个 ON 子句都使用相同的连接键的话,那么只会产生一个 Map Reduce job。
即Hive通过一个优化可以在同一个Map Reduce job 中连接多个表(需要每个子句中有相同的连接键)。

2、JOIN连接时表的顺序(内连接)
Hive假定查询中最后一个表是最大的那个表,在对每行记录进行连接操作时,它会尝试将其他表缓存起来,然后扫描最后那个表进行计算。
因此用户需要保证连续查询中表的大小从左往右是依次增加的。

用户也可以人为显示告诉查询优化器哪张表是大表,即使它在查询中不是位于最后面的,使用方式如下:

select /*+STREAMTABLE(s)*/s.ymd, s.symbol,s.price_close,d.dividend
from stocks s JOIN dividends d ON s.ymd = d.ymd and s.symbol = d.symbol
where s.symbol='APPL'

3、连接前通过WHERE过滤数据加快查询数据
最直接了当的方式是使用嵌套SELECT语句:

select s.ymd,s.symbol,s.price_close,d.dividends 
from (select * from stocks where symbol = 'AAPL' and exchange = 'NASDAQ')s
left outer join(select * from dividends where symbol = 'AAPL' and exchange = 'NASDAQ')d
on s.ymd = d.ymd

4、map-side JOIN 优化含有小表的连接
如果所有表中只有一张表是小表,则可以在最大的表通过mapper的时候将小表完全放到内存中。Hive可以在map端执行连接过程(称为mao-side JOIN),这是因为
Hive可以和内存中的小表逐一匹配,从而省略常规连接操作需要的reduce过程。不仅减少了reduce过程,有时也可以同时减少map过程的执行步骤。

set hive.auto.convert.join=true; --让Hive在必要的时候启动优化
hive.mapjoin.smalltable.filesize=25000000; --设置能够使用这个优化的小表的大小(单位是字节)

 

这篇关于[Hive]Hive中表连接的优化,加快查询速度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/908366

相关文章

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

浅谈mysql的sql_mode可能会限制你的查询

《浅谈mysql的sql_mode可能会限制你的查询》本文主要介绍了浅谈mysql的sql_mode可能会限制你的查询,这个问题主要说明的是,我们写的sql查询语句违背了聚合函数groupby的规则... 目录场景:问题描述原因分析:解决方案:第一种:修改后,只有当前生效,若是mysql服务重启,就会失效;

MySQL多列IN查询的实现

《MySQL多列IN查询的实现》多列IN查询是一种强大的筛选工具,它允许通过多字段组合快速过滤数据,本文主要介绍了MySQL多列IN查询的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析与优化1.

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

电脑win32spl.dll文件丢失咋办? win32spl.dll丢失无法连接打印机修复技巧

《电脑win32spl.dll文件丢失咋办?win32spl.dll丢失无法连接打印机修复技巧》电脑突然提示win32spl.dll文件丢失,打印机死活连不上,今天就来给大家详细讲解一下这个问题的解... 不知道大家在使用电脑的时候是否遇到过关于win32spl.dll文件丢失的问题,win32spl.dl