Apache Calcite | 青训营笔记

496 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第2天

1.Calcite简介

  1. Apache Calcite 是独立于存储与执行的SQL解析、优化引擎,广泛应用于各种离线、搜索、实时查询引
  2. Calcite 的架构有三个特点:
    • flexible:灵活性
    • embeddable:组件可插拔
    • extensible:可扩展
  3. SQL Parser 层、Optimizer 层等都可以单独使用

2.有关Calcite的思考

  1. Calcite对于数据源的定义是什么,是数据库,数据引擎,还是数据。
  2. Calcite返回的是执行的顺序,还是执行的结果
  3. 由于不需要感知数据源,Calcite是否可以构建一个统一的查询,比如将关系型和非关系型数据库进行整合,例如将一些共有信息抽取存入MySQL,将一些离散的结果存入非关系数据库,实现一条SQL跨源获取数据。

3.Calcite数据源

Calcite提供了两种数据源接口的实现方式

  • 通过编写模型json文件,实现对应的SchemaFactorySchemaTable类。
  • 直接通过代码构造Schema

4.Calcite优化规则

  1. HepPlanner(RBO):基于规则优化
    • 根据优化规则对关系表达式进行转换
    • 遍历一遍后不再出现 rule match 的情况下完成RBO
  2. VolcanoPlanner(RBO+CBO):基于成本优化
    • 根据优化规则对关系表达式进行转换
    • 统计信息
    • 代价模型

5.思考的总结

  1. Calcite 与数据源的对接是根据适配器实现的,其中数据源可以是csv,这说明Calcite的查询时亲自动手查询,调用的仅仅只是数据,而非软件
  2. Calcite返回的是执行的结果,是查询的结果,优化的步骤在内部完成
  3. 实现Calcite定义的适配器,可以完成从零到一的步骤,为一份数据源创建一个SQL接口,对于多个数据源的整合,目前查询到相关信息,非常遗憾