欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

从Kylin看看Calcite的使用方式

时间:2023-07-29
文章目录

前言文件概览

ParseValidateconvertoptimize 单测分析

ParseValidateConvertOptimize 前言

之前分析了Flink中如何使用Calcite的,这次再来看看Kylin。与Flink直接使用Calcite的社区版本不同,Kylin单独维护了一个自己版本的Calcite

这种方式优点是遇到能够更深入的开发一些社区不具备的功能,缺点是和社区同步升级成本较高(Calcite的社区版本已经到1.30.0了,Kylin还是在1.16.0的基础上发版)

文件概览

先粗略的看看Calcite解析优化query的几个阶段,Kylin都编写了哪些文件

Parse

Kylin只做DQL,又是比较严格的标准SQL,所以对Calcite在语法上的新增不多

Validate

Validate都是直接用的SqlValidatorImpl,而不是Flink那样继承SqlValidatorImpl

类型也只是稍微作了调整

convert

接下来的convert是用的SqlToRelConverter

optimize

没有新增HepPlanner和VolcanoPlanner,只是新增了一些OLAPRelNode

单测分析

在Kylin的单测中有一个QueryConnectionTest和Calcite的JdbcTest很像,但它只有一个测试方法

执行的流程和Calcite的差不多

Parse

SqlParserImpl也是用JavaCC代码生成的

Validate

validateQuery的入口,对SqlNode进行递归的校验

Convert

将SqlNode转为RelNode

Optimize

Convert完了后到Hepplanner进行优化,不过这个qury比较简单没什么需要优化的

大部分代码都直接复用着Calcite的,只是在某些细节进行调整并没有像Flink那样大量的继承重写某个Calcite的类

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。