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

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

连接查询连接条件 外连接查询(outter join),分为左外连接查询、右外连接查询以及全外连接查询,全外连接使用场景不多,所以本文重点讨论是左连接查询和右连接查询。...而上边提到谓词下推能否在两类条件中使用,在SparkSql则有特定规则,以左外连接查询为例,规则如下: ? 接下来对这个表格规则进行详细分析。...此时再和右进行左连接,左id为2行,在右能找到id为2行,则连接结果如下: ? 可见,条件下推过滤了左整整50%数据,相当牛叉,虽然只有两条。...究其原因,是因为在SparkSql,把以上查询解析成了如下查询: SELECT LT.id, LT.value, RT.valueFROM (SELECT id, value FROM lefttable...,查询查询过程中和外部查询没有关联关系。

1.7K90

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

谓词下推 基本概念:谓词下推(predicate pushdown)属于逻辑优化。优化器可以将谓词过滤下推到数据源,从而使物理执行跳过无关数据。...join条件和join后条件 [1505293666375_5396_1505293666580.jpg] 那么这两类不同条件,在外连接查询是否都会下推呢?...不是的,是否下推是遵循一定规则,对于左连接查询,可以归纳为下表: 左 Join条件 不下推 下推 Join后条件 下推 不下推 3....究其原因,是因为在sparksql,把以上查询解析成了如下查询: [1505293913863_2083_1505293913921.jpg] 3.2....value 2 two 然后左再和右进行左连接,流程如下: 第一步:左id为1行在右没有,此时左值保留,右为null 第二步:左id位2行在右中有,并且RT.id大于1,

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

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

那么谓词下推第二层含义,即何时完成数据过滤则一般是在指连接查询,是先对单数据进行过滤再和其他连接还是在先把多表进行连接再对连接临时进行过滤,则是本系列文章要分析和讨论重点。...4.内连接查询谓词下推规则 假设我们有两张结构很简单,数据也都只有两条,但是足以讲清楚我们下推规则,两如下,一个lefttable,一个righttable: ?...这个查询是一个内连接查询,join后条件是用and连接两个过滤条件,假设我们不下推,而是先做内连接判断,这时是可以得到正确结果,步骤如下: 1) 左id为1行在右可以找到,即这两行数据可以...那么为什么where条件条件被or连接就会出现错误查询结果呢?...但是如果按照我们在2分析,使用OR连接过滤条件,又不能随意进行谓词下推,那要如何处理呢?

1.7K20

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

2.连接查询连接条件 Sql连接查询(join),主要分为内连接查询 (inner join)、外连接查询 (outter join)和半连接查询 (semi join),具体区别可以参考wiki...那么谓 词 下 推第二层含义,即何时完 成数 据过滤则一般是在指连接查询,是先对单 数 据进行过 滤再和其他连 接还是在先把多表进行连接再对连 接后临 时进 行过滤 4.内连接查询谓词下推规则...这个查询是一个内连接查询,join后条件是用and连接两个过滤条件,假设我们不下推,而是先做内连接判断,这时是可以得到正确结果,步骤如下: 1) 左id为1行在右可以找到,即这两行数据可以...所以这种情况下谓词是不能下推。 但是OR连接join后条件也有两个例外,这里顺便分析第一个例外。第一个例外是过滤条件字段恰好为Join字段,比如如下查询: ?...但是如果按照我们在2分析,使用OR连 接两 过滤条件,又不能随意进行谓词下推,那要如何处理呢?

1.3K30

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

在《SparkSql连接查询谓词下推处理(一)》,我们介绍了一些基本概念,并对内连接查询一些基本下推规则进行了分析。...本篇文章要介绍是--外连接查询谓词下推规则,这相比内连接规则要复杂一些,不过使用简单表格来进行分析也是可以分析清楚。先上表: ? 我们以左外连接查询为例,先总结规矩如下: ?...条件下推过滤了左整整50%数据(相当牛,虽然只过滤了一条)。究其原因,是因为在SparkSQL,把以上查询解析成了如下查询: ?...这是一个非相关子查询,即完全可以先完成查询,再完成父查询查询查询过程中和外部查询没有关联关系。 2.左join条件不下推 查询语句如下: ?...下期预告:《存储引擎们都是如何完成高效数据过滤?》 在本系列文章,我们知道了分布式SQL一些谓词下推规则。

89420

MySQL 如何查询包含某字段

查询tablename 数据库 以”_copy” 结尾 select table_name from information_schema.tables where table_schema='tablename...(base table 指基本,不包含系统) table_name 指具体名 如查询work_ad数据库是否存在包含”user”关键字数据 select table_name from...如何查询包含某字段 select * from systables where tabname like 'saa%' 此法只对Informix数据库有用 查询指定数据库中指定所有字段名column_name...= ‘test’ group by table_schema; mysql查询包含该字段所有名 SELECT TABLE_NAME FROM information_schema.COLUMNS...WHERE COLUMN_NAME='字段名' 如:查询包含status 字段数据名 select table_name from information_schema.columns where

12.3K40

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

那么谓词下推第二层含义,即何时完成数据过滤则一般是在指连接查询,是先对单数据进行过滤再和其他连接还是在先把多表进行连接再对连接临时进行过滤,则是本系列文章要分析和讨论重点。...4.内连接查询谓词下推规则 假设我们有两张结构很简单,数据也都只有两条,但是足以讲清楚我们下推规则,两如下,一个lefttable,一个righttable: ?...这个查询是一个内连接查询,join后条件是用and连接两个过滤条件,假设我们不下推,而是先做内连接判断,这时是可以得到正确结果,步骤如下: 1) 左id为1行在右可以找到,即这两行数据可以...那么为什么where条件条件被or连接就会出现错误查询结果呢?...但是如果按照我们在2分析,使用OR连接过滤条件,又不能随意进行谓词下推,那要如何处理呢?

95820

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

在《SparkSql连接查询谓词下推处理(一)》,我们介绍了一些基本概念,并对内连接查询一些基本下推规则进行了分析。...本篇文章要介绍是--外连接查询谓词下推规则,这相比内连接规则要复杂一些,不过使用简单表格来进行分析也是可以分析清楚。先上表: ? 我们以左外连接查询为例,先总结规矩如下: ?...条件下推过滤了左整整50%数据(相当牛,虽然只过滤了一条)。究其原因,是因为在SparkSQL,把以上查询解析成了如下查询: ?...这是一个非相关子查询,即完全可以先完成查询,再完成父查询查询查询过程中和外部查询没有关联关系。 2.左join条件不下推 查询语句如下: ?...下期预告:《存储引擎们都是如何完成高效数据过滤?》 在本系列文章,我们知道了分布式SQL一些谓词下推规则。

68030

sql连接查询

本文链接:https://blog.csdn.net/luo4105/article/details/51397825 一直没有注重于sql这一块,现在项目有大量统计,报表,以前都是多表连接或者用...mybatis延迟加载之类,这几天心血来潮自己查了一下,发现了sql查询这个好东西,感觉方便多了,速度也快多了(自我感觉)。...sql查询是可以在把数据查出来后在查出一条其他关联数据一项(多项或者多条都会报错), 比如我们要查询用户(user)并加上一个列(rolename)表示它代表权限名字,那么我们可以这么写...,里面是当前时间,那么我们可以这么做 select *,(select rolename form role where roleId=user.roleId) as rolename,'2016-05...-13' as nowTime from user 这sql这几天真的写蛮开心,哈哈

3.3K20

查询介绍_连接

大家好,又见面了,我是你们朋友全栈君。 1、连查询原因 (1)如果查询结果不在一个,在多个,那就需要将关联,进行连查询。 (2)连查询大多数都作用在外键得基础上。...2.1之间存在关系 (1)一对多:在多一方添加外键列 (2)多对多:需要创建一个中间,该至少有两个外键列 2.2连查询 2.3内连接连接演示—结果都是一样,只是语法不同。...-- 所谓笛卡尔集 就是A每一条记录关联B得每条记录 1.查询每一个员工姓名,及关联部门名称〔隐式内连接实现) select * from tb_emp,tb_dept where tb_emp.dept_id...(2)查询所有员工 emp及其领导名字emp ,如果员工没有领导,也需要查询出来 -- 1.查询员工及其所属领导名字。你要查询结果再一张,但是还不能使用单查询得到结果。...-- 查询市场部员工信息----- -- 查询返回结果一列一条记录。

3K20

【MySQL】查询连接

,然而 scott 并没有为每一个部门单独 create 一个工资,而只有一个 emp ,里面包含了所有部门员工信息,所以我们需要对 emp 按照 deptno 进行分组。...注:在分组查询,select 后面的列信息通常只能包含聚合函数以及出现在分组条件列。...笛卡尔积 笛卡尔积(Cartesian Product)是指在没有使用任何条件连接情况下,将两个或多个每一行与其他每一行进行组合,从而得到一个包含所有可能组合。...与多行查询相关关键字有三个: in:表示在其中,即与多个数据一个相等即可。 all:表示全部,即大于/小于/… 多个数据全部。 any:表示任意,即大于/小于/… 多个数据任意一个。...左外连接 左外连接是指左边数据保持不变,右边数据按照筛选条件过滤,记录不足列使用 NULL 填充,然后将二者连接起来。

21820

你必须掌握一些常见SQL语句,包含查询、高级查询连接查询、复合条件查询、嵌套查询)

分享一些常见SQL语句,包含查询、高级查询连接查询、复合条件查询、嵌套查询等)。...--建立学生信息Students create table Students ( SId char(5) not null primary key, SName nvarchar(20...) unique, SGender char(10) default('Male'), SAge int, SSdept nvarchar(250) ) --课程 create...as '姓名' from Students where SSdept=(select ssdept from Students where SName='张三') and SName'张三' --查询比张三年纪大学生姓名...SId as '学号',SName as '姓名' from Students where SAge>(select SAge from Students where SName='张三') --查询选修每门课程成绩小于其平均成绩学生学号

2.6K70

玩转MySQL之间各种连接查询

1 概述 为什么要进行连接查询? 因为不同之间数据具有不同用途和字段,连接查询可以将我们需要用到两个不同字段进行关联,从而找到我们有用信息。...连接操作给用户带来很大灵活性,他们可以在任何时候增加新数据类型。为不同实体创建新,然后通过连接进行查询。...student.name=user.name; 注意:MySQL是不支持全外连接,这里给出写法适合Oracle和DB2。...但是可以通过左外和右外求合集来获取全外连接查询结果。...; 关键字:无 (3)示例 4 小总结 在各种连接还可以被分为等值连接和不等值连接,但是一般情况下只使用等值连接 select语句尽量不要使用select * …,以上演示只是为了方便

2.4K10

一文搞定MySQL多表查询连接(join)

SQL查询基本原理 单查询: 根据WHERE条件过滤记录,然后根据SELECT指定列返回查询结果。...内连接分以下几种: 等值连接: 在连接条件中使用等于号(=)运算符比较被连接列值,其查询结果列出被连接所有列,包括其中重复列。...自连接: 自连接通常作为外部语句用来替代从相同检索数据时使用查询语句。 笛卡尔积连接: 两张每一条记录进行笛卡尔积组合,然后根据WHERE条件过滤虚拟结果集中记录。...而采用外连接时,它返回到查询结果集合不仅包含符合连接条件行,而且还包括左(左外连接时)、右(右外连接时)或两个边接(全外连接)所有数据行。...在联结两个时,实际上做是将第一个每一行与第二个每一行配对。WHERE 子句作为过滤条件,它只包含那些匹配给定条件(这里是联结条件)行。

14K20

MySQL查询某个所有字段并通过逗号分隔连接

想多造一些测试数据,字段又多一个个敲很麻烦,导出中部分字段数据又不想导出ID字段(因为ID字段是自增,导出后再插入会报唯一性错误),select * 查出来又是所有的字段。...可以通过如下SQL查询中所有字段通过逗号连接,然后复制出来进行select查询再导出 select group_concat(COLUMN_NAME) '所有字段' from information_schema.COLUMNS...where table_name = '名'; 执行效果如下: 下面的语句可以查询某个库某个所有字段,字段名称、类型、字符长度和字段注释等信息 select * from information_schema.COLUMNS...where table_name = '名' and table_schema = '数据库名'; 执行效果如下:

9.3K20

mysqlselect查(selectselect查询)询探索

执行过程如下: 1. 从emp查询员工编号为1员工记录。 2. 对于查询结果每一条记录,都会执行一个查询查询该员工所在部门名称。...这个子查询使用了dept,通过员工和部门deptno字段关联,查询出员工所在部门名称。由于是查询,所以需要在执行每一个查询时候都扫描一遍dept,效率相对较低。 3....在执行查询时候,查询e.deptno是来自于主查询emp,是通过where条件过滤出来,所以查询e.deptno是一个固定值。...查询结果会作为一个临时,与主查询emp进行连接查询,最终得到员工姓名和部门名称查询结果。...到这里对于select查询执行顺序更迷惑了,不知道DEPENDENT SUBQUERY到底时怎么执行,到底有没有生产临时,但是可以明确这种子查询效率不如join好 注意事项 在select查询

2800
领券