wangzzu / awesome

不积硅步,无以至千里
228 stars 47 forks source link

Calcite 学习与总结 #27

Closed wangzzu closed 2 years ago

wangzzu commented 5 years ago

近端因为看 Flink SQL 相关,所以深入看了一下 Calcite 相关的内容,还好公司有一些关于 Calcite 的资料,自己在看的时候少走了很多弯路,而目前外网上关于 Calcite 的资料并不多,准备把自己看的内容整理一下,与大家共同学习。

计划整理的文章有:

  1. Calcite 的介绍(基本架构、流程、特性等讲述),计划:2019.3.10;
  2. Calcite 流程详解(会从解析、验证、优化器详细讲述),计划:2019.3.10,见 Apache Calcite 处理流程详解(一),完成时间:2019.3.7,包括1、2两个部分;
  3. Calcite 的两种 Planner:HepPlanner 和 VolcanoPlanner,重点关注 Calcite 的优化器部分,计划:2019.3.24,见 Apache Calcite 优化器详解(二),完成时间:2019.3.16;
  4. Rule 详解:主要介绍如何实现一个 Rule、以及 Rule 相关的基本内容(可以顺便梳理一下 Calciter 常用的 Rules);
  5. Catalog 详解:主要介绍 Schema 注册相关的内容,配合 Flink 如何利用 Calcite 的 Catalog 来讲解;
  6. Javacc 使用详解:javacc 语法及应用,如何在 Calcite 中添加一个关键字(并实现相应的功能)。
wangzzu commented 5 years ago

第一次超计划完成,不容易啊

lecssmi commented 5 years ago

我正在研究Calcite和Flink的底层,这个时候看到博主的文章,简直是太开心了。之前研究calcite一直没弄懂。

todd5167 commented 5 years ago

希望博主继续更新学习资料,真的很棒。

wangzzu commented 5 years ago

@todd5167 近段会接着更新

xujiapei commented 5 years ago

楼主,请问下您的文章从哪里可以看到,我看现在的连接好像都已经失效了~

wangzzu commented 5 years ago

@todd5167 我这边可以正常打开,你再试试

wangzzu commented 5 years ago

关于 Calcite 这块,其实 Rule 跟 Function 的添加是比较容易的,具体实现可以参考下面两个 PR:

  1. Calcite-2624
  2. Calcite-2867,这个 PR 有很多 JSON function 添加的子 task,有兴趣的可以看下。

之前计划的 Calcite 与 Flink 的结合,这个准备在 Flink 系列中介绍,这样的话,Calcite 这里主要还剩下三块的内容需要深入介绍一下:

  1. SQL 解析,总结一些编译原理、Javacc 语法的内容;
  2. Code Generate,代码自动生成是 SQL 常用的、而且非常有效的优化手段;
  3. 向量化,目前 SQL 中向量化技术也是 SQL 常用的、有效的优化手段。
wangzzu commented 4 years ago

在这里再开一个 SQL 优化的子系列,详细介绍相关的内容,目前想到的两块是:

lecssmi commented 4 years ago

坐等更新和Rule相关的部分。

wangzzu commented 2 years ago

很遗憾,这个系列没有坚持下来,关于 SQL 的核心优化手段之 code gen 和向量化,等后面再专门来做讨论,calcite 这里就先关闭了