Hive-HQL语句调优
一、除去多余操作
比如获取每个员工最高薪水记录
方案一:
selecet *
from a
inner join(select user_id,max(salary) as max_salary from a group by user_id) b
on a.user_id = b.user_id and a.salary = b.max_salary
方案二:减少了join操作,性能提升
select *
from
(select *,row_number()over(partition by user_id order by salary desc) as rank_salary from a ) as a
where a.rank_salary = 1
二、distinct聚合优化
方法一:只有一个reduce处理全量数据,并发度不够,存在单点瓶颈
SELECT COUNT(DISTINCT userid) FROM emp ;
方法二:reduce就会有多个,性能提升很多
SELECT COUNT(userid) FROM (SELECT distinct userid FROM emp) as sub;
方法三:reduce就会有多个,性能提升很多
SELECT COUNT(*) from (SELECT userid FROM emp group by userid ) as sub
三、使用with as 代替子查询
with sub as
(SELECT userid FROM emp group by userid)select count(*) from sub;
四、聚合技巧-使用窗口函数grouping sets、with cube
例如:分别按照性别、年龄、部门查询人数,要分别写三次SQL,执行三次
优化方法:可用grouping sets接在group by后,括号里写出组合的维度,用逗号隔开
select sex,age,dept,count(user_id)
from a
group by sex,age,dept
grouping sets (sex,age,dept);-- 若还想查看部门的性别分布
select sex,age,dept,count(user_id)
from a
group by sex,age,dept
grouping sets (sex,age,dept,(dept,sex));
with cube:根据group by 维度的所有组合进行聚合
-- 维度:性别、年龄、部门、性别+年龄、性别+部门、年龄+部门、性别+年龄+部门
select sex,age,dept,count(user_id)
from a
group by sex,age,dept
with cube;
五、join连接优化
1、小表在前,大表在后。
2、使用相同的连接键(只产生一个MapReduce job)。
3、尽早过滤数据。 减少每个阶段的数据量,对于分区表要加分区,同时只选择需要使用到的字段。逻辑过于复杂时引入中间表。
六、解决数据倾斜
1、数据倾斜的表现
任务进度⻓时间维持在99%(或100%),查看任务监控⻚面,发现只有少量(1个或几个)reduce子任务未完成。因为其处理的数据量和其他reduce差异过大。 2、数据倾斜原因与方法
1)空值产生的数据倾斜
方法:表连接时若连接条件里有很多空值,建议在连接条件中增加过滤。
-- 例如:
select * from a inner join b on a.id = b.id and a.id is not null and b.id is not null
2)大小表连接(其中一张表很大,另一张很小)
方法:将小表放在内存里,在map端做join(表小放在左侧)
3)两张表连接条件的字段数据类型不一致
方法:将连接条件的字段类型转换成一致的
附思维导图:
Hive-HQL语句调优相关推荐
- hive的一些调优参数
hive的一些调优参数 set hive.exec.dynamic.partition.mode=nonstrict; 使用动态分区 set hive.exec.max.dynamic.partiti ...
- 3mysql优化之SQL语句调优
文件在:E:\学习文档子目录压缩\数据库\mysql\mysql优化\蚂蚁\蚂蚁1\3mysql优化之SQL语句调优 或 我的网盘\我的笔记\学习文档子目录压缩\数据库\mysql\mysql优化\蚂 ...
- MySQL SQL语句调优
SQL语句调优 文章目录 SQL语句调优 一.大批量插入数据 1. 主键顺序插入 2. 关闭唯一性校验 3. 手动提交事务 二.优化insert语句 三.优化order by语句 1. 环境准备 2. ...
- Hive ETL 任务调优(参数篇)
Hive 调优-参数篇 图片来源网络,点赞 工作中常用的 hive 参数调优,整理如下. 原则: 最少数据 最少字段 最少Job数 最少读取次数 避免数据倾斜 整体最优而不是局部最优 JVM 内存 文 ...
- 【Hive】性能调优 - EXPLAIN
Hive版本: hive-1.1.0-cdh5.14.2 用户提交HiveQL查询后,Hive会把查询语句转换为MapReduce作业.Hive会自动完成整个执行过程,一般情况下,我们并不用知道内部是 ...
- MySQL百万级、千万级数据多表关联SQL语句调优
本文不涉及复杂的底层数据结构,通过explain解释SQL,并根据可能出现的情况,来做具体的优化,使百万级.千万级数据表关联查询第一页结果能在2秒内完成(真实业务告警系统优化结果). 希望读者能够理解 ...
- mysql面试关联查询语句_MySQL百万级、千万级数据多表关联SQL语句调优
作者:成金之路 www.cnblogs.com/uttu/p/6384541.html 本文不涉及复杂的底层数据结构,通过explain解释SQL,并根据可能出现的情况,来做具体的优化,使百万级.千万 ...
- oracle的delete语句加速,Oracle delete语句调优一例
接到客户的邮件,说生产环境中执行某一条delete sql语句的时间超过了3个小时.最后客户无奈取消了这次数据清理,准备今天在申请时 今天刚上上班,就接到客户的邮件,说生产环境中执行某一条delete ...
- mysql俩个表之间关联语法_MySQL多表关联SQL语句调优
本文不涉及复杂的底层数据结构,是通过explain解释SQL,并根据当前可能出现的情况,来做具体的优化,使百万级.千万级数据表关联查询第一页结果能在几秒内完成(真实业务告警系统优化结果).希望对您有一 ...
- mysql百万数据join_MySQL百万级、千万级数据多表关联SQL语句调优
本文不涉及复杂的底层数据结构,通过explain解释SQL,并根据可能出现的情况,来做具体的优化,使百万级.千万级数据表关联查询第一页结果能在2秒内完成(真实业务告警系统优化结果). 希望读者能够理解 ...
最新文章
- 搞懂Kafka的这个问题,你离大厂就不远了!
- matlab实现彩色图像灰度化的三种方法
- Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 3 ----数据访问层
- 项目启动及需求分析(靳嘉豪、胡新宇、李晨曦、杨航、李瑶)团队作业
- Spring Boot 系列(一)快速入门
- springboot test_精益求精!Spring Boot 知识点全面回顾,带你重新细读源码!
- HTTP1.0 、 HTTP1.1、HTTP2.0的主要区别
- python模拟给qq发消息,python模拟QQ聊天--socket通信
- uFrame近况(2016年4月8日更新)
- 30 位互联网大佬,当年上了什么大学?
- Python数据预处理--Gensim构建语料词典
- protobuf的GZIP压缩
- notebook pip install 只有星号_只有300人的”乡镇企业“:1件卖8亿垄断全球,帮三星称王,比光刻机还重要...
- 华为手机灵敏度设置_和平精英灵敏度怎么调最稳华为手机?华为二指灵敏度调整设置一览[多图]...
- python猜大小程序_「每日一练」巧用python实现猜大小的游戏
- 基于springboot vue elementui酒店预订系统源码(毕设)
- 什么是Chrome稳定版,Beta版,Dev版和Canary版发布渠道?(转载)
- Mysql性能优化教程
- C++/C语言sizeof关键字详解
- 杭电2019计算机分数线,杭州电子科技大学2019年各省录取分数线及各专业录取分数线...
热门文章
- BZOJ3197:[SDOI2013]刺客信条——题解
- US-100超声波 使用
- php网站背景怎么弄全图,html 如何让背景图片充满全图,就是拉伸
- Oracle 12.2 RAC修改public ip address或public ip(subnet (netmask) or interface)方法
- DirectDraw不可用的解决方案
- 【有序充电】基于遗传算法对电动汽车有序充电进行优化附Matlab代码
- JAVA计算机毕业设计C语言教学辅导网站Mybatis+系统+数据库+调试部署
- 华为策略路由引流旁挂防火墙
- linux环境下MongoDB安装过程详解
- 从iphone5上市推迟时间看产品营销策略