Calcite介绍

Cacite官方介绍
https://www.slideshare.net/julianhyde/streaming-sql-63554778

1. 解析SQL并生成逻辑计划

以简单的SQL查询举例:

create table ds1 (c1 BIGINT ,c2 VARCHAR )
insert into ds1(c1,c2) values(1,'a1')
insert into ds1(c1,c2) values(2,'a2')
select c1,c2 from ds1 where c1>1

生成LogicPlan:
LogicalProject(C1=[$0], C2=[$1])
  LogicalFilter(condition=[>($0, 1)])
    EnumerableTableScan(table=[[DEFAULT_SCH, DS1]])

关键代码调用流程:
Connection.parseQuery=>SqlNode
SqlToRelConverter.convertQuery(SqlNode)=>RelRoot(RelNode)

2.优化逻辑计划产生对应的物理计划

关键代码调用流程:
Prepare.optimize(RelRoot)=>RelRoot
Calcite的本地实现预定义了一组优化Programs,参考Programs.standard() ,program.run()
program里的优化计划包括两种,HepPlanner和VolcanoPlanner,前者基于规则匹配优化,
后者基于代价优化(cost based optimization /CBO)

EnumerableCalc(expr#0..1=[{inputs}], expr#2=[1], expr#3=[>($t0, $t2)], proj#0..1=[{exprs}], $condition=[$t3]): rowcount = 25.0, cumulative cost = {125.0 rows, 801.0 cpu, 0.0 io}, id = 61
  EnumerableTableScan(table=[[DEFAULT_SCH, DS1]]): rowcount = 100.0, cumulative cost = {100.0 rows, 101.0 cpu, 0.0 io}, id = 36

技巧:可以使用RelOptUtil.toString(rel)来查看RelNode树的详情

RelOptUtil.toString(rel, SqlExplainLevel.NO_ATTRIBUTES)

3.物理计划生成执行代码

关键代码调用流程:
EnumerableInterpretable.toBindable(rel)
执行代码实现使用了作者的另一个项目linq4j

参考

https://www.jianshu.com/p/a6134865adf6
http://www.liaojiayi.com/2018/07/20/calcite/
https://blog.csdn.net/huxuanlai/article/details/59511315
https://www.jianshu.com/p/2dfbd71b7f0f
http://hbasefly.com/2017/03/01/sparksql-catalyst/
https://blog.csdn.net/wangxingxing2006/article/details/78907278

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 8,175评论 1 3
  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 13,328评论 0 44
  • # Awesome Python [![Awesome](https://cdn.rawgit.com/sindr...
    emily_007阅读 6,641评论 0 3
  • 企业对于管理干部培训是十分重视的,是企业内部培训的主体。而高管培训就更是重要,因为企业高管担任重要职务,对企业的发...
    Eggyino阅读 2,682评论 0 0
  • 就近一段时间碰巧要处理的事情都集中到一起了,有幸出入几个服务场所,深切感受了不同行业的服务以及变化。 要专业。因为...
    葳葳一笑浥清清阅读 1,400评论 1 2

友情链接更多精彩内容