Apache Calcite概念介绍

一、介绍

1、简介

● Apache Calcite是面向Hadoop新的查询引擎,它提供了标准的SQL语言、多种查询优化和连接各种数据源的能力。
● Calcite的目标是“ one size fits all (一种方案适应所有需求场景)”, 希望能为不同计算平台和数据源提供统一的查询引擎,并以类似传统数据库的访问方式(SQL 和高级查询优化)来访问Hadoop上的数据。
● Calcite之前的名称叫做optiq ,optiq起初在Hive项目中,为Hive提供基于成本模型的优化,即CBO(Cost Based Optimizatio)。2014年5月optiq独立出来,成为Apache社区的孵化项目,2014年9月正式更名为 Calcite。
● 目前, 使用Calcite作为SQL解析与处理引擎有Hive、Drill、Flink、Phoenix、Phoenix和Storm,可以肯定的是还会有越来越多的数据处理引擎采用Caclite作为SQL解析工具。
2、主要功能

● 标准SQL解析和校验:行业标准的 SQL 解析器、验证器和 JDBC 驱动程序。
● 查询优化:在关系代数中表示查询,使用计划规则进行转换,并根据成本模型进行优化。
● 任何数据,任务地方:连接到第三方数据源,浏览元数据,并通过将计算推送到数据进行优化。

二、Calcite概念

在介绍 Calcite 架构之前,先来看下与Calcite相关的基础性内容。
关系代数的基本知识
● 关系代数是关系型数据库操作的理论基础,关系代数支持 并、差、笛卡尔积、投影和选择等基本运算。
● 关系代数也是Calcite的核心, 任何一个查询都可以表示成由关系运算符组成的树。 在Calcite中,它会先将 SQL 转换成关系表达式(relational expression),然后通过规则匹配(rules match)进行相应的优化,优化会有一个成本(cost)模型为参考。
在这里插入图片描述

三、Calcite架构

● Calcite架构与传统数据库管理系统有一些相似之处,相比而言, 它将数据存储、数据处理算法和元数据存储这些部分忽略掉了。
● 好处是:对于涉及多种数据源和多种计算引擎的应用而言,Calcite 因为可以兼容多种存储和计算引擎,使得 Calcite 可以提供统一查询服务。
● Calcite 架构中,最核心地方就是 Optimizer,也就是优化器,一个 Optimization Engine 包含三个组成部分
○ Rules(规则):也就是 匹配规则,Calcite 内置上百种 Rules 来优化 relational expression,当然也支持自定义 rules;
○ Metadata Providers(元数据提供者):主要是向优化器提供信息,这些信息会有助于指导优化器向着目标(减少整体 cost)进行优化, 信息可以包括行数、table 哪一列是唯一列等,也包括计算 RelNode 树中执行 subexpression cost 的函数;
○ Planner Engines(计划引擎):它的主要目标是进行触发rules来达到指定目标,比如像 cost-based optimizer(CBO)的目标是减少cost (Cost 包括处理的数据行数、CPU cost、IO cost 等);
在这里插入图片描述

四、Calcite核心组件

Calcite主要有以下概念:

● Catelog: 主要定义SQL语义相关的元数据与命名空间。
● SQL Parser: 主要是把SQL转化成AST(抽象语法术)。
● SQL Validator: 通过Catalog来校证AST(抽象语法术)。
● Query Optimizer: 将AST转化成物理执行计划、优化物理执行计划。
● SQL Generator: 反向将物理执行计划转化成SQL语句。

4.1 Category

Catalog:主要定义被SQL访问的命名空间,主要包括以下几点:

  1. schema:主要定义schema与表的集合,schame并不是强制一定需要的,比如说有两张同名的表T1, T2,就需要schema要区分这两张表,如A.T1, B.T1。
  2. 表:对应关系数据库的表,代表一类数据,在calcite中由RelDataType定义。
  3. RelDataType:代表表的数据定义,如表的数据列名称、类型等。

五、Calcite处理SQL流程

在这里插入图片描述

如上图中所述,一般来说Calcite解析SQL有以下几步:
● Parser. 此步中Calcite通过Java CC将SQL解析成未经校验的AST(抽象语法术)。
● Validate. 该步骤主要作用是校证Parser步骤中的AST是否合法,如验证SQL scheme、字段、函数等是否存在; SQL语句是否合法等. 此步完成之后就生成了RelNode树。
● Optimize. 该步骤主要的作用优化RelNode树, 并将其转化成物理执行计划。主要涉及SQL规则优化如:基于规则优化(RBO)及基于代价(CBO)优化; Optimze 这一步原则上来说是可选的, 通过Validate后的RelNode树已经可以直接转化物理执行计划,但现代的SQL解析器基本上都包括有这一步,目的是优化SQL执行计划。此步得到的结果为物理执行计划。
● Execute,即执行阶段。此阶段主要做的是:将物理执行计划转化成可在特定的平台执行的程序。如Hive与Flink都在在此阶段将物理执行计划CodeGen生成相应的可执行代码。

六、SQL校验

七、查询优化

八、多数据源链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值