自学内容网 自学内容网

Calcite第二课:核心概念

Calcite 是一个用于优化异构数据源的查询处理的基础框架,其核心概念和组件设计使其具有高度的灵活性、可插拔性和可扩展性。以下是 Calcite 的核心概念和主要组件的介绍:

逻辑概念

  1. SQL Parser(SQL 解析器)

    • SQL 解析器负责将用户输入的 SQL 语句转换为内部的数据结构,通常是关系代数表达式。定义了一套 SQL 语言的 AST(Abstract Syntax Tree),并基于 javacc 实现了一个标准的 SQL 解析器。
    • 作用:解析 SQL 语句并生成逻辑计划,为后续的优化和执行做准备。
    • 主要机制:使用 JavaCC 或 FMPP 等工具生成解析器代码,支持自定义 SQL 语法扩展。通过解析 SQL 语句,生成 AST,并根据 AST 进行进一步的处理和优化。
  2. Optimizer(优化器)

    • 查询优化器是 Calcite 的核心组件,负责对逻辑执行计划进行优化。它基于规则(RBO)和基于代价(CBO)两种优化模型,生成可执行的最佳执行计划。
    • 作用:通过应用各种优化规则(RelOptRule)和成本模型(Cost Model)来优化查询计划。
    • 主要机制:支持多种查询计划引擎,优化过程可以被拆解为多个阶段,每个阶段都可以独立优化。优化器包含三个主要组件:规则(Rule)、代价模型(Cost Model)和统计信息(Statistics)。规则用于定义优化策略,代价模型用于评估不同执行计划的成本,统计信息用于提供数据分布和大小的信息。
  3. Adapter(适配器)

    • 适配器负责将优化后的查询计划转换为特定数据源的执行计划。Adapter 是 Calcite 用于对接异构数据源的适配器方式。它允许 Calcite 连接到不同类型的数据源,并根据数据源特性进行查询优化。
    • 作用:根据数据源的特性进行查询优化,并负责将 Calcite 的逻辑查询转换为可以在特定数据源上执行的物理查询。
    • 主要机制:支持多种数据源,如关系型数据库、流处理系统等,允许 Calcite 连接到不同类型的数据源。其中 Convention 代表一类特定的数据源或执行引擎。它用于生成与具体数据源或引擎相关的执行计划。初始逻辑计划的所有树节点 Convention=NONE,此时 CBO 代价无穷大,基于 Calcite 内置执行器无法直接执行。

小结

Calcite 的设计理念侧重于灵活性、适应性和可扩展性,这使得它成为最广泛采用的查询优化器之一。其核心组件包括 SQL 解析器、优化器和适配器,每个组件都可以单独使用或进行定制化的扩展。这种设计使得 Calcite 能够在现有的存储或计算系统上方便地构建 SQL 访问层,并且能够处理实时数据流或不确定数据结构的应用。

这些核心概念共同构成了 Calcite 的基础架构,使其成为一个强大的 SQL 解析、优化和执行引擎,广泛应用于 Hive、Drill、Flink、Phoenix等项目中。

源码概念

Calcite 抛出的概念非常多,先把这些概念理清楚、归归类后再去看代码,思路就清晰很多,以下是比较重要的一些概念,先有一个大概的印象。

  • RelNode 关系表达式,主要有 TableScan, Project, Sort, Join 等。如果 SQL 为查询的话,所有关系达式都可以在 SqlSelect 中找到, 如 where 和 having 对应的 Filter, selectList 对应 Project, orderBy、offset、fetch 对应着 Sort, From 对应着 TableScan/Join 等等。
  • RexNode 行表达式,如RexLiteral(常量), RexCall(函数), RexInputRef(输入引用)等。
  • RelTraits 转化特征,存在于RelNode中,用来定义逻辑表的物理相关属性(physical property),三种主要的 trait 类型是:Convention、RelCollation、RelDistribution;
  • Rule 转化规则,可以将一个RelNode 转化另一种RelNode, 目前Calcite主要有两种Rule。
  • Planners 优化器。主要有两种 HepPlannerVolcanoPlanner 分别对应着RBO和CBO 优化器。

小结

Calcite 架构设计得比较好,其中各个组件都可以单独使用,Rule(规则)扩展性很强,用户可以根据业务场景自定义相应的优化规则,它支持标准的 SQL,支持不同的存储和计算引擎,目前在业界应用也比较广泛,学好 calcite 月薪十万。


原文地址:https://blog.csdn.net/yuand7/article/details/142844746

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!