Apache Calcite:独立于存储与执行的SQL解析、优化引擎

Apache Calcite是一个独立于存储和执行的SQL解析和优化引擎,广泛应用在Drill、Hive、Kylin等系统中。本文探讨了Calcite的架构,特别是其在Hive中的应用,如何进行基于代价的优化(CBO)。Calcite的优化流程包括解析查询、生成Operator Expressions、应用优化规则和利用Metadata进行决策。Hive通过扩展Calcite的规则和元数据接口实现自定义优化。
摘要由CSDN通过智能技术生成

 

Calcite 原理解析

 

Apache Calcite 是独立于存储与执行的SQL解析、优化引擎,广泛应用于各种离线、搜索、实时查询引擎,如Drill、Hive、Kylin、Solr、flink、Samza等。本文结合hive中基于代价的优化,解析calcite优化引擎的实现原理。


Calcite架构
  Calcite架构图如下,其中Operator Expressions 是查询树在calcite中的表示,可以直接通过calcite的SQL Parser解析得到,也可以通过Expressions Builder由Data Processing System中的查询树(本文对应hive中的AST)转换得到。Query Optimizer 根据Pluggable Rules对Operator Expressions进行优化,其中会用到Metadata Providers提供的信息进行代价计算等操作

Metadata?


Hive CBO
  本文中Data Processing System就是hive,本文主要解析hive如何利用calcite进行基于代价的优化(cost based optimization /CBO)。Hive CBO的主要实现代码在CalcitePlanner 这个类中, CalcitePlanner 继承自SemanticAnalyzer,重写了genOPTree 方法,由AST 生成 Operator Tree 。其中CalcitePlanner.CalcitePlannerAction.genLogicalPlan 函数对应上图中的Expressions Builder,把hive中的AST转换成calcite 中的Operator Expressions,也就是节点为RelNode的查询树。这个过程这里不展开,继续往下看。在CalcitePlanner.CalcitePlannerAction.HepPlan会对输入的basePlan根据rules进行优化,返回优化过的plan,代码如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值