Presto 之Cross Join消除的实现

news2024/11/25 0:45:22
一. 前言

       Cross Join是指无条件的join。因为Cross Join的代价为笛卡尔乘积,代价很大,因此在Presto的执行优化中,会尽量消除掉Cross Join。Presto Cross Join的消除原理主要是尽可能通过对Join表的重新排序实现将Cross Join转换为Inner Join。本文主要讲述在Presto中是如何实现Cross Join消除的。

二. Cross Join消除的样例。

        以“SELECT * FROM part p, orders o, lineitem l WHERE p.partkey = l.partkey AND l.orderkey = o.orderkey” 为例,在cross join消除前执行计划如下所示:

       因为lineitem与order表之间无关联条件,因此产生了Cross Join。

      通过调整表的顺序后,可以将cross join转换成inner join,消除后的执行计划如下所示:

 

三. Cross Join消除的实现

       在Presto中,消除Cross Join的实现是在EliminateCrossJoins的RBO规则中实现的。其实现代码主要分成如下两步:

  1. 首先根据Join条件构建出各个Join表的图结构(JoinGraph),如下图中所示的表是上述SQL构造出的图:

         

 

      2.   使用BFS算法遍历图中的各个表,如果表与表之间能有路径达到,则说明两表之间可以产生On的过滤条件,Join可以转换成Inner Join。如上述的图结构:

        首先遍历part,part可以和lineitem产生inner join,然后结果又可以和order 产生inner join,因此上述的图可以产生两个inner join来消除part与order之间的cross join。

       BFS返回的是表的Join顺序。

    3. 根据2中返回的表的Join顺序重新生成Join的执行计划。   

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/685060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python基础六

目录 一、Python数据类型--字典 1.访问字典里的值 2.修改字典 3.删除字典元素 4.字典键的特性 二、Python内置函数--字典相关 一、Python数据类型--字典 字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值 key>value 对用冒号 : 分割&#…

Tesla EDI 项目数据库方案开源介绍

近期为了帮助广大用户更好地使用 EDI 系统,我们根据以往的项目实施经验,将成熟的 EDI 项目进行开源。用户安装好知行之桥EDI系统之后,只需要下载我们整理好的示例代码,并放置在知行之桥指定的工作区中,即可开始使用。 …

Centos下 ffmpeg Unknown encoder ‘libx264‘终极解决方法

目录 背景 原因分析 解决问题 1. 确认提前安装了X264以及相关依赖。

数据结构的三要素

1 三要素之逻辑结构:数据元素之间的逻辑关系 集合:各个元素同属同一集合,别无其他关系,比如全世界500强公司 线性结构:数据元素是一对一的关系,除了第一个元素,其他元素都有唯一前驱&#xff…

设计模式学习之工厂方法模式

设计模式系列往期文章 设计模式学习之策略模式设计模式学习之策略模式在前端的应用设计模式学习之简单工厂模式 在上一篇文章中我们学习了简单工厂模式——这是工厂模式中最简单的一种模式,通过工厂类提供的方法创建类(可以类比为产品)&…

【区块链 | GameFi】 - 传统游戏进军链游GameFi的探索之路

撰文:W Labs Kluxury,Cplus 【原文链接】 本文要点: 一,什么游戏类型最适合改为链游? 除了链游特有的质押挖矿型和纯 NFT 型,其余的类型都和传统游戏类型高度重合。所以不存在绝对的什么类型可以链改而什么类型不能链改的结论。 开发者立场上看,符合如下几个特性的游…

机器学习之LDA算法

目录 LDA算法 LDA目标 LDA原理推导 LDA除法模型 LDA减法模型 LDA除法正则模型 LDA减法正则模型 证明:StSwSb LDA算法流程 LDA优点 LDA缺点 基于LDA的人脸识别 LDA算法 线性判别分析(linear discriminant analysis,LDA&#xff0…

chatgpt赋能python:Python编码转换:理解不同的编码方式

Python编码转换:理解不同的编码方式 Python是一种功能强大的编程语言,它广泛用于各种领域,包括Web开发、数据分析、人工智能等等。与其他编程语言类似,Python也需要进行编码转换以处理不同的字符集和文本编码。 本文将介绍Pytho…

Spark Local环境搭建及测试

🥇🥇【大数据学习记录篇】-持续更新中~🥇🥇 篇一:Linux系统下配置java环境 篇二:hadoop伪分布式搭建(超详细) 篇三:hadoop完全分布式集群搭建(超详细&#xf…

TypeScript ~ TS 面向对象编程 ⑧

作者 : SYFStrive 博客首页 : HomePage 📜: TypeScript ~ TS 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &…

6. Redis缓存设计与性能优化

分布式缓存技术Redis 1. 多级缓存架构2. 缓存设计2.1 缓存穿透2.2 缓存失效(击穿)2.3 缓存雪崩2.4 热点缓存key重建优化2.5 缓存与数据库双写不一致 3. 开发规范与性能优化3.1 键值设计3.1.1 key名设计3.1.2 value设计 3.2 命令使用3.3 三、客户端使用 4. 系统内核参数优化 本文…

3-2 Named tensors

这里有一张图像img_t 彩色图像可以看作一个矩阵,只是矩阵中的每一个点不是一个值,而是包含3个值的数组,这3个值就是RGB值 我们给它随机化为一个形状为 [3, 5, 5] 的三维张量img_t img_t torch.randn(3, 5, 5) # shape [channels, rows, co…

数据库是如何工作的

数据库是如何工作的 注: 本文翻译自db_tutorial. 数据库计算机世界的一个基础软件,要想深入了解数据库,就不得不思考如下几个问题: 数据以什么格式保存?(在内存和磁盘上)它何时从内存移动到磁…

永磁同步电机的矢量控制PMSM仿真(matlab仿真与图像处理系列第一期)

永磁同步电机(Permanent Magnet Synchronous Motor, PMSM) PMSM具有高效率、高功率密度和快速响应等特点,在现代工业中得到了广泛应用。而矢量控制是一种广泛应用于永磁同步电机的高精度控制方法,它能够实现永磁同步电机的快速、准确、稳定的运行。 矢量控制 矢量控制的…

Android自定义View合集

文章目录 自定义QQ步数QQ计步效果分析自定义View分析的常用步骤自定义属性获取自定义属性画外圆弧画内圆画文字增加动画让其动起来 自定义评分控件RatingBar自定义评分View效果分析自定义属性获取自定义属性重写onMeasure()方法画出对应数量的星星触摸事件处理 自定义酷狗侧滑菜…

Ubuntu设置无线wifi的静态IP

安装 net-tools sudo apt install net-tools 输入ifconfig查看当前网络ip地址&#xff1a; pulsarpulsar:~$ ifconfig docker0: flags4099<UP,BROADCAST,MULTICAST> mtu 1500inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255ether 02:42:02:8c:87:a…

Linux下使用Mysql数据库忘记密码问题解决

​ 方法1查看初始化密码进行登录&#xff1a; 查看mysql的初始密码 在rootlocalhost后面的就是mysql初始的密码&#xff0c;以上图为例 初始密码则为&#xff1a;ukehBfivW1 方法2直接跳过数据库密码验证&#xff1a; 1、用vi指令进入mysql配置文件/etc/my.cnf并修改 在最后…

jmeter的web接口测试

目录 前言&#xff1a; 一、安装Jmeter 二、添加HTTP接口测试 三、添加新的POST请求 四、添加断言 前言&#xff1a; 使用JMeter进行Web接口测试是一种常见的应用场景。 一、安装Jmeter 二、添加HTTP接口测试 我们的所以工具都会在Jmeter工具中完成&#xff0c;接来就…

python爬虫之Scrapy框架--测试调试--保存数据

目录 ScrapyShell 启动ScrapyShell 基本方法 注意 保存数据到文件 方法一 使用python原生方式保存 方法二 使用Scrapy内置方式 方法三 Item Pipeline的使用 功能 ScrapyShell ScrapyShell是Scrapy框架提供的一个交互式的开发工具&#xff0c;用于调试和测试爬虫&…

数学建模-数据的处理

MATLAB数学建模方法与实践&#xff08;第3版&#xff09;——读书笔记 数据的准备数据获取数据处理缺失值处理噪音过滤数据集成数据归约数据变换标准化离散化 数据统计基本描述性统计分布描述性统计 数据可视化数据降维主成分分析&#xff08;PCA&#xff09;相关系数降维 数据…