HepPlanner源码分析——Calcite

本文详细介绍了开源查询引擎Calcite中的HepPlanner,它是一种基于贪婪算法的优化器。内容包括HepPlanner的介绍、实现原理(HepRelVertex、Graph & Vertex、HepProgram及Rule apply)、优缺点以及用途。HepPlanner的主要特点是每次rule命中即认为结果更优,但可能会导致非最优计划和循环问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Query Optimization for Distributed Database Systems

Calcite是开源的一套查询引擎,很多开源项目都使用了该开源项目,特别是对其Optimizer部分的使用,类似Drill、Hive、Flink都使用Calcite作为其优化引擎。
Calcite实现了两套Planner,HepPlanner和VolcanoPlanner,HepPlanner主要是一种贪婪式的Planner,而Volcano则是一种启发式的Planner,下面介绍下HepPlanner的源码实现。

1 HepPlanner介绍

HepPlanner是一套greedy方式的Planner,可以认为是所优即所得,即任何rule只要命中运行,就认为其产生的结果是更优。
例:Calcite实现的ProjectFilterTransposeRule,功能主要是将Project与Filter进行交换。

subTree1:
Project($0, $1)
    Filter($0 > 1)
-->rule apply to
subTree2:
Filter($0 > 1)
    Project($0, $1)

则HepPlanner会将subTree2作为更优的plan。

2 实现原理

实现原理主要分为几部分来介绍:
1)HepRelVertex
2)Graph & Vertex
3)HepProgram
4)Rule apply

2.1 HepRelVertex

HepRelVertex是对关系代数表达式RelNode进行了简单封装。HepPlanner的所有节点都是HepRelVertex,每个HepRelVertex都指向了一个真正的relNode节点。

Project($0, $1)
    TableScan($0,
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值