首页 > 数据库 >Flink SQL 的工作机制

Flink SQL 的工作机制

时间:2024-07-27 19:28:03浏览次数:10  
标签:Flink t2 Plan SQL 机制 执行 id Physical

前言

Flink SQL 引擎的工作流总结如图所示。

  从图中可以看出,一段查询 SQL / 使用TableAPI 编写的程序(以下简称 TableAPI 代码)从输入到编译为可执行的 JobGraph 主要经历如下几个阶段:

  1. 将 SQL文本 / TableAPI 代码转化为逻辑执行计划(Logical Plan)
  2. Logical Plan 通过优化器优化为物理执行计划(Physical Plan)
  3. 通过代码生成技术生成 Transformations 后进一步编译为可执行的 JobGraph 提交运行

例子1 :考虑如下表达 JOIN 操作的一段 SQL。

SELECT 
  t1.id, 1 + 2 + t1.value AS v 
FROM t1, t2 
WHERE 
  t1.id = t2.id AND 
  t2.id < 1000

一、Logical Planning(逻辑执行计划)

   Flink SQL 引擎使用 Apache Calcite SQL Parser 将 SQL 文本解析为词法树,SQL Validator 获取 Catalog 中元数据的信息进行语法分析和验证,转化为关系代数表达式(RelNode),再由 Optimizer 将关系代数表达式转换为初始状态的逻辑执行计划。

备注:TableAPI 代码使用 TableAPI Validator 对接 Catalog 后生成逻辑执行计划。

二、 Physical Planning on Batch(物理执行计划)

   通过上述一系列操作后,得到了优化后的逻辑执行计划。逻辑执行计划描述了执行步骤和每一步需要完成的操作,但没有描述操作的具体实现方式。而物理执行计划会考虑物理实现的特性,生成每一个操作的具体实现方式。比如 Join 是使用 SortMergeJoin、HashJoin 或 BroadcastHashJoin 等。优化器在生成逻辑执行计划时会计算整棵树上每一个节点的 Cost,对于有多种实现方式的节点(比如 Join 节点),优化器会展开所有可能的 Join 方式分别计算。最终整条路径上 Cost 最小的实现方式就被选中成为 Final Physical Plan。

回顾上述的例子1 ,当它以批模式执行,同时可以拿到输入表的 Statistics 信息。在经过前述优化后,表 t2 到达 Join 节点时只有 1,000 条数据,使用 BroadcastJoin 的开销相对最低,则最终的 Physical Plan 如下图所示。

三、Translation & Code Generation(转换算子)

  代码生成(Code Generation) 在计算机领域是一种广泛使用的技术。在 Physical Plan 到生成 Transformation Tree (转换算子树)过程中就使用了 Code Generation。

回顾例子1 ,以 表 t2 之上的 Calc 节点 t2.id < 1000 表达式为例,通过 Code Generation 后生成了描述 Transformation Operator(flink转换算子) 的一段 Java 代码,将接收到的 Row 中 id < 1000 的 Row 发送到下一个 Operator。

    Flink SQL 引擎会将 Physical Plan 通过 Code Generation 翻译为 Transformations,再进一步编译为可执行的 JobGraph。

内容有误请指出~

参考文章:

https://developer.aliyun.com/article/765311

标签:Flink,t2,Plan,SQL,机制,执行,id,Physical
From: https://blog.csdn.net/SHWAITME/article/details/140736037

相关文章

  • sql优化
    建表需要注意的:能用int的不要用varchar,如果非负的话用UNSIGNEDint,Ip地址用int存(使用inet_aton函数转换索引用没用,用的哪个索引,foreceindex指定索引in和exist:in需要对子表全表扫描,exist是把外面数据一条条带进来,子表数据量大时往往exist快子查询和join,子查询就是where条件......
  • sql注入漏洞复现
    and1=1正常and1=2报错从这就已经说明是sql数字型注入了上sqlmap验证一下存在布尔盲注,时间盲注......我是在漏洞盒子上提交的,能不能通过看运气吧下面这个漏洞已经是很久之前的了,现在已经是修复了,当时还是太年轻了......当时复现过程没有做好,截图也已经删掉了............
  • 菜鸟通关sqli-labs记录(1-54)
    目录基础环境所需知识Mysql系统数据库union联合查询通关过程通用思路1.第一关2.第二关2.1判断有无注入点2.2猜解列名数量(字段数量)2.3报错,判断回显点2.4信息收集2.5使用对应的SQL注入3.第三关4.第四关5.第五关6.第六关7.第七关8.第八关9.第九关10.第十关11.第十一关12.......
  • MySQL的DDL和DML操作语法
    一、SQL分类SQL,英文:StructuredQueryLanguage,结构化查询语言。是用于操作关系型数据库的编程语言。SQL定义操作所有关系型数据库的统一标准,可以使用SQL操作所有的关系型数据库管理系统,以后工作中如果使用到了其他的数据库管理系统,也同样的使用SQL来操作。......
  • Android低功耗子系统的投票机制以及触发进入系统休眠的过程
    从kernel角度看,系统是否进入休眠应该由内核来控制,因此Linux引入了wakeupsource以及autosleep机制关于wakeupsource的介绍,请参考:WakeupSource框架设计与实现关于autosleep机制,请参考:autosleep框架设计与实现在内核中,使用wakeupsource提供投票机制,让各个系统模块投票......
  • 数据表或视图不存在[错误代码] SQLSTATE[42S02],数据库表不存在
    问题分析:有一些用户在升级的过程中遇到升级中断的问题  导致这个问题的出现有几种可能性:第一种是由于以往升级的过程中数据表丢失,从而影响升级。第二种是人为改动或二开过数据库表,导致升级时数据表和官方不一致,从而影响升级。如:网站搬家处理不当,后台版本与数据库版本不一致。 ......
  • Postgresql & PgAdmin powered by compose
    Postgresql&PgAdminpoweredbycomposehttps://github.com/fanqingsong/compose-postgres/blob/master/docker-compose.ymlQuickStartCloneordownloadthisrepositoryGoinsideofdirectory,cdcompose-postgresRunthiscommanddocker-composeup-d......
  • sql优化
    目录插入数据大批量插入数据主键优化数据组织方式页分裂页合并主键设计原则orderby优化groupby优化limit优化count优化update优化插入数据insert优化批量插入 500-1000insertintotb_testvalues(,,),(,,),.....手动提交事务starttra......
  • MySQL存储过程
    目录介绍特点创建调用查看删除变量查看系统变量设置系统变量注意:用户定义变量赋值使用局部变量声明赋值if参数用法:casewhilerepeatloop游标条件处理程序介绍存储过程是事先经过编译并存储在数据库中的一段sql语句的集合,调用存储过程可以简化应用......
  • 1251 - Client does not support authentication protocol requested by server; cons
    错误记录:1251-Clientdoesnotsupportauthenticationprotocolrequestedbyserver;considerupgradingMySQLclient错误原因:mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password。解决方案:解决:①升级navicat驱动;②......