您好,欢迎来到锐游网。
搜索
您的当前位置:首页Calcite初识

Calcite初识

来源:锐游网

Calcite初识

一言以蔽之

基本使用步骤

Scnema模版

官方给的读取CSV示例的Schema模版如下:

{
  version: '1.0',
  defaultSchema: 'SALES',
  schemas: [
    {
      name: 'SALES',
      type: 'custom',
      factory: 'org.apache.calcite.adapter.csv.CsvSchemaFactory',
      operand: {
        directory: 'target/test-classes/sales'
      }
    }
  ]
}

该模版给出了schema文件的基本元素

简单的运行机制分析

  1. 通过实现SchemaFactory接口的插件类, 执行create方法, 完成schema的实例化
    • 具体的插件类在schema文件中的factory字段指定了
    • create方法中的参数通过schema文件中的operand字段指定
    • create方法会实例化一个具体的实现了Schema接口的Schema类(用户自己的Schema类)
  2. 一个Schema类的作用在于管理和自己相关的表和函数
    • 用户自定义的Schema类Override了Map<String, Table> getTableMap()方法
  3. Schema类产生的表均实现了Calcite的Table接口
    • 官方提供的几种实现该Table接口的抽象类,用户可以继承
    • 用户的每一种Table类均可以给出自己的数据读写方法

视图和用户表

  • schema可以自动产出表,在用户自己的Schema类中给出了创建表的方法
  • 用户也可以在schema文件中通过tables字段创建扩展类型的表
  • Calcite支持视图和用户表,只需在schema文件中注明viewcustom

用户表

  • custom类型的用户表, 表的实现均由用户自己完成(高度可定制化)
  • 用户表的具体类由用户在schema文件中的tables.factory字段中指定的具体TableFactory类的create()方法进行实例化
  • 用户具体的TableFactory类实现了TableFactory接口
  • TableFactory类只会通过用户定义的tables字段启动

添加规则进行查询优化

  • Calcite supports query optimization by adding planner rules.
  • Table scans are the leaves of a query operator tree. The usual implementation is EnumerableTableScan
  • 用户自己实现的TableScan类中会注册用户自行添加的规则Rule类
  • 用户自己实现的TableScanRule类(需要继承RelOptRule抽象类)负责具体的实现

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- ryyc.cn 版权所有 湘ICP备2023022495号-3

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务