1:Local Model(本地模式):
select user,item from table limit 10;(生成mapreduce)
select * from table limit 10;(不会生存mapreduce)
2:列剪裁 :hive在读数据的时候,可以只读取查询中所需要用到的列
3:分区剪裁:在查询的过程中减少不必要的分区
使用explain dependency语法,获取table和partition
4:hive的优化机制减少job数:如果join的key相同,不管有多少个表,都会合并为一个mapreduce
(1) select a.val,b.val,c.val from a join b on (a.key = b.key1) join c on (c.key = b.key1) 1个mapreduce
(2) select a.val,b.val,c.val from a join b on (a.key = b.key1) join c in (c.key = b.key2) 2个
5:job输入输出优化
(1) insert overwrite table tmp1 select .. from a where 条件1
(2) insert overwrite table tmp1 select .. from a where 条件2
上述合为1个
from a
insert overwrite table tmp1 select ... where 条件1
insert overwrite table tmp2 select ... where 条件2
6:避免笛卡儿积
select ... from woa_all_device_info_his A
left outer join(
select * from woa_all_info_his B
where 条件
) C
on A.app_id = C.app_id and A.imei = C.imei
7: 在join前过滤掉不需要的数据:包括分区过滤和条件过滤
8:小表放前大表放后:因为在Reduce阶段,位于join操作符左边的表的内容会被加载进内存,载入条目较少的表,可以有效减少内存溢出。当小表与大表join时,采用mapjoin,即在map端完成。可以避免数据倾斜。
select /*+mapjoin(b)*/ a.key,a.value from a join b on a.key = b.key
9: left semi join : 限制条件只能在on子句中设置过滤条件,在where子句,select子句或其他地方过滤不行
select a.key,b.key from a left semi join b on (a.key = b.key)
left semi join 与 join 的区别:b表有重复值的情况下left semi join 产生一条,join会产生多条
10:union all优化:局限于非嵌套查询
(1)
select * from (
select c1,c2,c3 from t1 group by c1,c2,c3
union all
select c1,c2,c3 from t2 group by c1,c2,c3
) t3;
(2)
select * from (
select * from t1
union all
select * from t2
) t3 group by c1,c2,c3
11: Distinct 与 Group by(去重优化):使用group by替代distinct
12:排序优化
1、order by实现全局排序,一个reduce实现,由于不能并发执行,所以效率低,在hive.mapred.mode=strict模式下,使用order by时必须添加limit限制,能够大幅减少reducer数据规模
2、distribute by,sort by实现部分有序,单个reduce输出的结果是有序,效率高,和distribute by一起使用
3、cluster by col1 = distribute col1 sort by col1
13: 数据倾斜:任务进度只有reduce子任务未完成,因为处理的数据量和其他的reduce差异过大
reduce处理的数据量不一致,有的大有的小,应该与shuffle排序后的作为reduce的输入数据有关。http://www.cnblogs.com/ggjucheng/archive/2013/01/03/2842860.html
14:视图可以允许保存一个查询并像对待表一样对待这个查询进行操作。
(1): 使用视图来降低查询复杂度(当具有嵌套查询时)
from(select * from people join cart on ( cart.people_id = people.id) where firstname='john') select a.lastname where a.id =3
create view shorter join as select * from people join cart on (cart.people_id = people.id) where firstname = 'john'
select lastname from shorter where id = 3
(2): 使用视图来限制基于条件过滤的数据:通过创建视图来限制数据访问可以用来保护信息不被随意查询
(3): 动态分区中的视图和map类型
(4): hive会先解析视图,然后使用解析结果再来解析整个查询语句,(查询语句和视图语句可能会合并一个单一的实际查询,如果视图有个limit 100,使用整个视图有个limit 200,最终只会limit100)
(5):没有固化视图
15: hive应该避免对非标准化数据进行连接操作。
16: 同一份数据多种处理
如:
insert overwrite table sales select * from history where action = ‘purchased’
insert overwrite table credits select * from history where action = ‘returned’
修改为
from history
insert overwrite table sales select * where action = ‘purchased’
insert overwrite table sales select * where action = ‘returned’
17: 分桶表数据存储(当不能形成合理的分区时,避免创建太多的分区,可以采用分桶技术)
分桶是将数据集分解成更容易管理的若干部分的技术
同样需要一个分桶字段
相关推荐
### Hive查询优化详解 #### 一、Hive基础与架构 **Hive**作为Hadoop生态中的重要组成部分,被广泛应用于大数据分析领域。它通过提供类SQL语言(HiveQL)来简化对Hadoop分布式文件系统(HDFS)中存储的大规模数据集...
本文将深入探讨Hive查询优化的一些关键点,并结合个人实践经验和整理的Hive简易版思维导图,帮助你更好地理解和运用Hive。 一、Hive查询优化基础 1. **表分区**:分区是Hive提高查询效率的重要手段。通过将大表按...
在大数据处理领域,Hive作为一个基于Hadoop的数据仓库工具,被广泛用于数据分析和查询。然而,随着数据量的增加,Hive性能问题逐渐显现,如数据倾斜、负载不均衡等,严重影响了处理效率。以下是一些针对Hive性能优化...
Hive 是一个基于 Hadoop 的数据仓库工具,用于对大规模数据进行查询、分析和处理。为了提高 Hive 的性能和效率,参数优化是非常重要的一步。本文档将总结 Hive 参数优化的相关知识点,并对 Hive 的理解产生一定的...
6. 数据查询优化:介绍了基于Hadoop和Hive的数据查询优化方法,涵盖了动态分区表、索引优化和查询优化等方面的知识点。 7. 系统设计:介绍了基于Hadoop和Hive的系统设计,涵盖了系统架构、部署和配置等方面的知识点...
### Hive性能优化总结 #### 一、Hadoop与Hive计算框架特性引发的问题 Hadoop作为大数据处理平台,其核心优势在于能够高效处理大规模数据集。然而,在具体的应用场景中,尤其是在Hive作为数据仓库使用时,仍存在...
在大数据处理领域,Hive作为一个基于Hadoop的数据仓库工具,被广泛用于数据分析和查询。针对Hive的性能优化,可以从多个角度入手,特别是在处理复杂的Join操作时。以下是根据标题、描述以及部分内容提炼出的关键知识...
Hive作业的规模决定着优化层级,一个Hive作业的优化和一万的Hive作业的优化截然不同。 拥有1万多个Hive作业的大电商如何进行Hive优化的?本系列课结合企业实战和场景从作业架构层面、Hql(Hive sql)语法层面、Hive...
HiveSQL详细和优化,以及部分个人点评 This is a brief tutorial that provides an introduction on how to use Apache Hive HiveQL with Hadoop Distributed File System. This tutorial can be your first step ...
此外,Hive的分区和桶表策略能进一步优化查询性能。 4. **Hive高级优化**: 高级优化包括表和列的压缩、数据倾斜处理、Join优化、SubQuery优化、以及使用Explain命令分析查询计划等。压缩可以减小存储空间,数据...
- **CDH-hive优化参数**:参考Cloudera提供的调优文档,针对不同场景调整参数配置。 通过以上对Hive监控、巡检和优化的知识点介绍,可以更好地管理和维护Hive系统,提升大数据处理效率和稳定性。
hive优化总结 Hive优化总结是Hive性能...Hive优化总结涉及了HIVE的参数设置、HQL语言的写法、JOIN操作的优化、MapReduce操作的优化、列裁剪、分区裁剪等多个方面,通过对这些方面的优化,可以提高Hive的性能和效率。
为了跟踪查询性能和调试问题,可以启用Hive的日志记录,并结合Hadoop的YARN或Ambari监控工具进行性能分析。 通过以上步骤,你将能够利用Java与Hive进行有效的交互,执行简单的查询以及更复杂的分析任务。确保理解...
Hive思维导图之Hive优化
Hive优化案例、Hive数据处理模式、Hive常见问题与优化、Hive实践 Hive是一种基于Hadoop的数据仓库工具,用于对大规模数据进行处理和分析。在大数据时代,Hive的应用非常广泛,本文将从Hive优化案例、Hive数据处理...
学习掌握hive原理及查询优化的必备之书学习掌握hive原理及查询优化的必备之书
数据模型设计是指根据业务需求设计数据模型,以提高数据存储和查询效率。常见的数据模型设计方法包括: 1. 事实表和维度表设计:使用事实表和维度表来存储数据,提高查询效率。 2. 星型模型、雪花模型和星座模型:...
2. **索引优化**:虽然 Hive 不支持传统意义上的索引,但可以通过创建外部表和使用索引文件等方式来加速查询过程。 3. **表结构设计**:合理设计表结构对于提高查询性能至关重要。例如,使用合适的分桶策略可以减少...
优化Hive查询时,应考虑如何设计数据的物理存储布局,以及如何根据查询模式选择合适的数据分区和桶策略。选择适当的数据格式和了解HDFS的特性对于优化读写操作也是十分关键的。同时,合理地规范化数据结构可以帮助...