前言

下定了很大决心,终于决定写一个专栏。某种意义上来讲,这也是一种立flag,倒逼自己的行为。最后有没有打脸暂且不论,开个头总是好的。

决定以calcite作为对象,是因为目前工作主要接触到就是它。作为Olap引擎中sql解析和优化的事实标准,caclite有其独特的优势。我个人理解,主要是以下几点:

  • 轻量,足够轻量,让其被引入的成本低;
  • 扩展性强,在calcite设定的框架下,扩展优化规则和一些代价计算算法十分容易;
  • sqlNode和relNode模型抽象简易,sql标准支持成熟。

虽然calcite本身体量不大,但是麻雀虽小,五脏俱全。要彻底搞清楚其中的方方面面,实非易事。所以后面将从sql优化领域涉及到的各个要点,逐个击破。具体手段将会是,借助test case进行源码跟读,深入细节。其间有豁然开朗处,总结成文,以飨观众。

内容地图

为了内容有一定组织性,不至于信马由缰,不知所云,下面列出目前能够想到的一些主题,以此作为提纲挈领之作用。

Calcite是什么及关系代数理论基础

calcite是什么东西?能解决什么问题?解决这些问题的理论基础是什么?
弄清楚这些才能更好理解后面章节的内容。

javacc——如何parse一段sql

sql作为大数据领域生产和查询的主流DSL,生命力旺盛而强大。那么,如何从一段sql文本解析为可解释的程序对象呢?javacc是calcite选择的答案。

validator——校验sql的合法性

按照SQL标准解析完成的ast充满着不确定性,它只满足词法,但不完全满足语法。validator正是用来补齐这一环。

关系代数——RelNode

关系代数RelNode是参照关系代数理论进行设计的模型,相比于SqlNode纯词法解析的产物,拥有更多的属性和理论加持。calcite的核心就是RelNode,后续的所有优化规则、代价计算也都将基于RelNode进行。

RBO——基于规则的优化

依赖于关系代数的理论基础,relNode本身是可以进行一些等价变换的。逻辑上来看,区别并不大,但是对实际执行的效果来看,确是天差地别。
在长期的实践中,专家们发现某些特定的转换可以带来sql执行性能的提升,于是就将其总结了出来,在calcite的落地中,称为规则。比如FilterPushDown,谓词下推。

CBO——基于代价的优化

但往往,规则是武断的。最终,还得要数据说话。CBO是另外一种优化的思路。在CBO的框架下,对于某一类变形转换,需要计算出实际的执行代价,择优选用。相对来说,更为科学。

sql执行框架

正如前言,麻雀虽小,五脏俱全。除了优化体系,具体如何执行,calcite也提供了一套执行框架,并且支持jdbc标准。

物化视图

加速SQL执行的另一种思路,是以空间换时间。在大数据领域中,这个所谓“空间”的另一种叫法是物化视图。其思路是,对查询逻辑中的某一段热点进行提前计算,那么sql则可以把原本面向大数据量的结果集,替换成这一段已经提前计算好的结果集,以此减少计算量,打到提速的效果。

后话

大概应该就这些大的主题吧。如果在框架内部发现一些有意思的实现,后面也会单独拎出来唠唠。

calcite解读专栏前言相关推荐

  1. 【tkinter 专栏】专栏前言

    文章目录 前言 本章内容导图 1. tkinter 工具及特点 2. 为什么使用 Python 进行 GUI 设计? 2.1 Python 可以做什么 2.2 使用 tkinter 可以干什么? 3. ...

  2. 区块链技术学习总结专栏前言

    谨以此专栏记录我在区块链行业的技术学习之旅 我大学读的是经济学专业,然而在大四接触到编程之后,就一发不可收,对这种极大促进生产力的工具有着深深的崇敬,为此我开始自学编程,我看过很多人分享过他们自学编程 ...

  3. 程序员自我修养专栏前言

    历时两个月的专栏,磕磕绊绊终于总结啦! 这个专栏主要涉及装载.链接以及库的知识 下图是这个专栏知识点的图解: 预编译简介 编译简介 目标文件详解 符号 静态链接 空间的地址和分配 符号解析和重定位 C ...

  4. GameFramework篇:StarForce全解读(前言)

    从这篇文章开始,我就和大家一起,以一个初学者的角度开始学习GF这个框架. 本来我是想以一层层剖析代码的形式来和大家一起学习,想了想又觉得不妥,授人以鱼不如授人以渔,应当更多的说学习的方法. 所以我决定 ...

  5. 目标检测论文解读复现之六:基于YOLOv5的遥感图像舰船的检测方法

    目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果 五.实验结论 六.投稿期刊介绍 前言 此前出了目标改进算法专栏,但是对于应 ...

  6. 目标检测论文解读复现之五:改进YOLOv5的SAR图像舰船目标检测

    目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果(部分展示) 五.实验结论 六.投稿期刊介绍 前言 此前出了目标改进算法专栏 ...

  7. 目标检测论文解读复现之一:基于改进YOLOv5的整车原木数量检测方法——TWD-YOLOv5(代码已复现)

    目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果 五.投稿期刊介绍 前言 此前出了目标改进算法专栏,但是对于应用于什么场景, ...

  8. 图像传感器与信号处理——SFR算法/ISO 12233解读

    图像传感器与信号处理--SFR算法/ISO 12233解读 图像传感器与信号处理--SFR算法/ISO 12233解读 1. 前言 2. 基于视觉的分辨率测量方法 3. 基于边界的SFR算法 4. 基 ...

  9. 安卓学习专栏——百度地图(6)移动到我的位置(图文+代码)

    步骤 系列文章 前言 介绍api 实现效果 activity_main.xml AndroidManifest.xml MainActivity.java(修改) 附录.参考资料 下载资源 总结 系列 ...

最新文章

  1. php require_once 不起作用,关于php:require_once()或die()无法正常工作
  2. Spring 框架的AOP之注解的方式
  3. CSS 公共样式分享
  4. 在本地库不连接远远程库的情况下操作远程库-----sql server
  5. suse系统关闭防火墙
  6. safari检查元素_如何防止Safari检查是否使用Apple Pay
  7. 上拉加载更多后台数据_微信小程序端操作云数据库
  8. java如何保证类不被回收_垃圾回收机制保证了Java程序不会出现内存溢出。( )
  9. APPCAN学习笔记001---app快速开发AppCan.cn平台概述
  10. 2014C++A:蚂蚁感冒(数组+判断)
  11. C++中的floor()函数
  12. 请检查 mysql 模块是否正确加载_mysql_connect() 不支持 请检查 mysql 模块是否正确加载...
  13. arcmap提取dem高程_ArcGIS提取高程点
  14. 李彦宏数字人开场!百度在元宇宙产品“希壤”中办了一场大会,还说未来10年拥堵问题将被解决~...
  15. CS领域论文数据分析
  16. gitee的上传步骤
  17. 如何建立个人网站服务器篇
  18. 华为linux系统能用Cad么,华为平板能装cad画图吗 华为平板可以用cad软件吗?
  19. Android 之路24---Java基础18
  20. linux百度云工具baidu pcs

热门文章

  1. [附源码]java毕业设计动物保护网站
  2. uml 菱形_UML图符号的含义
  3. 部落冲突,欢迎回归玩家,23级大师联赛部落欢迎你长住
  4. LC765. 情侣牵手
  5. Spring Boot 3.x 系列【23】集成Spring WebFlux开发响应式应用程序
  6. 合租服务器禁用 fsockopen 函数,部分程序不正常的解决办法。
  7. 小程序获取头像昵称最新版本
  8. EMC磁珠到底什么样的特性
  9. python第三方库re库实例之爬取古诗词网上诗歌
  10. 【打卡-Coggle竞赛学习2023年1月】文本相似度匹配