zoukankan      html  css  js  c++  java
  • HIVE的HQL语句优化原理

    优化的核心在于 处理大数据量 与 hive执行过程原理

    1. 用where过滤分区,可以减小数据量
      可以使用嵌套select查询,先用where过滤分区,再进行表连接,这对所有种类的表连接都是可以的。
    hive> SELECT s.ymd, s.symbol, s.price_close, d.dividend FROM
      > (SELECT * FROM stocks WHERE symbol='AAPL' AND exchange = 'NASDAQ') s
      > LEFT OUTER JOIN
      > (SELECT * FROM dividends WHERE symbol='AAPL' AND exchange = 'NASDAQ') d
      > ON s.ymd = d.ymd;
    
    1. 左半开连接
      可以代替in,速度会比较快。
      SEMI JOIN

    2. map-side JOIN
      原理:在大表通过mapper时,将小表完全放到内存里,在map端执行连接过程,省略掉常规连接操作所需要的reduce过程。
      3.1
      操作:在$HOME/.hiverc里配置hive.auto.convert.JOIN和smalltable.filesize
      限制:不适合左外连接和全连接;大表分桶在一定程度上是可以的
      3.2
      条件:如果数据表是分桶的,若表中数据按照ON语句中的键进行分桶,而其中一张表的分桶个数必须是另一张表分桶个数的若干倍。
      原理:满足这些条件后,Hive在map阶段按照分桶数据进行连接。
      3.3
      条件:如果所涉及的分桶表都有相同的分桶数,而且数据是按照连接键或桶的键进行排序的
      操作:开启更快的分类-合并连接(sort-merge JOIN)。需要设置以下属性:
      hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat;
      hive.optimize.bucketmapjoin=true;
      hive.optimize.bucketmapjoin.sortedmerge=true;

  • 相关阅读:
    ASP.NET请求管道、应用程序生命周期、整体运行机制
    PHP面试总结
    ASP.NET MVC源码分析系列
    SQL中的重要语句
    Nicescroll滚动条插件的用法
    Nunit2.5.10快速上手(笔记)
    ucore 源码剖析
    《ucore lab8》实验报告
    《ucore lab7》实验报告
    《ucore lab6》实验报告
  • 原文地址:https://www.cnblogs.com/xinlingyue-blog/p/5485063.html
Copyright © 2011-2022 走看看