`
381573578
  • 浏览: 72178 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

hive sql 优化

 
阅读更多

Hive是将符合SQL语法的字符串解析生成可以在Hadoop上执行的MapReduce的工具。使用Hive尽量按照分布式计算的一些特点来设计sql,和传统关系型数据库有区别,

所以需要去掉原有关系型数据库下开发的一些固有思维。

 

基本原则:

1. 尽量尽早地过滤数据,减少每个阶段的数据量,对于分区表要加分区,同时只选择需要使用到的字段

select ... from A

join B

on A.key = B.key

where A.userid>10

  • and B.userid<10

    • and A.dt='20120417' and B.dt='20120417';

应该改写为:

select .... from (select .... from A

  • where dt='201200417'
    • and userid>10

    • ) a

join ( select .... from B

  • where dt='201200417'
    • and userid < 10

  • ) b

on a.key = b.key;

2. 尽量原子化操作,尽量避免一个SQL包含复杂逻辑

可以使用中间表来完成复杂的逻辑

drop table if exists tmp_table_1;

create table if not exists tmp_table_1 as

select ......;

drop table if exists tmp_table_2;

create table if not exists tmp_table_2 as

select ......;

drop table if exists result_table;

create table if not exists result_table as

select ......;

drop table if exists tmp_table_1;

drop table if exists tmp_table_2;

3. 单个SQL所起的JOB个数尽量控制在5个以下

4. 小表要注意放在join的左边,原因是在 Join 操作的 Reduce 阶段,位于 Join 操作符左边的表的内容会被加载进内存,将条目少的表放在左边,可以有效减少发生内存溢出错误的几率。否则会引起磁盘和内存的大量消耗

5. 写SQL要先了解数据本身的特点,如果有join ,group操作的话,要注意是否会有数据倾斜(所谓数据倾斜,说的是由于数据分布不均匀,个别值集中占据大部分数据量,加上hadoop的计算模式,导致计算资源不均匀引起性能下降。)

如果出现数据倾斜,应当做如下处理:

set hive.exec.reducers.max=200;

set mapred.reduce.tasks= 200;---增大Reduce个数

set hive.groupby.mapaggr.checkinterval=100000 ;--这个是group的键对应的记录条数超过这个值则会进行分拆,值根据具体数据量设置

set hive.groupby.skewindata=true; --如果是group by过程出现倾斜 应该设置为true

set hive.skewjoin.key=100000; --这个是join的键对应的记录条数超过这个值则会进行分拆,值根据具体数据量设置

set hive.optimize.skewjoin=true;--如果是join 过程出现倾斜 应该设置为true

6. 如果union all的部分个数大于2,或者每个union部分数据量大,应该拆成多个insert into 语句,实际测试过程中,执行时间能提升50%

insert overwite table tablename partition (dt= ....)

select ..... from (

  • select ... from A union all select ... from B union all select ... from C
    • ) R

where ...;

可以改写为:

insert into table tablename partition (dt= ....)

select .... from A

WHERE ...;

insert into table tablename partition (dt= ....)

select .... from B

WHERE ...;

insert into table tablename partition (dt= ....)

select .... from C

WHERE ...;

7. 对分区表进行操作需要对分区进行过滤(如:ds=$yday)。 特别是在JOIN操作的时候,分区过滤(如:ds=$yday)需要放到 ON语句 或子查询 里面。

  • 不能放到ON后面的WHERE里,这样会扫描所有表,最后才判断分区。也就是说程序会先执行JOIN操作,才会执行最后的WHERE操作。

8. 在JOIN操作中,后面被连续JOIN且同一字段,只会执行一个mapreduce操作。

推荐的: SELECT * FROM a LEFT OUTER JOIN b ON a.t=b.t LEFT OUTER JOIN c ON a.t=c.t;

 

效率低下的: SELECT * FROM a LEFT OUTER JOIN b ON a.t=b.t LEFT OUTER JOIN c ON b.t=c.t;

分享到:
评论

相关推荐

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

    ### 深入浅出Hive企业级架构优化 #### Hive概述 Apache Hive 是一个基于 Hadoop 的数据...总之,通过对 Hive 架构、SQL 语句、数据压缩以及分布式缓存等方面的综合优化,可以有效提升 Hive 在企业级应用中的表现。

    HiveSQL优化手册

    ### HiveSQL优化手册 #### 数据倾斜优化 **数据倾斜**是指在执行Hive查询时,由于数据分布不均,导致一部分任务处理的数据量远大于其他任务的现象,这将严重影响整个查询的性能。针对数据倾斜问题,可以从以下几个...

    Hive sql优化

    ### Hive SQL优化技巧详解 #### 一、数据倾斜优化 数据倾斜是指在Hive查询过程中,数据不均匀地分布在不同的Reducer上,导致某些Reducer处理的数据量远大于其他Reducer,从而影响整个查询性能的问题。解决数据倾斜...

    深入浅出Hive企业级架构优化、Hive Sql优化,视频

    深入浅出Hive企业级架构优化、Hive Sql优化,视频!!!

    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 SQL性能优化

    #### 三、Hive SQL优化技巧与注意事项 1. **列裁剪和分区裁剪**: - **分区裁剪**:通过WHERE子句中的条件来指定查询特定的分区,避免全表扫描,显著提高查询效率。 - **列裁剪**:仅选择需要的列,减少数据传输...

    基于 Antlr4 的 Hive SQL 解析.zip

    5. **测试和优化**:编写测试用例,确保解析器能够正确处理各种复杂的Hive SQL查询,同时优化性能,降低资源消耗。 6. **实现元数据追踪**:如果题目涉及到“线系”(lineage),可能还需要追踪查询中的数据来源和...

    Hive SQL 编译过程详解

    理解Hive SQL的编译过程对于解决Hive的问题、优化SQL查询和定制功能至关重要。通过对MapReduce实现SQL操作原理的深入理解,我们可以更好地掌握Hive的工作机制,从而提高数据分析的效率和准确性。在日常工作中,这样...

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

    二、Hive SQL优化策略 1. **避免使用SELECT ***:仅选择需要的列可以减少数据传输和处理量。 2. **使用WHERE子句过滤数据**:尽早过滤掉不需要的数据,减少数据处理量。 3. **JOIN操作优化**:尽量使用INNER JOIN...

    Hive思维导图之Hive优化

    Hive思维导图之Hive优化

    hive常见的优化方案ppt

    以下是一些针对Hive性能优化的常见策略: 1. **开启Hive压缩**:压缩可以显著减少数据存储空间,加快读取速度。可以开启Hive的中间数据和最终数据压缩,使用`hive.exec.compress.output=true`和`hive.exec.compress...

    最强HiveSQL开发指南.pdf

    总结起来,《最强HiveSQL开发指南》全面涵盖了Hive的基本操作、查询语法、性能优化策略及实战经验,是学习和提升Hive技能的宝贵资源。通过深入学习和实践,读者可以更好地驾驭Hive,应对大数据环境下的各种挑战。

    HiveSQL编译原理

    本文将深入探讨HiveSQL的编译过程,包括词法分析、语法分析、优化以及执行计划生成等关键步骤。 1. **词法分析**:这是编译过程的第一步,也称为扫描或Tokenization。HiveSQL的解析器接收用户输入的SQL语句,将其...

    HIVE-SQL开发规范.docx

    总结,Hive SQL开发规范强调了正确选择数据类型、合理设计表结构、优化查询性能以及遵循安全原则的重要性。理解并遵循这些规范,将帮助开发者写出高效、稳定的Hive查询,实现大数据分析的目标。

    hive sql详解 经典

    HiveQL是Hive的SQL方言,支持常见的SQL操作,如SELECT、FROM、WHERE、GROUP BY等,同时也有针对大数据处理的独特功能,如分桶(Bucketing)、分区(Partitioning)和倾斜Join(Skewed Join)优化。 3. **数据模型*...

    HiveSQL解析原理.docx

    ### HiveSQL解析原理详解 #### 一、引言 Hive作为一款建立在Hadoop之上的数据仓库系统,被广泛应用于大数据处理场景中。对于众多企业和组织而言,它不仅是存储和管理海量数据的有效手段,同时也是进行数据分析的...

    Hive总结.docx

    Hive SQL优化主要包括以下几个方面: - 使用合适的JOIN策略,如减少笛卡尔积、避免全表JOIN。 - 使用分区和桶表,提高查询效率。 - 利用索引加速查询。 - 合理选择计算引擎,Tez和Spark相对于MapReduce能提供更好的...

    Hive与SQL优化.md

    Hive与SQL优化.md

Global site tag (gtag.js) - Google Analytics