失效链接处理 |
Apache Calcitesql解析框架 PDF 下载
本站整理下载:
相关截图:
主要内容:
1.什么是Apache Calcite?
Apache Calcite是一个动态数据管理框架, 它具备很多典型数据库管理系统的功能, 比如SQL解析、SQL校验、SQL查询优化、SQL生成以及数据连接查询等,但是又省略了一些关键的功能,比如Calcite并不存储相关的元数据和基本数据,不完全包含相关处理数据的算法等。
也正是因为Calcite本身与数据存储和数据处理的逻辑无关,让它成为了在多个数据存储和多种数据处理引擎之间的进行调解的绝佳“中介”。
Calcite本质上是一款开源的SQL解析工具,可以将各种SQL语句解析抽象语法树AST(Abstract Syntax Tree),并根据一定的规则或成本对AST进行操作,把SQL中所要表达的算法与关系体现在具体代码之中,最后推给各个数据处理引擎进行执行。
目前,使用Calcite作为SQL解析与优化引擎的有:Hive、Drill、Flink、Phoenix和Storm,Calcite凭借其优秀的解析优化能力,会有越来越多的数据处理引擎采用Calcite作为SQL解析工具。
2.Calcite主要功能
SQL解析:通过JavaCC将SQL语句解析成未经校验的AST抽象语法树。
SQL校验:校验分两部分,一种为无状态的校验,即验证SQL语句是否符合规范;另一种为有状态的校验,即通过与元数据结合验证SQL语句中的Schema、Field、Function等是否存在。
SQL查询优化:对校验后的RelNode(关系表达式)进行优化,得到优化后的物理执行计划。
SQL生成:将物理执行计划生成为在特定平台/引擎的可执行程序,如生成符合Mysql or Oracle等不同平台规则的SQL查询语句等。
数据连接与执行:通过各个执行平台执行查询,得到输出结果。
3.Calcite解析SQL语句的详细步骤
如上图中所述,一般来说Calcite解析SQL语句有以下几步:
Parser:该步骤中Calcite通过Java CC将SQL解析成未经校验的AST。
Validate:该步骤主要作用是校验Parser步骤中的AST是否合法,如验证SQL scheme、字段、函数等是否存在;SQL语句是否合法等,此步完成之后就生成了RelNode树。
Optimize:该步骤主要作用是优化RelNode树,并将其转化成物理执行计划。主要涉及SQL规则优化:基于规则优化(RBO)、基于代价优化(CBO)。
其实,这一步在原则上来说是可选的,通过Validate(校验)后的RelNode树已经可以 直接转化物理执行计划,但现在的SQL解析器基本上都包含这一步,其目的是优化SQL 执行计划。
Execute:该步骤主要做的是:将物理执行计划转化成可在特定的平台执行的程序。如:Hive与Flink都在此阶段将物理执行计划CodeGen生成相应的可执行代码。
|