精华内容
下载资源
问答
  • 谓词下推

    2020-08-31 17:38:02
    @[TOC](谓词下推谓词下推概述 读后感:谓词下推用一句话概述就是:在更贴近数据源的地方过滤清洗数据 原文地址

    @[TOC](谓词下推)

    谓词下推概述

    读后感:谓词下推用一句话概述就是:在贴近数据源的地方过滤清洗数据

    原文地址

    展开全文
  • Mysql谓词下推技术上次和一个朋友在讨论一个Mysql连接的优化,他的观点是有对于where条件的限制的表,可以先对这个表写一个from视图,在视图中先用where条件做限制,然后再来做连接原始语句是这样的select *from ...

    Mysql谓词下推技术

    上次和一个朋友在讨论一个Mysql连接的优化,他的观点是有对于

    where条件的限制的表,可以先对这个表写一个from视图,在视图中先

    用where条件做限制,然后再来做连接

    原始语句是这样的

    select *

    from sbtest t1 join snapshot t2 on t1.id=t2.id

    where  t2.snap_id=1420637262

    改成如下的形式

    select *

    from sbtest t1 join (select * from  snapshot where snap_id=1420637262) t2

    on t1.id=t2.id

    这种观点主要是思想是对于有where条件限制的表,先尽量做限制。但是这种方式真的会执行率高吗? 我们首先来看看执行计划

    mysql> explain

    -> select *

    -> from sbtest t1 join (select * from  snapshot where snap_id=1420637262) t2

    -> on t1.id=t2.id;

    +----+-------------+------------+--------+---------------+---------+---------+-------+------+-------------+

    | id | select_type | table      | type   | possible_keys | key     | key_len | ref   | rows | Extra       |

    +----+-------------+------------+--------+---------------+---------+---------+-------+------+-------------+

    |  1 | PRIMARY     | | ALL    | NULL          | NULL    | NULL    | NULL  | 5846 | NULL        |

    |  1 | PRIMARY     | t1         | eq_ref | PRIMARY       | PRIMARY | 4       | t2.id |    1 | Using where |

    |  2 | DERIVED     | snapshot   | ALL    | NULL          | NULL    | NULL    | NULL  | 5846 | Using where |

    +----+-------------+------------+--------+---------------+---------+---------+-------+------+-------------+

    3 rows in set (0.00 sec)

    首先看id为2的,对子查询做一个全表扫描,然后使用where条件过滤.结果再驱动到id为1,然后再和t1表做一个连接,这样看起来是先把t2中不符合where条件元组过滤掉了,好像是目的也已经达到了.

    再来看看原始语句的执行计划

    mysql> explain

    -> select *

    -> from sbtest t1 join snapshot t2 on t1.id=t2.id

    -> where  t2.snap_id=1420637262;

    +----+-------------+-------+--------+---------------+---------+---------+-----------+------+-------------+

    | id | select_type | table | type   | possible_keys | key     | key_len | ref       | rows | Extra       |

    +----+-------------+-------+--------+---------------+---------+---------+-----------+------+-------------+

    |  1 | SIMPLE      | t2    | ALL    | PRIMARY       | NULL    | NULL    | NULL      | 5846 | Using where |

    |  1 | SIMPLE      | t1    | eq_ref | PRIMARY       | PRIMARY | 4       | db1.t2.id |    1 | Using where |

    +----+-------------+-------+--------+---------------+---------+---------+-----------+------+-------------+

    2 rows in set (0.00 sec)

    在这里首先是对t2表进行全表扫描,但是where条件是在扫描t2的时候过滤还是连接过后过滤呢?通过执行计划我们可以很明显可以看出是后一种方式,在对t2表进行全表扫描后,使用where条件过滤,然后结果只有一行了,注意执行计划的第二行的 type=eq_ref,后面的rows为1 。

    我们这种方式叫作谓词下推技术,事实主流的数据库基本上都支持这种方式的优化。其原则是在一个查询树中,对于

    任何选择都尽量早做选择,然后进行一步的处理.可见我们并不需要改写这个sql,优化器会自动去帮我们做这种优化.

    展开全文
  • 谓词下推操作,其实Hive也陆陆续续做了一定的优化操作,但是有些地方还需要我们自己人为的去进行优化,1.在join操作中,针对一般的单表过滤条件,操作的时候尽量直接进行谓词下推操作(即把过滤条件直接放到子查询...

    谓词下推操作,其实Hive也陆陆续续做了一定的优化操作,但是有些地方还需要我们自己人为的去进行优化,

    1.在join操作中,针对一般的单表过滤条件,操作的时候尽量直接进行谓词下推操作(即把过滤条件直接放到子查询当中),不要把过滤条件在放到on后面的where条件中,防止查询的数据不准确性。

    2.在join操作中,涉及到在on后面进行where判断(主要涉及到双表或者多表条件判断,比如:on a.id=b.id where a.dt=>b.start_dt and a.dt<=b.end_dt),或者case when判断多表条件操作,或者select *from a where id in(select id from b)tmp等操作时。

    针对上述的几种情况来说,其实就是发生了双表(或者多表的操作判断),如果采用上述操作计算的话,则都会产生大量的map或者reduce操作,极大的影响执行效率,

    因为这种不等值连接,或者in(子查询)等,都会进行双表(或者多表)全扫描操作,不会进行谓词下推操作。

    针对上述情况,暂时的处理的方法,使用的是shell脚本传参变量,然后进行操作。当然如果数据量不大的情况下,减少脚本的复杂性等,直接使用上正常述操作就行

    start_dt=(`mysql -A dbname -hdb_host -udb_user -pdb_pwd -ss -e 'SELECT start_dt FROM b"'`)

    select * from a where dt>='${start_dt}' ;

    谓词下推参考:

    feab2ea193a6540352570a42e8f6cdc3.png

    参考:

    展开全文
  • Hive谓词下推

    2020-04-29 09:44:31
    谓词下推是一种自动优化,如果养成好的查询习惯你其实并不需要hive自动去帮你谓词下推谓词下推 Predicate Pushdown(PPD):简而言之,就是在不影响结果的情况下,尽量将过滤条件提前执行。

    普及一个术语:谓词下推

    谓词下推是一种自动优化规则,如果养成好的查询习惯你其实并不需要hive自动去帮你谓词下推。

    因为优化器的规则经常变,记住规则比较难,养成好的查询习惯比较简单。

    如果没有听说过这个术语,没关系,很有可能的是你已经养成了好的查询习惯,根本不需要hive帮你优化,但还是了解一下好。

    谓词下推 Predicate Pushdown(PPD):简而言之,就是在不影响结果的情况下,尽量将过滤条件提前执行。谓词下推后,过滤条件在map端执行,减少了map端的输出,降低了数据在集群上传输的量,节约了集群的资源,也提升了任务的性能。——《Hive中的Predicate Pushdown Rules(谓词下推规则)》

     

    所以,如果我们能够做到,先过滤,再join,先筛选出有用的数据,再进行其他操作,我们其实不需要知道“谓词下推”这个术语。

    但是,知道它,可以避免一些失误。同时,可以拓宽自己的知识面。

    所谓hive中的谓词下推指的是:

     hive中join操作:如果直接两个表进行join,在最后再进行两个表的where条件过滤,这样的话实际上hive会将两个表先join起来,最后join出来的大表再进行where筛选,这样的话导致了全表join并且效率低下:

    如下:

        select a.id,a.value1,b.value2 from table1 a
          left outer join table2 b on a.id=b.id
        where b.ds>='20181201' and b.ds<'20190101'
        and a.ds>='20181201' and a.ds<'20190101'

    效率很低并且占用集群性能!!

    但是我们在hive的join查询的时候,先将每个表的数据进行筛选,筛选完了之后的数据在进行join这样,join两端的表数据量就相对变得很少了,提升了效率,也比变了占用更多的集群资源。

    采取的方式是:

        select a.id,a.value1,b.value2 from
          (select * from table1 ss where ss.ds>='20181201' and ss.ds<'20190101' ) a
        left outer join
          (select * from table2 ss where ss.ds>='20181201' and ss.ds<'20190101' ) b
        on a.id=b.id

     
    参考:

    hive优化之谓词下推

    展开全文
  • 谓词下推 1. 谓词下推概念 谓词下推原本是一个关系型数据库中的词语,优化关系 SQL 查询的一项基本技术是,将外层查询块的 WHERE 子句中的谓词移入所包含的较低层查询块(例如视图),从而能够提早进行数据...
  • MySQL之谓词下推什么是谓词在SQL中,谓词就是返回boolean值即true或者false的函数,或是隐式转换为boolean的函数。SQL中的谓词主要有 LKIE、BETWEEN、IS NULL、IS NOT NULL、IN、EXISTS谓词下推的基本思想即:将过滤...
  • MySQL 谓词下推

    2020-06-21 18:15:49
    谓词下推 优化关系 SQL 查询的一项基本技术是,将外层查询块的 WHERE 子句中的谓词移入所包含的较低层查询块,从而能够提早进行数据过滤以及有可能更好地利用索引。 举例说明: 有表: t_student(student_id, student...
  • SparkSql 有关谓词下推

    2021-03-07 18:44:23
    谓词下推 最近公司做审计,任务有点重。然后发现spark sql跑出来的结果和实际情况有出入,于是经过多方打探和测试,今天做个了结。 所谓谓词下推,也就是返回值是true和false的函数,做开发经常用到filter函数,这...
  • Hive优化之谓词下推

    2018-12-03 10:44:00
    Hive优化之谓词下推 解释 Hive谓词下推(Predicate pushdown) 关系型数据库借鉴而来,关系型数据中谓词下推到外部数据库用以减少数据传输 基本思想:尽可能早的处理表达式 属于逻辑优化,优化器将谓词过滤下推到数据...
  • Mysql谓词下推技术上次和一个朋友在讨论一个Mysql连接的优化,他的观点是有对于where条件的限制的表,可以先对这个表写一个from视图,在视图中先用where条件做限制,然后再来做连接原始语句是这样的select *from ...
  • spark sql 的优化框架Catalyst 博大精深,里面的精华是很多大牛一个pr一个pr积累起来的,仔细琢磨琢磨相关源码也是一件痛并快乐的事情,今天我来抛砖引玉,讲讲 逻辑优化里面 谓词下推的实现,如果对 spark sql 总体...
  • Sql 优化:谓词下推(PPD) 1 定义 谓词下推的概念其实出现在sql中,在关联查询时(join,left join ,right join),因为涉及两个大表之间的关联(特别是在hive)造成资源消耗会比较大,因为建议在join之前先将两个表进行...
  • Hive PredicatePushDown (谓词下推)
  • Spark之谓词下推

    2019-03-31 18:10:00
    谓词下推就是指将各个条件先应用到对应的数据上,而不是根据写入的顺序执行,这样就可以先过滤掉部分数据,降低join等一系列操作的数据量级,提高运算速度,如下图:   转载于:...
  • CCCCCold丶大数据之禅什么是谓词下推?为什么要进行谓词下推谓词下推优化方式谓词下推在Join中应用INNER JOIN 什么是谓词下推? 在传统关系型数据库中,优化关系 SQL 查询的一项基本技术是,将外层查询块的 WHERE ...
  • 为什么要谓词下推 谓词下推在Join中的应用 一、InnerJoin 下推情况说明 二、LeftJoin下推情况说明 三、RightJoin下推情况说明 四、FullJoin下推情况说明 谓词下推在Parquet中的应用 聚合下推 一、简单聚合...
  • SQL优化之谓词下推

    2021-01-08 11:46:27
    (2)什么是谓词下推? 将过滤条件表达式(=、!=、like、in、between、>、<…)尽量靠近要过滤的数据源,达到尽早过滤无用数据的目的。 (3)有什么好处? 例如有表:Student 学生, Grade 分数 业务:查询出...
  • 第04课:谓词下推

    2020-09-22 12:15:08
    所谓“出名要趁早”,谓词下推就是基于这一原则(这里所说的谓词就是常用的那些约束条件)。如果一个谓词在执行计划中即使处在不同的位置也不改变执行结果,那么我们就尽量把它保持在下层,因为它有“过滤”的作用。...
  • hive优化之谓词下推

    千次阅读 2019-06-22 16:47:24
    所谓hive中的谓词下推指的是: hive中join操作:如果直接两个表进行join,在最后再进行两个表的where条件过滤,这样的话实际上hive会将两个表先join起来,最后join出来的大表再进行where筛选,这样的话导致了全表...
  • 谓词下推概念 谓词下推 Predicate Pushdown(PPD):简而言之,就是在不影响结果的情况下,尽量将过滤条件提前执行。谓词下推后,过滤条件在map端执行,减少了map端的输出,降低了数据在集群上传输的量,节约了集群...
  • 本篇文章要介绍的是–外连接查询中的谓词下推规则,这相比内连接中的规则要复杂一些,不过使用简单的表格来进行分析也是可以分析清楚的。先上表: 我们以左外 连 接查询为例,先总结规矩如下: 接下来对这个表格中...
  • 通过以下这张图,我们可以发现,谓词下推在逻辑层面可以理解为利用where 条件中的过滤条件将无用的数据进行筛选掉最终得到需要的行列。 投影和谓词下推通过对存储格式的映射和谓词的推送而进一步来进行过滤。针对 ...
  • 本文首发于 vivo互联网技术 微信公众号 ...谓词下推4.内连接查询中的谓词下推规则4.1.Join后条件通过AND连接4.2.Join后条件通过OR连接4.3.分区表使用OR连接过滤条件1.SparkSqlSparkSql 是架构在 Spa...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 303
精华内容 121
关键字:

谓词下推