calcite适配器

2019-12-28  本文已影响0人  无醉_1866

calcite是一个动态数据管理框架,它提供了SQL解析与校验,SQL优化,jdbc接口等能力,并且能够支持对不同数据源的适配以及对SQL语法的扩展等,目前被广泛用于Spark, Flink等大数据引擎中。

caltite文档

https://calcite.apache.org/docs/

基础对象和接口

Calcite是一个动态数据管理框架,它提供了sql解析以及jdbc接口,我们可以使用calcite做sql解析或者利用calcite适配器实现通过sql访问任意类型的存储

calcite中的关键接口介绍:

实现适配器

实现适配器需要做两件事:

自定义adapter通过SQL调用http接口

代码地址:https://github.com/gaohanghbut/yugo

首先实现Table:

image image image

ObjectTable是一个从AbstractQueryableTable继承的抽象类,其中封装了对字段类型的处理,代码如下:

image

HttpTable是一个FilterableTable,其scan方法提供了对查询的实现,其逻辑非常简单,拿到可以用于下沉到数据源的过滤参数,并通过过滤参数调用invoker获取scan的结果,calcite会基于此结果对数据再次做过滤,执行不能下沉到数据源的过滤条件得到最终的结果。invoker对象是一个Function,用于提供select语义的支持,通过构造器传入。

接下来定义Schema,可以从AbstractSchema继承:

image

接下来实现一个工厂,用于创建HttpApiSchema:

image

tableDefParser的作用是解析operand这个map中的kv,并生成HttpTable对象,而operand则是从json配置中来,json配置中定义schema的基础信息和每个table的基础信息,其中的operand字段的值则是自定义的内容,可自行解析(与上面的tableDefParser的逻辑一致):

image

最后实现查询逻辑,即invoker那个Function的实现,期核心代码如下:

image

致此,通过sql的select调用http接口的实现完成,通过jdbc接口使用方式如下:

image

LogicTableExecutor实现如下:

image
上一篇 下一篇

猜你喜欢

热点阅读