HiveSql语法优化三 :join优化

这篇具有很好参考价值的文章主要介绍了HiveSql语法优化三 :join优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        前面提到过:Hive拥有多种join算法,包括Common Join,Map Join,Bucket Map Join,Sort Merge Buckt Map Join等;每种join算法都有对应的优化方案。

Map Join

        在优化阶段,如果能将Common Join优化为Map Join算法,那就会优化成Map Join,但是在编译阶段如果所需的表大小是未知的(例如对子查询进行join操作),那么Hive会在编译阶段生成一个条件任务,计划列表中包含转换后的Map Join任务以及原有的Common Join任务。Common Join作后备计划。大致思路如下图所示:HiveSql语法优化三 :join优化,大数据

 Map join自动转换的具体判断逻辑如下图所示:

HiveSql语法优化三 :join优化,大数据

        首先是查看hive.auto .convert.join参数是否开启,然后根据sql语句寻找大表候选人,再检测条件任务是否开启,一般开启条件任务即可(走右边),hive会自动判断,系统分别为每个大表候选人生成map join计划,如果已知其他表的大小超过hive.mapjoin.smalltable.filesize参数,则排除该计划。如果判断有map join计划生成,则会将所有生成的map join 计划和common join 计划一同加入任务列表,最终执行哪个运行时决定;

        再来看左边,若大表之外的小表均已知,且大小总和小于noconditionaltask.size,则生成最优的mapjoin计划(最大的表生成大表,最小的表作为小表),如果不是,继续走右边。

        如果子任务也是map join 计划,且他们的小表都小于noconditionaltask.size,那就会合并mapjoin计划。比如有a,b,c三张表:他们的关联字段不一样,因此需要两个maptask去执行,在join a和b的时候,b是小表,走mapjoin ;在join 中间结果和c的时候,c是小表,走mapjoin;那么如果b+c小于noconditionaltask.size,就会将b,c缓存在内存中,去遍历a的记录先去join b的hashtable中的字段,再去c的hashtable中寻找关联字段进行join。这相当于一个中终极mapjoin计划。

上面几个参数如下:

--启动Map Join自动转换

set hive.auto.convert.join=true;

--一个Common Join operator转为Map Join operator的判断条件,若该Common Join相关的表中,存在n-1张表的已知大小总和<=该值,则生成一个Map Join计划,此时可能存在多种n-1张表的组合均满足该条件,则hive会为每种满足条件的组合均生成一个Map Join计划,同时还会保留原有的Common Join计划作为后备(back up)计划,实际运行时,优先执行Map Join计划,若不能执行成功,则启动Common Join后备计划。

set hive.mapjoin.smalltable.filesize=250000;

--开启无条件转Map Join

set hive.auto.convert.join.noconditionaltask=true;

--无条件转Map Join时的小表之和阈值,若一个Common Join operator相关的表中,存在n-1张表的大小总和<=该值,此时hive便不会再为每种n-1张表的组合均生成Map Join计划,同时也不会保留Common Join作为后备计划。而是只生成一个最优的Map Join计划。

set hive.auto.convert.join.noconditionaltask.size=10000000;文章来源地址https://www.toymoban.com/news/detail-781282.html

到了这里,关于HiveSql语法优化三 :join优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 业务数据LEFT JOIN 多表查询慢--优化操作

    首先你会想到,给表加索引,那么mysql会给主键自动建立索引吗? 会的,当然会。 在我们查询的业务表操作的时候,表业务数据庞大起来的时候,以及left join多的时候,甚至多表关联到几十张表的时候,查询是慢到不行。 这时候,只需要给表join查询的字段,及表结构,进行索

    2024年02月02日
    浏览(40)
  • spark sql 数据倾斜--join 同时开窗去重的问题优化

    背景: 需求:在一张查询日志表中,有百亿数据,需要join上维表,再根据几个字段进行去重 开窗去重和join 一定要分步进行 ,按照需求先做join再开窗,或者去重完成后在进行join。 dwd_tmp1 中存在百亿用户查询日志数据 数据倾斜 数据量超百亿,资源给到200 * 2c * 20G,执行引擎

    2024年02月11日
    浏览(54)
  • HiveSQL在使用聚合类函数的时候性能分析和优化详解

    前文我们写过简单SQL的性能分析和解读,简单SQL被归类为select-from-where型SQL语句,其主要特点是只有map阶段的数据处理,相当于直接从hive中取数出来,不需要经过行变化。在非多个节点的操作上,其性能甚至不比Tez和Spark差。 而这次我们主要说的是使用聚合类函数的hiveSQL,这

    2024年02月09日
    浏览(47)
  • Hive执行计划之什么是hiveSQL向量化模式及优化详解

    Hive开启向量化模式也是hiveSQL优化方法中的一种,可以提升hive查询速率,也叫hive矢量化。 问题1:那么什么是hive向量化模式呢? 问题2:hive向量化什么情况下可以被使用,或者说它有哪些使用场景呢? 问题3:如何查看hive向量化使用的相关信息? hive向量化模式是hive的一个特

    2024年02月08日
    浏览(45)
  • 【大数据之Hive】二十三、HQL语法优化之数据倾斜

      数据倾斜指参与计算的数据分布不均,即某个key或者某些key的数据量远超其他key,导致在shuffle阶段,大量相同key的数据被发往同一个Reduce,导致该Reduce所需的时间远超其他Reduce,成为整个任务的瓶颈。   Hive中的数据倾斜常出现在分组聚合和join操作的场景中 。   

    2024年02月16日
    浏览(52)
  • SQLite学习(七)SQLite的HAVING、DISTINCT、JOIN、UNION子句语法和应用

    在上一篇《SQLite学习(六)SQLite的GLOB、LIMIT、ORDER、GROUP UP子句语法和应用》 中,讲解了 SQLite的GLOB、LIMIT、ORDER、GROUP UP 子句语法,在本篇博客中,将继续讲解 SQLite 子句的基本语法。 同学们将学习到: SQLite HAVING 子句语法 SQLite DISTI

    2024年02月06日
    浏览(37)
  • MySQL - Left Join和Inner Join的效率对比,以及优化

    最近在写代码的时候,遇到了需要多表连接的一个问题,初始sql类似于: 这样的多个left join组合,总觉得这种写法是有问题的,后续使用inner join发现速度要比left join快一些 关于left join的概念,大家是都知道的(返回左边全部记录,右表不满足匹配条件的记录对应行返回nul

    2024年02月03日
    浏览(50)
  • MySQL基础~NATURAL JOIN(自然连接) 和USING的使用(SQL99语法新特性)

    我们在查询两张表时,可能会将 连接条件 设为 相同的字段 ,如下: 而有了 NATURAL JOIN 自然连接后,它会帮我们自动查询两张表中 所有相同的字段 ,然后 进行 等值连接 ,这样就可以直接省略连接条件 这两种写法效果相同,查询到的都是同一个结果 优点 是简化了SQL语句,查

    2024年02月04日
    浏览(48)
  • 【大数据之Hive】二十五、HQL语法优化之小文件合并

      小文件优化可以从两个方面解决,在Map端输入的小文件合并,在Reduce端输出的小文件合并。   合并Map端输入的小文件是指将多个小文件分到同一个切片中,由一个Map Task处理,防止单个小文件启动一个Map Task,造成资源浪费。 相关参数:   合并Reduce端输出的小文件是

    2024年02月13日
    浏览(36)
  • MySQL语句通过腾讯云数据库智能管家的性能与语法优化

    最近公司项目迁移至腾讯云,用的腾讯云MySQL服务器,MySQL负载一直很高,借助云管家优化了一部分SQL语句,提升了部分性能和释放了部分,MySQL内存占用      

    2024年02月15日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包