Calcite系列(四):核心概念-Adapter

2024-05-04 12:12:07 浏览数 (3)

背景介绍

Calcite作为SQL中间件,为提供扩展性并适配不同数据源,设计了Adapter适配器方式对接异构数据源,允许Calcite连接到不同类型的数据源。Adapter会根据数据源特性进行查询优化,并负责将Calcite的逻辑查询转换为可以在特定数据源上执行。

适配器的作用包括:

  1. 数据源连接:适配器提供了与数据源的连接细节,包括如何访问数据和如何与数据源通信
  2. 查询转换:适配器将Calcite生成的逻辑计划转换为特定于数据源的查询或命令
  3. 数据类型映射:适配器负责将数据源的数据类型映射到Calcite理解的数据类型
  4. 查询执行:在某些情况下,适配器可能还会负责查询的实际执行
  5. 结果处理:适配器可能需要处理从数据源返回的结果,将其转换为Calcite可以进一步处理的格式

Calcite已内置了实现很多Adapter适配器,例如用于JDBC数据源、CSV文件和Apache Drill的适配器。此外,开发者可以创建自定义适配器来连接Calcite到他们选择的任何数据源。这种灵活性使得Calcite成为一个强大的工具,用于构建能够跨多种存储系统工作的数据管理和分析应用程序。

狭义理解

狭义上,Adapter是实现SchemaFactory接口,用于创建和初始化 Schema 对象,主要功能包括:解析配置、创建Schema、初始化加载Schema、获取Schema。如下图所示,Calcite允许读取不同Model类型定义的数据,并将数据以Schema形式展示。其中Schema定义为Calcite的关系对象,包括Table(表),Function(函数),SubSchema(多层级Catalog)和Expression(表达式)。

跳转

Calcite Model可基于Json文件定义Schema,用于描述数据源中Schema的相关信息。基于JsonSchema对象实现各个要素定义,如图所示,JsonSchema可根据【type】表示不同的子类实现,主要包括:

  • custom:JsonCustomSchema,自定义类型,基于factory工厂类维护连接信息,定义元素包括:factory、operand;
  • map:JsonMapSchema,Map类型,通过哈希表维护数据源的Schema信息,定义元素包括:tables、types、functions;
  • jdbc:JsonJdbcSchema,JDBC连接类型,通过JDBC连接获取Schema信息,定义元素包括:JdbcDriver、JbdcUrl、JdbcUser、JdbcPassword、JdbcCatalog、JdbcSchema、SqlDialectFactory(SQL方言);

custom类型的Json Model定义示例:

代码语言:json复制
{
  "version": "1.0",
  "defaultSchema": "SALES",
  "schemas": [
    {
      "name": "SALES",
      "type": "custom",
      “factory”: "org.apache.calcite.adapter.csv.CsvFactory",
      "operand": {
        "directory": "sales"
      },
      "tables": [
        {
          "name": "FEMALE_EMPS",
          "type": "view",
          "sql": "SELECT * FROM emps WHERE gender = 'F'"
        }
      ],
      "materializations": [
        {
          "table": "MV_01",
          "sql": "SELECT * FROM emps WHERE gender = 'F'"
        } ] } ]
}

广义理解

广义上,Adapter适配器是Calcite实现跨源查询的基础框架,支持将于跨源无关的计算下推到数据源执行,主要由三部分组成:

  1. Schema模式与SchemaFactory:定义Schema创建工厂类和创建方式
  2. 关系代数节点:表示特定Adapter类型的关系代数和Converter节点
  3. 规则集合:用于Calling Convention,可将计算节点的Convention转换为特定数据源相关的Adapter Convention

Calcite以内置多种类型的Adapter实现其中最常用的是Jdbc Adapter,用于适配不同JDBC数据源的加载和计算。Jdbc Adapter 的整体实现要素包括:

1. JdbcSchema & Factory (Schema)

2. JdbcRel、JdbcToEnumerableConverter等 (RelNode,关系代数节点)

3. JdbcConverterRule (RelRule,规则集合)

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

0 人点赞