Apache Calcite 1.42.0 介绍与选型指南

Apache Calcite 1.42.0 认知与选型:SQL 解析校验与查询优化框架的核心概念、适配器、官方示例与同类对比(官方资料溯源,查询日期 2026-10-18)

Apache CalciteCalcite查询引擎SQL2026/10/18

Apache Calcite 1.42.0 介绍与选型指南

目标:基于官方官网、官方发布新闻、Maven Central 与项目仓库联网溯源(查询日期 2026-10-18),完成 Apache Calcite 最新稳定版的认知与选型评估。本文属认知篇(A1),关键论断均随文标注来源,不做本地安装实测;构建运行实测请参见本专栏 B1/E1 配套指南。

一、信息基准

1.1 查询日期与版本依据

  • 查询日期:2026-10-18(本文所有版本号、发布状态与活跃度数据均以该日联网实查为准)。
  • 本次介绍版本:Apache Calcite 1.42.0(官方 News 页 2026-05-31 发布公告,2026-10-18 实查)。
  • 版本依据交叉印证:Maven Central org.apache.calcite:calcite-core 最新 release 为 1.42.0(元数据 lastUpdated 2026-05-31);官方 News 页说明 1.42.0 距上一版 1.41.0(2025-11-01)约 7 个月,含 39 位贡献者的贡献(2026-10-18 实查)。
  • 版本节奏参考:1.40.0(2025-05-28)、1.41.0(2025-11-01)、1.42.0(2026-05-31),约半年一个大版本(来源:官方 News 页 https://calcite.apache.org/news/ ,2026-10-18 实查)。

1.2 官方来源清单

来源用途地址
项目官网定位与新闻https://calcite.apache.org/
官方下载页版本在架与校验https://calcite.apache.org/downloads.html
官方 News版本发布公告https://calcite.apache.org/news/
官方 Tutorial快速上手教程https://calcite.apache.org/docs/tutorial.html
官方参考文档algebra/adapter 等手册https://calcite.apache.org/docs/
官方代码仓库源码与发布https://github.com/apache/calcite
Apache 项目页项目状态https://projects.apache.org/project.html?calcite

二、软件概述

本文介绍的是 Apache Calcite 1.42.0:一个用于构建数据管理系统的动态框架(a dynamic data management framework),其核心是把以关系代数表示的查询,通过可插拔的查询转换规则变换为高效的执行形式,并附带可选的 SQL 解析器与 JDBC 驱动;Calcite 不存储数据,也不偏好任何执行引擎,数据格式、执行算法、计划规则、算子类型、元数据与成本模型均可插拔(来源:projects.apache.org 项目描述与官网,2026-10-18 实查)。许可为 Apache License 2.0(来源:官方仓库 LICENSE,2026-10-18 实查)。

Calcite 于 2015 年进入 Apache 孵化器并毕业为顶级项目(来源:projects.apache.org 项目创建时间与官网历史,2026-10-18 实查)。它长期作为众多数据系统的「SQL 前端/优化器底座」被复用:Apache Hive、Druid、Flink、Phoenix、Storm 等项目均在其上构建 SQL 能力(来源:官方 Powered By 列表 https://calcite.apache.org/docs/powered_by.html ,2026-10-18 实查)。

它要解决的核心问题是:让自研数据系统不必从零实现 SQL 解析、校验、关系代数改写与基于成本的优化,只需实现适配器接口描述「数据长什么样、怎么读」,即可获得完整的 SQL 处理链路与持续演进的优化器能力。

三、核心架构

3.1 SQL 处理流水线

一条 SQL 在 Calcite 内经历:解析(JavaCC 实现的词法/语法解析,生成 SqlNode AST)→ 校验(结合 Catalog 元数据做名称与类型解析)→ 转换为关系代数(RelNode)→ 优化(规则驱动的计划改写与成本选择)→ 输出可执行计划(来源:官方参考文档 https://calcite.apache.org/docs/reference.html 与 algebr 页面,2026-10-18 实查)。

3.2 关系代数与 RelBuilder

Calcite 内部以关系代数( relational algebra)表达查询计划;RelBuilder 提供扫描、过滤、关联、聚合等算子的高层构建 API,是编写规则与适配器的常用入口(来源:官方 algebra 文档,2026-10-18 实查)。

3.3 优化器与规则体系

  • 规则可插拔:heuristic(启发式)与 cost-based(基于成本)两类计划器;Volcano 风格的成本优化配合自定义成本函数(来源:官方参考文档 Planner 章节,2026-10-18 实查)。
  • 物化视图与命中改写:内置物化(materialization)相关能力,用于在计划阶段识别可复用结果(来源:官方参考文档,2026-10-18 实查)。

3.4 适配器(Adapter)与 Schema 模型

  • Schema/SchemaFactory:以 model JSON 或代码声明「外部数据源映射为表」;Table/TableFactory 描述行类型与读取实现,官方 CSV 示例示范了 ScannableTable/FilterableTable/TranslatableTable 三档由浅入深的适配方式(来源:官方 Tutorial,2026-10-18 实查)。
  • JDBC 驱动:jdbc:calcite: 连接串 + model 配置即可获得一个「逻辑数据库」,SQL 能力由 Calcite 提供、数据由适配器供给(来源:官方 Tutorial,2026-10-18 实查)。

3.5 方言与前端支持

支持解析与改写多种 SQL 方言(如 MySQL、BigQuery 等 parser 配置),便于在外部 SQL 生态间做转换(来源:官方参考文档 SQL Language 章节,2026-10-18 实查)。

四、功能特性

功能域说明来源
SQL 解析与校验JavaCC 解析器、类型推断、元数据校验官方参考文档
查询优化规则可插拔、启发式/CBO、物化视图改写官方参考文档
适配器框架Schema/Table 抽象 + model JSON 声明,快速接入外部数据官方 Tutorial
多方言支持多种 SQL 方言解析/改写配置官方参考文档
JDBC 接入jdbc:calcite: 驱动 + sqlline 等标准 JDBC 工具可用官方 Tutorial
流式扩展支持对流式查询的窗口/聚合语义扩展(STREAM 关键字等)官方 stream 文档
生态复用Hive/Druid/Flink/Phoenix/Storm/Doris 等引擎复用其 SQL 引擎官方 Powered By 列表

💡 说明:上表来源前缀 https://calcite.apache.org/docs/ ,2026-10-18 实查。

五、快速上手

以下步骤引自官方 Tutorial《Tutorial》(来源:https://calcite.apache.org/docs/tutorial.html ,2026-10-18 实查),使用官方 calcite-example-csv 适配器(把一个目录的 CSV 文件映射为可查询的 schema),本文不做本地实测。

  1. 下载并构建(官方原文要求 Java 8/9/10 与 Git):
$ git clone https://github.com/apache/calcite.git
$ cd calcite/example/csv
$ ./sqlline
  1. 通过 sqlline(随项目分发的 SQL Shell)连接:
sqlline> !connect jdbc:calcite:model = src/test/resources/model.json admin admin
  1. 元数据与查询(官方示例回显要点):!tables 可见 SALES schema 下的 EMPS/DEPTS/SDEPTS 三张表与系统 metadata 表;随后执行标准 SQL:
sqlline> SELECT * FROM emps;
sqlline> SELECT d.name, COUNT(*)
. . . .> FROM emps AS e JOIN depts AS d ON e.deptno = d.deptno
. . . .> GROUP BY d.name;

官方说明:系统表(COLUMNS/TABLES)始终存在,业务表由具体适配器实现提供,本例来自 resources/sales 目录下的 CSV 文件(来源同上,2026-10-18 实查)。

💡 说明:Tutorial 中的构建要求写明 Java 8/9/10,属于示例页历史基线;1.42.0 的实际 JDK 要求以官方源码构建文档为准(本文未实测,不展开)。

六、适用场景与限制

6.1 适用场景

  • 自研数据平台/查询引擎需要 SQL 接口与优化器,希望复用成熟开源底座而非自研。
  • 为异构数据源(文件、NoSQL、外部服务)构建统一联邦查询层。
  • 需要 SQL 方言转换、权限校验、改写审计等网关型中间件。
  • 流批一体引擎的 SQL 层(如 Flink SQL 借助 Calcite 解析与优化)。

6.2 限制与注意

  • Calcite 只做「SQL 引擎前半段」:不存储数据、不执行计算,必须自备或复用执行引擎(来源:projects.apache.org 描述,2026-10-18 实查)。
  • 版本节奏为半年级大版本,API 在大版本间存在演进,升级需对照官方 history(来源:官方 News/history 页,2026-10-18 实查)。
  • 上手门槛较高:关系代数、规则与成本模型需要一定学习成本。

七、同类选型对比

对比对象选取「SQL 引擎底座」同类方案:ANTLR 自建解析器、Apache Arrow DataFusion,以及复用 Calcite 的成熟引擎 SQL(活跃度数据来源:GitHub 星标数经第三方徽章服务获取、各官方发布渠道,2026-10-18 实查)。

维度Apache Calcite 1.42.0ANTLR 自建Apache Arrow DataFusion复用 Calcite 的引擎 SQL(如 Flink SQL)
类型定位SQL 解析/校验/优化框架(不含执行与存储)语法解析工具 + 自研全套优化执行Rust 编写的向量化查询引擎(含执行)完整流批 SQL 引擎
许可Apache-2.0BSD-3-ClauseApache-2.0Apache-2.0
社区活跃度GitHub 星标约 5.2k;2026-05-31 发 1.42.0GitHub 星标约 19k;4.13.2 发布于 2023-09-04(低频稳定)GitHub 星标约 9.5k;最新 tag v55.2.0(2026-10 仓库实查)GitHub 星标约 25k(Flink 主仓库);季度级发版
版本节奏半年级大版本(1.40→1.41→1.42)多年未发新大版本,主要维护 4.13.x月度级大版本迭代(版本号随 Arrow 世代)半年级大版本 + patch
兼容矩阵JVM 生态(Java/Kotlin/Scala);JDBC 输出多语言运行时生成Rust 核心 + Python 绑定;与 Arrow 列式格式无缝引擎自带运行时与部署形态
典型取舍优化器与方言能力最强、生态验证充分;需自配执行完全自主可控但工程量大、优化需自研现代向量化执行、单机/嵌入式友好;SQL 方言覆盖不如 Calcite拿来即用;但被绑定到该引擎的部署与语义

💡 选型建议:在 JVM 生态自研数据系统并需要完整 SQL/优化能力,选 Calcite;只需语法解析、优化打算自研,可用 ANTLR 自建;Rust/嵌入式与高性能向量化场景选 DataFusion;如果诉求是「直接可用」而非「造引擎」,优先评估 Flink SQL 等 Calcite 系成品引擎。

八、参考链接