这是我参与「第四届青训营 」笔记创作活动的的第2天
1.Calcite简介
- Apache Calcite 是独立于存储与执行的SQL解析、优化引擎,广泛应用于各种离线、搜索、实时查询引
- Calcite 的架构有三个特点:
- flexible:灵活性
- embeddable:组件可插拔
- extensible:可扩展
- SQL Parser 层、Optimizer 层等都可以单独使用
2.有关Calcite的思考
- Calcite对于数据源的定义是什么,是数据库,数据引擎,还是数据。
- Calcite返回的是执行的顺序,还是执行的结果
- 由于不需要感知数据源,Calcite是否可以构建一个统一的查询,比如将关系型和非关系型数据库进行整合,例如将一些共有信息抽取存入MySQL,将一些离散的结果存入非关系数据库,实现一条SQL跨源获取数据。
3.Calcite数据源
Calcite提供了两种数据源接口的实现方式
- 通过编写模型json文件,实现对应的SchemaFactory、Schema、Table类。
- 直接通过代码构造Schema
4.Calcite优化规则
- HepPlanner(RBO):基于规则优化
- 根据优化规则对关系表达式进行转换
- 遍历一遍后不再出现 rule match 的情况下完成RBO
- VolcanoPlanner(RBO+CBO):基于成本优化
- 根据优化规则对关系表达式进行转换
- 统计信息
- 代价模型
5.思考的总结
- Calcite 与数据源的对接是根据适配器实现的,其中数据源可以是csv,这说明Calcite的查询时亲自动手查询,调用的仅仅只是数据,而非软件
- Calcite返回的是执行的结果,是查询的结果,优化的步骤在内部完成
- 实现Calcite定义的适配器,可以完成从零到一的步骤,为一份数据源创建一个SQL接口,对于多个数据源的整合,目前查询到相关信息,非常遗憾