Calcite

AI TOOL PROFILE工具资料

独立于存储与执行的SQL解析与查询优化框架

官网地址 http://calcite.apache.org

访问官网
价格官网未标价
平台Web / API
归类论文与学术
收录2024-01-01
复核2024-01-01
编辑评分 4.1 / 5

Calcite编辑总结

EDITOR REVIEW编辑评测

Apache Calcite 是 Apache 软件基金会旗下的动态数据管理框架,提供工业标准的 SQL 解析器、校验器和 JDBC 驱动,并通过关系代数与规划规则进行查询优化。它刻意不负责数据存储与处理,只做应用与各类数据源、计算引擎之间的中介,因此可以「只加数据」就构建数据库。它支持连接第三方数据源、浏览元数据,并通过优化器规则把计算下推到数据源侧。需要注意的是,它本身不存储数据、不处理数据,也没有默认的数据格式。

Calcite是什么?

Calcite 是 Apache 软件基金会维护的动态数据管理框架,定位是「为下一个高性能数据库提供基础」。它包含典型数据库管理系统的许多部件,但有意省略了三个关键功能:数据存储、数据处理算法,以及存储元数据的仓库。它不参与数据存储与处理,因此在应用与一个或多个数据存储位置、数据处理引擎之间充当中介时很有优势,也是构建数据库的基础——只需加上数据。

在能力上,它提供工业标准的 SQL 解析器、校验器和 JDBC 驱动;用关系代数表示查询,使用规划规则进行变换,并按成本模型进行优化;可以连接第三方数据源、浏览元数据,并通过把计算下推到数据来实现优化。它不偏好任何数据格式,内存数据集可以使用 linq4j 的 groupBy、join 等算子处理,也可以换成 JDBC 执行同一查询,对应用而言数据和 API 不变,但底层实现不同。

对不同角色来说:普通用户或应用开发者可以直接使用它的 JDBC 驱动执行标准 SQL;需要接入新数据源的用户可以编写适配器,告诉 Calcite 数据源中哪些集合应被视为「表」;需要深度定制的用户可以编写优化器规则,注册新的算子(例如更好的连接算法),或调整查询到算子的翻译方式,Calcite 会把自定义规则和算子与内置规则、算子结合使用。

Calcite核心功能

CAPABILITIES工具标签

标准 SQL 支持

提供工业标准的 SQL 解析器、校验器和 JDBC 驱动,应用可以通过 JDBC 用同一套 SQL 访问不同底层数据源。

查询优化

把查询表示为关系代数,用规划规则做变换,再根据成本模型进行优化,可调整查询到算子的翻译方式。

任意数据源接入

支持连接第三方数据源、浏览元数据,并通过把计算下推到数据源来优化。新增数据源需编写适配器,指明哪些集合视为表。

自定义优化器规则

允许编写优化器规则,使其访问新格式数据、注册新算子(例如更好的连接算法),并把这些规则与内置规则结合使用。

不绑定存储与格式

本身不存储数据,也没有偏好的数据格式。同一查询既可处理内存数据集,也可改由 JDBC 执行,对应用而言 API 不变。

Avatica 子项目

站点列出子项目 Avatica,与 Calcite 的 JDBC 能力配套,用于连接层相关功能。

Calcite值不值得用?

VERDICT工具标签

当你需要在一套 SQL 接口下统一访问多种数据源、或想自建数据库而只缺 SQL 解析与优化这部分时,Calcite 值得选:它不抢数据存储与处理的活,用规则和成本模型把计算下推给底层引擎。当你需要的是一个开箱即用的数据库产品时,它不合适——它明确不存储数据、不处理数据,也没有元数据仓库,必须自己补上这些部分。它的扩展依赖写适配器和优化器规则,因此更适合有 Java 与查询引擎背景的团队,而不是希望零配置上手的使用者。

建议选它的情况

  • 需要为多种数据源提供统一 SQL 接口的场景
  • 自建数据库、只缺 SQL 解析与查询优化模块的团队
  • 希望通过自定义优化器规则做下推优化的引擎开发者

不建议选它的情况

  • 想要开箱即用、自带存储与计算能力的数据库产品
  • 没有 Java 与查询引擎经验、希望零配置上手的用户

Calcite使用建议

HOW TO USE工具标签
入门先把路子走对
  1. 从空实例起步先创建 Calcite 的空实例,此时连接完全为空,再通过 ReflectiveSchema 把 Java 对象注册为 schema,把其中的集合字段注册为表。
  2. 先跑内存再换 JDBC内存数据集用 linq4j 的 groupBy、join 算子处理;验证查询正确后改成 JDBC 执行,同一查询对应用而言数据和 API 不变。
  3. 写适配器接入数据源接入新数据源需要编写适配器,告诉 Calcite 数据源中哪些集合应当被视为「表」,这是接入的基础步骤。
进阶省时间也省钱
  1. 用规则做下推借助优化器规则把 JOIN 和 GROUP BY 下推到源数据库执行,避免把大量数据拉到本地再处理。
  2. 注册自定义算子通过优化器规则注册新算子,例如更好的连接算法,Calcite 会把它与内置规则和算子结合使用。
  3. 按成本模型调优查询优化按成本模型进行,可结合自定义规划规则调整查询到算子的翻译方式,以匹配自身引擎特性。

Calcite适合谁用?

WHO IS IT FOR工具标签

查询引擎开发者

推荐

需要在自己的引擎里加入标准 SQL 解析、校验与优化能力,可复用其解析器、校验器和规划规则。

多数据源应用团队

推荐

要在应用与多个数据存储、处理引擎之间做中介,用同一套 SQL 与 API 访问不同后端。

自建数据库的团队

推荐

想构建数据库但只缺 SQL 与优化部分,Calcite 明确不存储数据,正好补上这一层,只需再加数据。

零配置上手的用户

不推荐

它不存储数据、不处理数据,也没有元数据仓库,需要自行补齐,不适合期望开箱即用的使用方式。

Calcite优点和缺点

PROS & CONS工具标签

优点

  • 提供工业标准的 SQL 解析器、校验器和 JDBC 驱动
  • 用关系代数加规划规则、成本模型做查询优化
  • 不绑定数据格式,内存与 JDBC 可执行同一查询
  • 支持把 JOIN、GROUP BY 下推到源数据库执行
  • 可用自定义优化器规则注册新算子
  • 刻意不存储、不处理数据,便于做多源中介

缺点

  • 不含数据存储、处理算法与元数据仓库
  • 接入新数据源需要自行编写适配器
  • 扩展依赖编写优化器规则,门槛偏高
  • 官网未公开具体价格与商业支持方案

Calcite常见问题

FAQ工具标签
Calcite 是数据库吗?

不是。它是动态数据管理框架,包含数据库管理系统的许多部件,但省略了数据存储、数据处理算法和元数据仓库这三项关键功能。它刻意不做存储与处理数据的业务,因此适合在应用与数据存储位置、处理引擎之间做中介,也可以作为构建数据库的基础,只需再加上数据。

它怎么连接不同的数据源?

接入新数据源需要编写适配器,告诉 Calcite 数据源中哪些集合应被视为「表」。在此基础上还可以编写优化器规则,让 Calcite 访问新格式数据、注册新算子,并优化查询到算子的翻译方式,自定义规则会与内置规则和算子结合使用。

内存数据和 JDBC 数据能跑同一个查询吗?

可以。示例中先用内存数据集,通过 linq4j 的 groupBy、join 等算子处理;把实现换成 JDBC 后,Calcite 会执行同样的查询。对应用而言数据和 API 相同,但底层实现不同,Calcite 会用优化器规则把 JOIN 和 GROUP BY 下推到源数据库。

它支持标准 SQL 吗?

支持。官网把它列为 Standard SQL,提供工业标准的 SQL 解析器、校验器和 JDBC 驱动,这是它的核心能力之一,也是应用用统一 SQL 访问不同数据源的基础。

Calcite 和 Avatica 是什么关系?

Avatica 是官网列出的子项目。站点在 Sub-Projects 下只列出 Avatica 一项,与 Calcite 的 JDBC 相关能力配套使用。

Calcite 是免费的吗?

它由 Apache 软件基金会维护,该基金会是非营利组织,仅依靠捐赠资助。官网未公开任何具体价格档位或商业授权方案,涉及采购与支持时需以官方页面为准。