概述

当前的大数据框架中经常避不开的一件事情就是写写SQL,这些SQL有可能是针对hive、sparkSQL、Flink、Druid等,在学习这些框架的时候不由自主 的会想到一个问题,SQL是怎么样转换成物理执行计划的呢?查了一下相关的资料可以发现这些服务都是使用一款叫做calcite的框架,工作之余也抽了 点时间学习这个框架,更详细的学习可以参考官网,本文只是浅尝辄止,希望后面有工作可以使用 到这些技能,这样就可以深入的学习一下了。

详解

calcite省略了数据的存储、元数据的存储以及数据的处理的过程,其主要的工作是完成SQL的解析、校验,查询的优化,执行查询。下图展示 calcite的整体架构:

我们从客户端发起的请求看起,客户端发起的请求首先会到达server端,查询解析验证器首先会该查询转换为关系运算符树,由于calcite不含存储层,因此 其提供了一种机制来通过适配器定义定义外部的table、schema、view,这样极大的提高了灵活性和扩展性。calcite优化查询的过程依赖于规则、元数据, 使用到了关系运算符树作为内部表现形式

小结