一、除去多余操作

比如获取每个员工最高薪水记录

方案一:

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语句调优相关推荐

  1. hive的一些调优参数

    hive的一些调优参数 set hive.exec.dynamic.partition.mode=nonstrict; 使用动态分区 set hive.exec.max.dynamic.partiti ...

  2. 3mysql优化之SQL语句调优

    文件在:E:\学习文档子目录压缩\数据库\mysql\mysql优化\蚂蚁\蚂蚁1\3mysql优化之SQL语句调优 或 我的网盘\我的笔记\学习文档子目录压缩\数据库\mysql\mysql优化\蚂 ...

  3. MySQL SQL语句调优

    SQL语句调优 文章目录 SQL语句调优 一.大批量插入数据 1. 主键顺序插入 2. 关闭唯一性校验 3. 手动提交事务 二.优化insert语句 三.优化order by语句 1. 环境准备 2. ...

  4. Hive ETL 任务调优(参数篇)

    Hive 调优-参数篇 图片来源网络,点赞 工作中常用的 hive 参数调优,整理如下. 原则: 最少数据 最少字段 最少Job数 最少读取次数 避免数据倾斜 整体最优而不是局部最优 JVM 内存 文 ...

  5. 【Hive】性能调优 - EXPLAIN

    Hive版本: hive-1.1.0-cdh5.14.2 用户提交HiveQL查询后,Hive会把查询语句转换为MapReduce作业.Hive会自动完成整个执行过程,一般情况下,我们并不用知道内部是 ...

  6. MySQL百万级、千万级数据多表关联SQL语句调优

    本文不涉及复杂的底层数据结构,通过explain解释SQL,并根据可能出现的情况,来做具体的优化,使百万级.千万级数据表关联查询第一页结果能在2秒内完成(真实业务告警系统优化结果). 希望读者能够理解 ...

  7. mysql面试关联查询语句_MySQL百万级、千万级数据多表关联SQL语句调优

    作者:成金之路 www.cnblogs.com/uttu/p/6384541.html 本文不涉及复杂的底层数据结构,通过explain解释SQL,并根据可能出现的情况,来做具体的优化,使百万级.千万 ...

  8. oracle的delete语句加速,Oracle delete语句调优一例

    接到客户的邮件,说生产环境中执行某一条delete sql语句的时间超过了3个小时.最后客户无奈取消了这次数据清理,准备今天在申请时 今天刚上上班,就接到客户的邮件,说生产环境中执行某一条delete ...

  9. mysql俩个表之间关联语法_MySQL多表关联SQL语句调优

    本文不涉及复杂的底层数据结构,是通过explain解释SQL,并根据当前可能出现的情况,来做具体的优化,使百万级.千万级数据表关联查询第一页结果能在几秒内完成(真实业务告警系统优化结果).希望对您有一 ...

  10. mysql百万数据join_MySQL百万级、千万级数据多表关联SQL语句调优

    本文不涉及复杂的底层数据结构,通过explain解释SQL,并根据可能出现的情况,来做具体的优化,使百万级.千万级数据表关联查询第一页结果能在2秒内完成(真实业务告警系统优化结果). 希望读者能够理解 ...

最新文章

  1. 搞懂Kafka的这个问题,你离大厂就不远了!
  2. matlab实现彩色图像灰度化的三种方法
  3. Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 3 ----数据访问层
  4. 项目启动及需求分析(靳嘉豪、胡新宇、李晨曦、杨航、李瑶)团队作业
  5. Spring Boot 系列(一)快速入门
  6. springboot test_精益求精!Spring Boot 知识点全面回顾,带你重新细读源码!
  7. HTTP1.0 、 HTTP1.1、HTTP2.0的主要区别
  8. python模拟给qq发消息,python模拟QQ聊天--socket通信
  9. uFrame近况(2016年4月8日更新)
  10. 30 位互联网大佬,当年上了什么大学?
  11. Python数据预处理--Gensim构建语料词典
  12. protobuf的GZIP压缩
  13. notebook pip install 只有星号_只有300人的”乡镇企业“:1件卖8亿垄断全球,帮三星称王,比光刻机还重要...
  14. 华为手机灵敏度设置_和平精英灵敏度怎么调最稳华为手机?华为二指灵敏度调整设置一览[多图]...
  15. python猜大小程序_「每日一练」巧用python实现猜大小的游戏
  16. 基于springboot vue elementui酒店预订系统源码(毕设)
  17. 什么是Chrome稳定版,Beta版,Dev版和Canary版发布渠道?(转载)
  18. Mysql性能优化教程
  19. C++/C语言sizeof关键字详解
  20. 杭电2019计算机分数线,杭州电子科技大学2019年各省录取分数线及各专业录取分数线...

热门文章

  1. BZOJ3197:[SDOI2013]刺客信条——题解
  2. US-100超声波 使用
  3. php网站背景怎么弄全图,html 如何让背景图片充满全图,就是拉伸
  4. Oracle 12.2 RAC修改public ip address或public ip(subnet (netmask) or interface)方法
  5. DirectDraw不可用的解决方案
  6. 【有序充电】基于遗传算法对电动汽车有序充电进行优化附Matlab代码
  7. JAVA计算机毕业设计C语言教学辅导网站Mybatis+系统+数据库+调试部署
  8. 华为策略路由引流旁挂防火墙
  9. linux环境下MongoDB安装过程详解
  10. 从iphone5上市推迟时间看产品营销策略