技术贴 | Query 物理计划构建指南

news2024/9/20 6:26:48

在往期博客《执行器 - Query 执行详解》中,我们介绍到到一条 Query 的 SQL 语句需要经过:词法分析 —— 生成 AST 语法树 —— 生成物理计划。本期博客我们接续上篇讲解一条 Query 语句物理计划的具体结构,以及如何构建物理计划。

物理计划是根据逻辑计划(逻辑计划讲解参考往期博客)生成的树形结构,执行引擎需要按照物理计划进行实际查询,根据逻辑计划的不同逻辑算子生成物理算子,通过记录处理链路,即数据流来记录算子的执行顺序,根据顺序进行执行。

01 物理计划结构

物理计划组成

▪ Processors
该成员记录了整个物理计划的算子。

▪ Streams
数据流,记录了所有算子之间的连接关系,Streams 和 Processors 基本上就可以较为完整地描述整个物理计划的拓扑结构。

▪ ResultRouters
物理计划按层次进行构建(由逻辑计划树自底向上进行构建),该成员记录了当前层次构建完成后的所有算子,它们是由同一种逻辑算子转换而成的多个物理算子。

▪ ResultTypes
当前层次构建完成后的所有算子的输出列类型数组。

▪ ResultColumns
当前层次构建完成后的所有算子的输出列数量。

▪ GatewayNodeID
物理计划执行的网关节点,数据最终的汇总节点。

▪ MergeOrdering
当前层次构建完成后,下一层需要按哪几列进行归并输入。

算子组成

▪ Node
算子执行所在节点。

▪ Spec
算子的规格信息。

算子规格组成

▪ Input
该算子的逻辑输入数目。

▪ Core
算子的内部执行逻辑。

▪ Post
记录数据经过该算子后的一些投影、选择、Limit 和 Offset 等处理。

▪ Output
算子的逻辑输出。

数据流组成

▪ SourceProcessor
标明连接的源算子。

▪ DestProcessor
标明连接的目标算子。

DestInput
标明连接目标算子的哪个逻辑输入。

02 物理计划构建

以三节点集群执行一条查询语句为样例解析物理计划构建和执行流程,结构如下:

SQL
create table a(a1 int, a2 int, a3 bool);
insert into a values(1,1,false),(2,2,false),(3,3,false);

create table b(b1 int, b2 int, b3 bool);
insert into b values(1,2,false),(3,4,true),(5,6,true);

select * from a join b on a.a1=b.b1;
向右滑动查看
请添加图片描述
整体流程示意图

算子组成

▪ Node
算子执行所在节点。

根据逻辑算子生成物理算子

该物理计划构建首先会进入 Join 算子的物理算子生成函数 (createPlanNodeforJoin),进行左右两个 scanNode 的物理计划构建,scanNode 是处理表键/值对的扫描,并重组为行的算子。

在构建 scanNode 时,会构建表读取算子TableReader (createTableReaders),它会确认表数据的分布信息,根据数据分布所在节点创建出对应数量的 TableReader 算子,最终左右的物理计划将各生成的 3个 TableReader 算子加入到 PhysicalPlan 当中,如图所示。请添加图片描述

算子组成合并左右子计划

MergePlans 将左右计划进行合并,整体变成一个物理计划,该物理计划中有 6 个 TableReader 算子。
请添加图片描述

根据节点数构建 Join 算子

findJoinProcessorNodes 函数决定在几个节点做 Join 操作,这里的 Tablereader 算子是 3 节点,所以 Join 算子也会构建 3 个分别对应 3 个节点,之后在每个指定节点上添加 HashJoiner,并将左边和右边的输出进行连接,生成 3 个 HashJoiner 算子,并将它左右算子的 Output 类型改为 OutputRouterSpec_BY_HASH(执行时需要跨节点 Hash 重分布,下一小节会介绍另一种 Hash 分布方式)类型。
请添加图片描述

构建数据流
每个 HashJoiner 算子都需要有左右两个 Input,在每个节点上执行时都需要获取到两个表的 TableReader 算子的输出,所以需要调用 MergeResultStreams 方法按照节点数量将 a 表和 b 表的各 3 个 TableReader 连接到各个 HashJoiner 的 Input 左右两端。

如图所示,跨节点 Hash 数据重分布方式 (OutputRouterSpec_BY_HASH) 是要将三个节点上每个 HashJoiner 算子的 Input 每个表的数据做到基本平均分配,例:a表在节点 1 有 3000 条数据,节点 2 有 5000 条数据,节点 3 有 1000条 数据,节点 2需要将数据传输一部分到节点 1 和节点 3,最终三个节点的 HashJoiner 算子的 a 表 Input 都有 3000 条数据。

有向箭头表示数据流 (Stream),Stream 起于一个算子的 Output,终于另一个算子的Input,图中的 Output 类型均为上一小节所说的 OutputRouterSpec_BY_HASH。
请添加图片描述
另外,除本样例中提到跨节点 Hash 重分布 (OutputRouterSpec_BY_HASH) 分布方式,还有一种镜像 Hash 分布方式 (OutputRouterSpec_MIRROR),此方式会将表数据完全广播到每一个节点上,不需要根据节点数进行数据重分布,此 Hash 分布方式的计划如图所示,具体采用哪种分布方式,需要根据表数据量,节点数等进行数据传播和接受的代价计算,两种方式哪个代价更小就使用哪种分布方式。
请添加图片描述

物理计划增加汇总算子
createPlanForNode 函数完成后,物理计划的基本结构就生成完毕,但还需要一个最终汇总结果返回的算子,FinalizePlan 函数便会在已有的物理计划基础上增加一个 Noop 算子,用于汇总最终的执行结果,还需要设置每个算子的 Input 和 Output 所关联的 StreamID,以及 Stream 的类型(Stream 如果连接相同节点的算子为 streamEndpointSpec_LOCAL,否则为 streamEndpointSpec_REMOTE)为之后物理计划的执行做准备,此阶段物理计划如图所示。
请添加图片描述至此,物理计划构建全部完成,而后将进行物理计划的分布式执行,此模块将在后续博客进行介绍。

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

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

相关文章

AI预测福彩3D采取888=3策略+和值012路一缩定乾坤测试5月27日预测第3弹

今天继续基于8883的大底,使用尽可能少的条件进行缩号,同时,今天同样准备两套方案,一套是我自己的条件进行缩号,另外一套是8883的大底结合某位彩友的2码不定位奖号预测二次缩水来杀号。好了,直接上结果吧~ …

多波段光源 通过8种波长实现的成像解决方案

光源在机器视觉中的重要性不容小觑,它直接影响到图像的质量,进而影响整个系统的性能。光源的作用包括提供足够的照明,并确保被摄物体的特征能够被准确地捕捉到图像中,使被检测物体产生清晰的图像,提高图像的对比度和亮…

BEVFormer论文详细解读

文章目录 1. 前言1.1 3D VS 4D1.2 .特征融合过程中可能遇到的问题1.3 .BEV提出背景1.4 .BEV最终得到了什么1.5 .输入数据格式 2. 背景/Motivation2.1 为什么视觉感知要用BEV?2.2 生成BEV视角的方法有哪些?为何选用Transformer呢? 3. Method/S…

业务实战————Uibot6.0 .1多页面商品信息抓取RPA机器人

前言 【案例描述】 鲜果记水果店计划在淘宝电商平台上开设一家新店,小微是该企业运营部分的运营专员,主要负责公司商品上架和管理的工作。 公司计划在开店的新品促销活动中增加水果品类红富士苹果。小微需在商品上架前了解目前平台中销量前列的红富士苹…

【音视频基础概念】颜色与图像

文章目录 前言一、三原色不同三原色的概念三原色的作用 二、颜色空间颜色空间是什么颜色空间的作用常见颜色空间示例灰度图像是什么灰度图像的作用灰度图像的技术细节示例 总结 前言 在当今数字媒体时代,音视频技术在我们的日常生活中占据了重要位置。无论是观看电…

【UE5.1 角色练习】08-物体抬升、抛出技能

前言 在上一篇(【UE5.1 角色练习】08-传送技能)的基础上继续实现控制物体抬升、抛出的功能。 效果 步骤 一、准备技能动画 1. 在项目设置中新建一个操作映射,这里命名为“Skill_GravityControl”,用按键4触发 2. 通过IK重定向…

Redis篇 String

String概念和set,get扩充 一. String类型的基本介绍二. String中set,get方法扩充 一. String类型的基本介绍 redis中所有的key都是字符串类型的,但是value的类型差异很大. redis中的字符串,直接就是二进制方式存储的,可以存储整数,二进制数据 文本数据,Json,xml还有音频等. 二.…

【微积分】Grant Sanderson

梯度:将各个偏导打包 定义:direction of steepest ascent 梯度向量的长度:最速上升方向的陡峭程度 方向导数:偏导的一种拓展 【托马斯微积分学习日记】13.1-线积分_哔哩哔哩_bilibili 概述 16.1line integrals of scalar funct…

⌈ 传知代码 ⌋ 自监督高效图像去噪

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

【驱动】RS485收发控制、自动收发电路及波特率限制

1、芯片本身支持自动收发 RS485收发器芯片本身支持自动收发切换: 优点:简化硬件设计和软件编程,减少外部控制线;缺点:成本高,传输速率可能受限制。下面介绍几款支持自动收发切换的RS485/422芯片 1.1 MAX13487 MAX13487 是一款由 美信(Maxim) 生产的半双工 RS-485/RS…

【管理咨询宝藏113】某大型零售集团数字化转型规划方案

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏113】某大型零售集团数字化转…

Shell脚本学习笔记(更新中...)

一、什么是shell shell的作用是: 解释执行用户输入的命令程序等。 用户输入一条命令,shell就解释一条。 键盘输入命令,LInux给与响应的方式,称之为交互式。 shell是一块包裹着系统核心的壳,处于操作系统的最外层&a…

如何使用maven运行SpringBoot程序?

目录 一、什么是maven 二、什么是SpringBoot 三、如何使用maven运行SpringBoot程序? 一、什么是maven Maven:简化Java项目构建的自动化工具 在软件开发的世界里,Maven以其强大的项目管理和构建自动化功能,为Java开发者提供了…

不含一阶导数项的线性二阶微分方程的通解

假设这里有一个线性二阶微分等式,形式如下: (1) 其中是连续的,是在实闭区间是连续的,如果有人倾向于推广,在相对假弱的假设下,这个结果能够被发现。如果是下列其次线性方程的任意两个线性无关的…

Jmeter环境安装(超级简单)

Jmeter的安装是非常简单的,只需要将下载的安装包解压后,就可以运行了!! 一、首先要下载Jmeter 1.1、官网下载: 下载最新版:https://jmeter.apache.org/download_jmeter.cgi https://jmeter.apache.org/…

【Redis】 关于列表类型

文章目录 🍃前言🍀常见操作命令介绍🚩lpush🚩lpushx🚩rpush🚩rpushx🚩lrange🚩lpop🚩rpop🚩lindex🚩linsert🚩llen🚩lrem&…

暴雨公司受邀参加中国图象图形大会

5月24日至26日,备受瞩目的中国图象图形大会(CCIG 2024)在古都西安圆满落幕。本届大会主题为“图聚智生,象合慧成”,由中国图象图形学学会主办,空军军医大学、西安交通大学、西北工业大学承办,陕…

牛客NC166 连续子数组的最大和(二)【中等 前缀和数组+动态规划 Java/Go/PHP/C++】

题目 题目链接: https://www.nowcoder.com/practice/11662ff51a714bbd8de809a89c481e21 思路 前缀和数组动态规划Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规…

动效设计师的角色与职责:创造视觉魔法!

当今社会,随着视频游戏和数字产品的不断发展,动态设计师这个职业也在逐步发展壮大,同时也吸引了很多热爱动画设计的朋友。动态设计的目的是在第一时间吸引用户的注意力。那你知道动态设计师是做什么的吗?动态设计师的发展前景如何…

【Postman接口测试】第一节.接口测试基础认识

文章目录 前言一、接口的基础 1.1 什么是接口 1.2 软件为什么需要接口 1.3 为什么要做接口测试二、接口测试的基础 2.1 接口测试介绍 2.2 接口测试的实现方式三、接口返回数据和JSON详解四、接口测试协议详解总结 前言 一、接口的基础知识 1.1 什么是…