Calcite系列(二):核心概念-关系代数

2024-05-04 11:50:04 浏览数 (1)

理论基础

关系模型是一种用于数据库管理的理论框架,其基础建立在数学的集合论之上。该模型由Edgar F. Codd 于1970年提出,旨在以一种严格且理论化的方式来描述数据之间的关系,使得数据操作能够通过一系列关系代数来表达。关系模型主要由以下三部分组成:

  1. 关系运算集合:即关系代数,描述关系操作的集合,这些操作应用于关系(表),其运算对象和结果均为关系(表)
  2. 关系数据结构:即表结构,是结构化的Schema定义
  3. 关系完整性约束:描述表之间的约束关系,如唯一键、外键等

关系代数是关系型数据库操作的基础,其运算对象和结果都是关系(表)。Codd 提出的原始关系运算包括:选择(Select)、投影(Project)、笛卡尔积(Cartesian Product)、并集(Union)、差集(Difference)以及重命名(Rename)。随着关系模型的不断发展,更多的关系代数运算被提出,常用的关系代数运算如下表所示:

跳转

Calcite实现

Calcite基于RelNode表示关系代数节点,即关系算子,其中,通过AbstractRelNode定义基本的关系代数,主要包括:

  1. SingleRel(一元运算):Filter(过滤)、Project(投影)、Aggregate(聚合)、Sort(排序)、Limit、Window(窗口函数)、Uncollect、Collect 等
  2. BiRel(二元运算):Join、Correlate(嵌套循环连接)
  3. SetOp(集合运算):Union(并集)、Minus(差集)、Intersect(交集)
  4. TableScan(关系):表节点,作为计划树叶子节点

在Calcite中,一种关系代数类别可由一个逻辑算子(Logical)和多个物理算子(Adapter/Physical)组成,它们都可以使用RelNode表示,通过RelTrait来区分算子的物理属性。

Calcite 中不单独区分逻辑算子(Logical operator) 和物理算子(Physical operator)RelNode 基于RelTrait 区分算子的物理属性(Physical properties),RelTraitDef 可定义RelTrait的类别,分别对应:排序、分区、Convention规约。

在Calcite中,为完整描述关系代数体系中,其他相关联的重要对象还包括:

  1. RexNode:行表达式,表示可单行计算并返回结果的表达式,例如:id=100。其实现的子类包括:RexCall(运算符调用)、RexLiteral(常量表达式)、RexVariable(变量表达式)、RexRangeRef(范围表达式)以及RexInputRef(引用表达式)等
  2. RelDataType:数据类型,包括:BasicSqlType(基本类型)、ArraySqlType(数组类型)、MapSqlType(Map类型)等
  3. RelTrait:物理属性,包括:RelCollation(排序)、RelDistribution(分区)、Convention(规约)

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

0 人点赞