`

hive查询和优化

    博客分类:
  • Hive
 
阅读更多

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基础与架构 **Hive**作为Hadoop生态中的重要组成部分,被广泛应用于大数据分析领域。它通过提供类SQL语言(HiveQL)来简化对Hadoop分布式文件系统(HDFS)中存储的大规模数据集...

    Hive查询优化整理与Hive简易版思维导图

    本文将深入探讨Hive查询优化的一些关键点,并结合个人实践经验和整理的Hive简易版思维导图,帮助你更好地理解和运用Hive。 一、Hive查询优化基础 1. **表分区**:分区是Hive提高查询效率的重要手段。通过将大表按...

    hive常见的优化方案ppt

    在大数据处理领域,Hive作为一个基于Hadoop的数据仓库工具,被广泛用于数据分析和查询。然而,随着数据量的增加,Hive性能问题逐渐显现,如数据倾斜、负载不均衡等,严重影响了处理效率。以下是一些针对Hive性能优化...

    hive参数优化总结

    Hive 是一个基于 Hadoop 的数据仓库工具,用于对大规模数据进行查询、分析和处理。为了提高 Hive 的性能和效率,参数优化是非常重要的一步。本文档将总结 Hive 参数优化的相关知识点,并对 Hive 的理解产生一定的...

    基于Hadoop+Hive的数据查询优化设计与实现

    6. 数据查询优化:介绍了基于Hadoop和Hive的数据查询优化方法,涵盖了动态分区表、索引优化和查询优化等方面的知识点。 7. 系统设计:介绍了基于Hadoop和Hive的系统设计,涵盖了系统架构、部署和配置等方面的知识点...

    Hive性能优化总结

    ### Hive性能优化总结 #### 一、Hadoop与Hive计算框架特性引发的问题 Hadoop作为大数据处理平台,其核心优势在于能够高效处理大规模数据集。然而,在具体的应用场景中,尤其是在Hive作为数据仓库使用时,仍存在...

    Hive优化.docx

    在大数据处理领域,Hive作为一个基于Hadoop的数据仓库工具,被广泛用于数据分析和查询。针对Hive的性能优化,可以从多个角度入手,特别是在处理复杂的Join操作时。以下是根据标题、描述以及部分内容提炼出的关键知识...

    hive优化案例

    Hive作业的规模决定着优化层级,一个Hive作业的优化和一万的Hive作业的优化截然不同。 拥有1万多个Hive作业的大电商如何进行Hive优化的?本系列课结合企业实战和场景从作业架构层面、Hql(Hive sql)语法层面、Hive...

    HiveSQL详细和优化

    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高级分析函数与优化.rar_hive_hive 函数优化_hive 分析 大数据_hive高级优化_oldwlc

    此外,Hive的分区和桶表策略能进一步优化查询性能。 4. **Hive高级优化**: 高级优化包括表和列的压缩、数据倾斜处理、Join优化、SubQuery优化、以及使用Explain命令分析查询计划等。压缩可以减小存储空间,数据...

    hive监控巡检优化文档

    - **CDH-hive优化参数**:参考Cloudera提供的调优文档,针对不同场景调整参数配置。 通过以上对Hive监控、巡检和优化的知识点介绍,可以更好地管理和维护Hive系统,提升大数据处理效率和稳定性。

    hive优化总结

    hive优化总结 Hive优化总结是Hive性能...Hive优化总结涉及了HIVE的参数设置、HQL语言的写法、JOIN操作的优化、MapReduce操作的优化、列裁剪、分区裁剪等多个方面,通过对这些方面的优化,可以提高Hive的性能和效率。

    java_hive简单查询

    为了跟踪查询性能和调试问题,可以启用Hive的日志记录,并结合Hadoop的YARN或Ambari监控工具进行性能分析。 通过以上步骤,你将能够利用Java与Hive进行有效的交互,执行简单的查询以及更复杂的分析任务。确保理解...

    Hive思维导图之Hive优化

    Hive思维导图之Hive优化

    Hive优化案例、Hive数据处理模式、Hive常见问题与优化、Hive实践

    Hive优化案例、Hive数据处理模式、Hive常见问题与优化、Hive实践 Hive是一种基于Hadoop的数据仓库工具,用于对大规模数据进行处理和分析。在大数据时代,Hive的应用非常广泛,本文将从Hive优化案例、Hive数据处理...

    hive原理及查询优化

    学习掌握hive原理及查询优化的必备之书学习掌握hive原理及查询优化的必备之书

    大数据hive数据倾斜,hive-sql优化

    数据模型设计是指根据业务需求设计数据模型,以提高数据存储和查询效率。常见的数据模型设计方法包括: 1. 事实表和维度表设计:使用事实表和维度表来存储数据,提高查询效率。 2. 星型模型、雪花模型和星座模型:...

    深入浅出Hive企业级架构优化、Hive Sql优化、压缩和分布式缓存

    2. **索引优化**:虽然 Hive 不支持传统意义上的索引,但可以通过创建外部表和使用索引文件等方式来加速查询过程。 3. **表结构设计**:合理设计表结构对于提高查询性能至关重要。例如,使用合适的分桶策略可以减少...

    hive性能优化

    优化Hive查询时,应考虑如何设计数据的物理存储布局,以及如何根据查询模式选择合适的数据分区和桶策略。选择适当的数据格式和了解HDFS的特性对于优化读写操作也是十分关键的。同时,合理地规范化数据结构可以帮助...

Global site tag (gtag.js) - Google Analytics