首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【大数据】SparkSql连接查询中的谓词下推处理(一)

SparkSql中的谓词下推有两层含义,第一层含义是指由谁来完成数据过滤,第二层含义是指何时完成数据过滤。...要解答这两个问题我们需要了解SparkSql的Sql语句处理逻辑,大致可以把SparkSql中的查询处理流程做如下的划分: ?...上边提到,我们可以通过封装SparkSql的Data Source API完成各类数据源的查询,那么如果底层数据源无法高效完成数据的过滤,就会执行全局扫描,把每条相关的数据都交给SparkSql的Filter...在这个查询中,join后条件依然是使用OR连接两表的过滤条件,不同的是,join中条件不再是id相等,而是value字段相等,也就是说过滤条件字段恰好就是join条件字段。...大家可以自行采用上边的分步法分析谓词下推和不下推时的查询结果,得到的结果是相同的。我们来看看上边不能下推时出现的情况在这种查询里会不会出现。

1.8K20

【大数据】SparkSql连接查询中的谓词下推处理(一)

SparkSql中的谓词下推有两层含义,第一层含义是指由谁来完成数据过滤,第二层含义是指何时完成数据过滤。...要解答这两个问题我们需要了解SparkSql的Sql语句处理逻辑,大致可以把SparkSql中的查询处理流程做如下的划分: ?...上边提到,我们可以通过封装SparkSql的Data Source API完成各类数据源的查询,那么如果底层数据源无法高效完成数据的过滤,就会执行全局扫描,把每条相关的数据都交给SparkSql的Filter...在这个查询中,join后条件依然是使用OR连接两表的过滤条件,不同的是,join中条件不再是id相等,而是value字段相等,也就是说过滤条件字段恰好就是join条件字段。...大家可以自行采用上边的分步法分析谓词下推和不下推时的查询结果,得到的结果是相同的。我们来看看上边不能下推时出现的情况在这种查询里会不会出现。

97320
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【大数据】SparkSql连接查询中的谓词下推处理(一)

    转自:vivo互联网技术 作者:李勇 1.SparkSql SparkSql是架构在Spark计算框架之上的分布式Sql引擎,使用DataFrame和DataSet承载结构化和半结构化数据来实现数据复杂查询处理...上边提到,我们可以通过封装SparkSql的Data Source API完成各类数据源的查询,那么如果底层 数据源无法高效完成数据的过滤,就会执行全扫描,把每条相关的数据都交给SparkSql的Filter...那么谓 词 下 推第二层含义,即何时完 成数 据过滤则一般是在指连接查询中,是先对单表 数 据进行过 滤再和其他表连 接还是在先把多表进行连接再对连 接后的临 时表进 行过滤 4.内连接查询中的谓词下推规则...在这个查询中,join后条件依然是使用OR连接两表的过滤条件,不同的是,join中条件不再是id相等,而是value字段相等,也就是说过滤条件字段恰好就是join条件字段。...大家可以自行采用上边的分步法分析谓词下推和不下推时的查询结果,得到的结果是相同的。我们来看看上边不能下推时出现的情况在这种查询里会不会出现。

    1.4K30

    SparkSql 中外连接查询中的谓词下推规则

    (RDD的Transformation)的乱入,和本文讨论的问题相关的则是Filter和Scan两个操作符。...我们知道,可以通过封装SparkSql的Data Source API完成各类数据源的查询,那么如果底层数据源无法高效完成数据的过滤,就会执行直接的全局扫描,把每条相关的数据都交给SparkSql的Filter...,那么就会把过滤交给底层数据源来完成,这就是SparkSql中的谓词下推(至于哪些数据源能高效完成数据的过滤以及SparkSql是又如何完成高效数据过滤的则不是本文讨论的重点)。...而上边提到的谓词下推能否在两类条件中使用,在SparkSql中则有特定的规则,以左外连接查询为例,规则如下: ? 接下来对这个表格中的规则进行详细的分析。...1的行在右表中能找到相等的id,但是左表的id为1,是不满足第二个join条件(LT.id>1)的,所以左表这一条相当于没有和右表join上,所以左表的值value保留,而右表的value为null(你没满足

    1.7K90

    sparksql 中外连接查询中的谓词下推处理

    上月听了本部门sparksql大牛的sparksql调优分享,当时对一个点不是很理解,回去好好理了一下,整理成文。 1....谓词下推 基本概念:谓词下推(predicate pushdown)属于逻辑优化。优化器可以将谓词过滤下推到数据源,从而使物理执行跳过无关数据。...说白了,就是把查询相关的条件下推到数据源进行提前的过滤操作,之所以这里说是查询相关的条件,而不直接说是where 后的条件,是因为sql语句中除了where后的有条件外,join时也有条件。...究其原因,是因为在sparksql中,把以上的查询解析成了如下的子查询: [1505293913863_2083_1505293913921.jpg] 3.2....1 one 2 two 来看看不下推的情况下计算出的正确结果,join过程如下: 第一步:左表id为1的行在右表中能找到相等的id,但是左表的id为1,是不满足第二个join条件的,所以左表这一条相当于没有和右表

    5.1K21

    大数据 | SparkSQL连接查询中的谓词下推处理(二)

    在《SparkSql连接查询中的谓词下推处理(一)》中,我们介绍了一些基本的概念,并对内连接查询时的一些基本下推规则进行了分析。...本篇文章要介绍的是--外连接查询中的谓词下推规则,这相比内连接中的规则要复杂一些,不过使用简单的表格来进行分析也是可以分析清楚的。先上表: ? 我们以左外连接查询为例,先总结规矩如下: ?...条件下推过滤了左表整整50%的数据(相当牛,虽然只过滤了一条)。究其原因,是因为在SparkSQL中,把以上的查询解析成了如下的子查询: ?...这是一个非相关子查询,即完全可以先完成子查询,再完成父查询,子查询在查询过程中和外部查询没有关联关系。 2.左表join中条件不下推 查询语句如下: ?...可以过滤掉一半的数据呢。SparkSQL中的等价处理语句是: ? 可以看出,也是解析成了一个非相关子查询来处理的。 4.右表join中条件不下推 这个应该是最违反常规理解的查询了,查询语句如下: ?

    92920

    大数据 | SparkSQL连接查询中的谓词下推处理(二)

    在《SparkSql连接查询中的谓词下推处理(一)》中,我们介绍了一些基本的概念,并对内连接查询时的一些基本下推规则进行了分析。...本篇文章要介绍的是--外连接查询中的谓词下推规则,这相比内连接中的规则要复杂一些,不过使用简单的表格来进行分析也是可以分析清楚的。先上表: ? 我们以左外连接查询为例,先总结规矩如下: ?...条件下推过滤了左表整整50%的数据(相当牛,虽然只过滤了一条)。究其原因,是因为在SparkSQL中,把以上的查询解析成了如下的子查询: ?...这是一个非相关子查询,即完全可以先完成子查询,再完成父查询,子查询在查询过程中和外部查询没有关联关系。 2.左表join中条件不下推 查询语句如下: ?...可以过滤掉一半的数据呢。SparkSQL中的等价处理语句是: ? 可以看出,也是解析成了一个非相关子查询来处理的。 4.右表join中条件不下推 这个应该是最违反常规理解的查询了,查询语句如下: ?

    73830

    SparkSql的Catalyst之图解简易版

    我们也可以根据数据源的特点,自己实现自己的数据源输入和相关的谓词下推优化。 那么为啥大家都喜欢结构化的数据呢? 1,根据定义,结构将限制可以表达的内容。 2,在实践中,我们可以容纳绝大多数的计算。...3,与用于实现单个规则的每个树相关联的函数。...组合新的规则: 1),谓词下推 对于很多过滤条件呢,假如数据源支持,那么就可以直接将过滤下推到数据加载的过程中,减少加载到Spark的数据,进而实现优化。...2),常量聚合 常量的计算没必要每行都计算一次,再生成规则的时候就可以直接结算然后使用计算过的结果。 3),列裁剪 只从数据源加载我们需要的列,对于不相关的列不加载。...SparkPlanner 1),首先是使用策略将逻辑计划转化为物理计划 2),使用RuleExecutor将物理计划变为可执行 A),准备标量子查询。 B),确保输入行的要求。

    1.1K91

    【T-SQL基础】03.子查询

    在逻辑上,子查询会为每个外部行单独计算一次。 标量子查询:返回单个值的子查询。标量子查询可以出现在外部查询中期望使用单个值的任何地方。 多值子查询:在一个列中 为什么要使用子查询?...2.独立多值子查询(查看练习题3) (1)多值子查询的语法格式 IN ( 查询> ) 例子:返回title包含manager的雇员处理过的订单的信息 方案一:独立多值子查询 SELECT...二、相关子查询 1.相关子查询 什么是相关子查询:引用了外部查询中出现的表的列,依赖于外部查询,不能独立地运行子查询。在逻辑上,子查询会为每个外部行单独计算一次。...进行过滤,过滤出等于最大订单日期的订单 3.因为要查询出每个客户参与的订单,所以将独立标量子查询改成相关子查询,用子查询O2.custid与外查询O1.custid关联。...NOT EXISTS谓词是EXISTS谓词的反面 三、练习题 1.写一条查询语句,返回Orders表中活动的最后一天生成的所有订单。 期望结果: ?

    1.9K60

    Spark SQL底层执行流程详解(好文收藏)

    新的问题: 对于初期版本的 SparkSQL,依然有挺多问题,例如只能支持 SQL 的使用,不能很好的兼容命令式,入口不够统一等。 3....SparkSQL-Dataset诞生 SparkSQL 在 1.6 时代,增加了一个新的 API,叫做 Dataset,Dataset 统一和结合了 SQL 的访问和命令式 API 的使用,这是一个划时代的进步...在 Dataset 中可以轻易的做到使用 SQL 查询并且筛选数据,然后使用命令式 API 进行探索式分析。...Analyzer会再次遍历整个语法树,对树上的每个节点进行数据类型绑定及函数绑定,比如people词素会根据元数据表信息解析为包含age、id以及name三列的表,people.age会被解析为数据类型的...谓词下推就是将过滤操作下推到join之前进行,之后再进行join的时候,数据量将会得到显著的减少,join耗时必然降低。

    4.6K20

    Spark之SQL解析(源码阅读十)

    如何能更好的运用与监控sparkSQL?或许我们改更深层次的了解它深层次的原理是什么。之前总结的已经写了传统数据库与Spark的sql解析之间的差别。...那么我们下来直切主题~   如今的Spark已经支持多种多样的数据源的查询与加载,兼容了Hive,可用JDBC的方式或者ODBC来连接Spark SQL。...它是一个字典表,用于注册表,对标缓存后便于查询,源码如下:   这个类呢,是个特质,定义了一些tableExistes:判断表是否存在啊,registerTable:注册表啊、unregisterAllTables...那么join操作,也包含了左外连接、全外连接、笛卡尔积等。   ...下来Analyzer和optimizer将会对LogicalPlan的这棵树加入各种分析和优化操作,比如列剪枝啊 谓词下压啊。

    86320

    在所有Spark模块中,我愿称SparkSQL为最强!

    而SparkSQL的查询优化器是Catalyst,它负责处理查询语句的解析、绑定、优化和生成物理计划等过程,Catalyst是SparkSQL最核心的部分,其性能优劣将决定整体的性能。...尽量减少shuffle相关操作,减少join操作。...而有了 AQE(自适应查询执行) 之后,Spark 就可以动态统计相关信息,并动态调整执行计划,比如把 SortMergeJoin 变成 BroadcastHashJoin: ?...谓词下推(Predicate PushDown) 在数据库之类的查询系统中最常用的优化手段就是谓词下推了,通过将一些过滤条件尽可能的在最底层执行可以减少每一层交互的数据量,从而提升性能, 例如”select...在使用Parquet的时候可以通过如下两种策略提升查询性能: 类似于关系数据库的主键,对需要频繁过滤的列设置为有序的,这样在导入数据的时候会根据该列的顺序存储数据,这样可以最大化的利用最大值、最小值实现谓词下推

    1.7K20

    一文了解函数式查询优化器Spark SQL Catalyst

    记录一下个人对sparkSql的catalyst这个函数式的可扩展的查询优化器的理解,目录如下: 0. Overview 1. Catalyst工作流程 2. Parser模块 3....Reference Overview Spark SQL的核心是Catalyst优化器,是以一种新颖的方式利用Scala的的模式匹配和quasiquotes机制来构建的可扩展查询优化器。 ?...sparkSql pipeline sparkSql的catalyst优化器是整个sparkSql pipeline的中间核心部分,其执行策略主要两方向, 基于规则优化/Rule Based Optimizer...Analyzer会再次遍历整个AST,对树上的每个节点进行数据类型绑定以及函数绑定,比如people词素会根据元数据表信息解析为包含age、id以及name三列的表,people.age会被解析为数据类型为...ResolveFunctions :: //解析基本函数,如max,min,agg ResolveAliases :: ResolveSubquery :: //解析AST中的字查询信息

    3K20

    Impala 4.0源码解析之BROADCASTSHUFFLE代价计算

    关于cardinality,可以理解为表在本次查询中,需要扫描多少行的数据,这是Impala根据一系列的计算得到的一个预估值。...接着来看看CompoundPredicate这种谓词的selectivity计算,像a>1 and a1 or b相关的计算代码如下所示...这个函数接受一个expr类型的list,这里代表就是这个HdfsScanNode的谓词条件集合(不包含分区列的相关谓词)。...对于每个HdfsScanNode,都有一个tuple(对应TupleDescriptor结构),包含查询中涉及到的该表的各个列(对应SlotDescriptor结构)。...除此之外,mt情况下的broadcast内存开销计算,也有可能出现偏差。目前对于有问题的执行计划我们只能通过hints或者上述的query option来手动调整。

    1.1K31

    【数据库】03——初级开发需要掌握哪些SQL语句

    这与谓词中的处理有区别,因为在谓词中null = null会返回unknown。 如果元组上所有属性上取值相等,那么他们会被当做相同的元组,即使某些值为空,这种方式还适用与集合的并、交、和差运算。...select子句中的属性只能是分组条件相关属性和聚集函数。...在包含了子查询的查询中,在相关名称上可以应用作用域规则,根据此规则,在一个子查询中只能使用此子查询本身定义的,或者包含此子查询的任何查询中定义的相关名称,如果一个相关名称既在子查询中局部定义,有在包含该子查询的查询中全局定义...8.7 标量子查询 SQL允许子查询出现在返回单个值的表达式能够出现的任何地方,只要该子查询只返回一个包含单个属性的元组,这样的子查询成为标量子查询。举个栗子,列出所有的系以及每个系中的教师总数。...但是当在表达式中使用标量子查询时,它出现的位置是期望单个值出现的地方,SQL就该从该关系中包含单个属性的单个元组中隐式的取出相应的值,并返回该值。

    3.5K31

    【SQL】作为前端,应该了解的SQL知识(第三弹)

    因为子查询在SELECT语句执行完毕后就会消失 子查询就是将用来定义视图的 SELECT 语句直接用于FROM 子句当中。...注意: 在Oracle的FROM子句中,不能使用AS 尽量避免多层子查询 执行顺序: 内层的子查询 ——> 外层的查询 标量子查询 就是返回一行一列的子查询 一般情况下,标量子查询的 返回值 可以用在...子查询内部设定的关联名称,只能在该子查询内部使用 谓词 谓词的返回值都是真值 LIKE 模糊查询 模糊匹配的符号: %: 表示任意字符 _: 表示任意一个字符 BETWEEN 范围查询。...会包含临界值 IS NULL、IS NOT NULL 判断是否为空 IN 指定多个条件 IN(值1,值2,值3, .....)...谓词的作用就是“判断是否存在满足某种条件的记录”。 如果存在这样的记录就返回真(TRUE),如果不存在就返回假(FALSE)。 EXIST(存在)谓词的主语是“记录”。

    16920

    SparkSQL的应用实践和优化实战

    本次演讲介绍了字节跳动基于SparkSQL建设大数据查询统一服务TQS(Toutiao Query Service)的一些实践以及在执行计划调优、数据读取剪枝、SQL兼容性等方面对SparkSQL引擎的一些优化...关键词:SparkSQL优化 字节跳动 本文是根据来自字节跳动的分享整理而成。 作者来自字节跳动数据平台查询分析团队。...提供全公司大数据查询的统一服务入口,支持丰富的API接口,覆盖Adhoc、ETL等SQL查询需求 支持多引擎的智能路由、参数的动态优化 Spark-SQL/Hive引擎性能优化 针对SparkSQL,主要做了以下优化...stage单独执行,为每一个stage单独创建一个子job,子job执行完后收集该stage相关的统计信息(主要是数据量和记录数),并依据这些统计信息优化调整下游stage的执行计划。...Parquet文件读取原理: (1)每个rowgroup的元信息里,都会记录自己包含的各个列的最大值和最小值 (2)读取时如何这个值不在最大值、最小值范围内,则跳过RowGroup 生成hive

    2.5K20
    领券