Flink计算列实现原理 文章目录CreateParseValidateConvertExecuteSelectParseValidateConvertCreateParse直接使用CalciteParser将String的Sql解析为SqlNode,虚拟列对应的SqlNode的SqlComputedColumn在Flink的设计文档中,虚拟列也被称为计算列。其实应该是刻意与Calcite原生的虚拟列区分开,因为Flink的计算列在Calcite的虚拟列上进行了一些封装。ValidateFlink不对DDL做val
Calcite的CTE解析转换流程 前言从社区的jira发现了一个CTE相关的问题,着手修复前先看了看Calcite是如何处理CTE的。流程ParseParse完之后将CTE分成SqlWith了两部分withList(CTE定义可能有多个)和body两部分, body就是写在最后一段的查询(有可能不会用到所有定义的CTE)ValidateValidateWith的时候会对withList的的每一项进行验证ConvertconvertWith的时候先从body开始因为from的表可能是CTE中定义的,所以是在conver
Calcite的VolcanoPlanner调用流程简介 文章目录前言VolcanoPlannerchangeTraitssetRootfindBestExp总结前言之前分析过HepPlanner的调用以及Graph的变化,这次再来看看VolcanoPlanner的的调用和RelSet的变化VolcanoPlanner从VolcanoPlannerTest的单测不难发现,提供给用户直接调用的接口主要是changeTraits、setRoot、findBestExp三个实际上更这三个方法都被封装在了Programs中,用户一般直接使用Programs#r
从Flink1.8看看Calcite的优化规则怎么用 文章目录前言优化优化方式runHepPlannerrunVolcanoPlanner入口总结前言在Flink1.9之前只使用Calcite进行优化,之后因为Blink的合入才带来了Flink自己的优化策略。本文以Flink1.8为例子,看看Calcite的优化规则应该怎么使用。优化优化方式Calcite有两种优化方式,Flink所有的优化规则也都是用的这两种runHepPlannerFlink在使用HepPlanner的时候拆成了三层,最底层的负责创建Calcite的HepPlanner并执行
Calcite HepPlanner的Graph 文章目录前言GraphaddRelToGraphLogicalTableScanLogicalProjectLogicalUnionLogicalIntersectapplyRulesapplyRule总结前言读到了篇有用的博客,介绍了Hepplaner的调用流程,总结起来就是setRoot()将RelNode注册到Graph中(Graph的顶点叫HepRelVertex是对RelNode封装),再进入findBest()按照program一组组的执行优化规则,从Graph中取出符合的点来应用规则。G
Calcite的RelFieldTrimmer简介 文章目录介绍调试起承转合总结介绍列裁剪是一种常见的SQL优化手段,Calcite当中通过RelFieldTrimmer来实现。代码基于calcite-1.29.0大概看一下这个类,它持有两个对象,relBuilder用来构建plan、trimFieldsDispatcher通过反射调用获得结果;它的方法可以分为三类,流程类、裁剪类和辅助类,下文会提到。调试我们可以通过debug单测来学习RelFieldTrimmer的处理逻辑,RelFieldTrimmerTest会通过RelBuilde
从Kylin看看Calcite的使用方式 文章目录前言文件概览ParseValidateconvertoptimize单测分析ParseValidateConvertOptimize前言之前分析了Flink中如何使用Calcite的,这次再来看看Kylin。与Flink直接使用Calcite的社区版本不同,Kylin单独维护了一个自己版本的Calcite这种方式优点是遇到能够更深入的开发一些社区不具备的功能,缺点是和社区同步升级成本较高(Calcite的社区版本已经到1.30.0了,Kylin还是在1.16.0的基础上发版)文件概览先粗
从Flink看看Calcite的使用方式 文章目录前言分析parseplanner前言已经有过一些博客介绍了Calcite的源码,但还没有介绍过如何使用Calcite的。Flink解析和优化用的都是Calcite,加上Flink的代码质量,应该是最适合参考的项目之一了。分析Flink一直致力于流批一体的处理,重构了不少代码,但是SQL的解析优化都在table模块中1.14.3的flink依赖的calcite版本是1.26.0parseFlink有很多自己的语法,所以在flink-sql-parse中自定义了很多语法。Flink沿用了
Calcite的PullUp规则 文章目录背景规则UnionPullUpConstantsRule做了什么?怎么做的?AggregateProjectPullUpConstantsRule做了什么?怎么做的?背景之前设计的tranform存在一个bug,可以通过将limit上提来解决,所以学习一下Calcite上提的规则。顺便也为之后的公共表达式消除打下基础。规则UnionPullUpConstantsRule做了什么?从名字不难看出是将union的常量上提,例如下面的SQL有两个常量2select 2, deptno, jo
简单三步为Calcite的SqlParser增加配置 前言Calcite使用JavaCC进行Parse,有着自己独特的parse语法。如果想对其进行修改,而又不影响原生的语法,通常会加一个配置参数——参数关闭的时候保持Calcite原生的Parse逻辑,开启后用自己写的逻辑。下面总结了增加配置的几个步骤步骤定义接口方法实现接口方法使用接口方法总结...
使用Avro的JavaAPI读取Parquet 之前学习过一些Scala中不用Spark直接读取Parquet的API,又学习了一下JavaAPI的,在这分享出来。依赖用上了之前分享的mini clusters,这样就不用准备外部的HDFS了<dependency> <groupId>org.apache.parquet</groupId> <artifactId>parquet-avro</artifactId> <version>1.10.0</versio
简单两步在单元测试中使用HDFS和Hive INSERT VALUES Unit TestValidated SqlNode在这里插入代码片before fixINSERT INTO `CATALOG`.`SALES`.`T3`VALUES ROW('a', CAST(1.0 AS INTEGER), CAST(1 AS SMALLINT)),ROW('b', 2, CAST(2 AS SMALLINT)),ROW('c', 3.0, CAST(3 AS SMALLINT)),ROW('d', 4.0, 4),ROW('e', 5
后悔没能早知道的IDEA调试功能之变量操作 文章目录Part ANew Class Level Watch????InspectMark Object????Part BEvaluate Expression????Add to watchesShow Referring ObjectsShow ... ObjectPartCJump To SourceJump To Type SourcePart DView/Edit TextView as ...Show TypesMute RenderersCustomize Data Views????程
后悔没能早知道的IDEA调试功能之调试会话器和工具窗口 文章目录调试会话开始重启停止配置调试工具FramesVariablesThreadsMemoryOverhead调试会话听????起来陌生,但看????起来熟悉,每次debug都会生成一个调试会话。我们可以在不同的调试会话☎️之间切换,下面就是调试会话列表,记录????着调试过的一些方法(对于我这种“健忘症”????患者太有用了) 调试会话列表可能为????️时,只要找到自己想debug的方法,????️右键debug就行。当然也可以参考官网上的做法,找到运行的按钮????,选择debug开始
后悔没能早知道的IDEA调试功能之断点 文章目录断点类型行➡️断点方法????断点字段观察????点异常⚠️断点管理断点移除????断点静音????断点启用⏺️/停用⏹️断点移动/复制⏏️断点断点属性共有独有断点状态断点是debug中最基础、最常用的功能了。掌握下面的技巧,可以帮助你的老板更早换上新车 你更高效地完成✅工作。断点类型其实我也是读到官网的内容才知道断点也分为四种????…行➡️断点在到达设置断点的代码行时暂停程序(是它是它就是它~好像就只用它过这一种????)方法????断点进入或者退出方法时暂停(在方法第一行和最后一
这些IDEA功能要是早点知道就好了~ 前言今年6月毕业,正式入职一家节奏非常快的公司后,明显感觉自己的debug能力跟不上。于是决心抽点时间,系统性的学习一下Idea的各种功能。本系列基于idea2021.2版本调试首先关注的是调试功能,毕竟每次发现问题总是要花很久才能定位到。从官网能够找到十二个不同的调试功能和教程。在阅读的时候我流下了太多悔恨的泪水????,真后悔没能早点知道这些功能。于是整理出了下面的内容,希望能帮助更多的????????校招生们。后悔没能早知道的Idea调试功能之断点...