calsite原理_Calcite研究 - welcome to 奥木染 - OSCHINA - 中文开源技术交流社区-程序员宅基地

技术标签: calsite原理  

1. 背景

calcite作为一款开源的动态数据管理框架(https://calcite.apache.org/),它具备很多典型数据库管理系统的功能,比如SQL解析、SQL校验、SQL查询优化、SQL生成以及数据连接查询等,但是又省略了一些关键的功能,比如Calcite并不存储相关的元数据和基本数据,不完全包含相关处理数据的算法等。

也正是因为Calcite本身与数据存储和处理的逻辑无关,所以这让它成为与多个数据存储位置(数据源)和多种数据处理引擎之间进行调解的绝佳选择。

Calcite所做的工作就是将各种SQL语句解析成抽象语法树(AST Abstract Syntax Tree),并根据一定的规则或成本对AST的算法与关系进行优化,最后推给各个数据处理引擎进行执行。

Calcite整体架构如下图所示:

Hive,Flink,Storm都使用Calcite作为其SQL解析优化引擎。

2. Calcite适配器

A schema adapter allows Calcite to read particular kind of data, presenting the data as tables within a schema.

Calcite默认支持的Schema adapters如下:

换句话说,calcite为了能够适配各类数据源,需要添加适配器来对接,适配程度和适配器完善程度相关,例如JDBC adapter当前就存在一定限制,只能下推scan到底层JDBC源,其他操作无法下推:

3. Calcite自定义适配器Adapters

1、定义schema,需先构建对应适配器schema类(例如DB数据库里,schema对应DataBase,这里就需要返回对应DataBase对象),然后实现SchemaFactory、Table、TableScan等接口

2、实现Table,表示某种类型的表,需实现TableFactory接口

3、实现SQL到DQL/DML/DDL的转换,需实现QueryableTable、FilterableTable(或者ProjectableFilterableTable)、ModifiableTable等接口。如果需要处理流式数据,需实现StreamableTable接口

4、如果需要自定义字段类型,需实现RelDataTypeSystem接口

简单来说,实现只有全表扫描功能的adapter步骤:

自定义Schema

自定义Schema Factory

自定义Table

自定义Enumerator

4. SQL Dialect方言转换

Calcite支持接收和自定义SQL方言:

目前有许多实现SqlDialect方言类接口的类,如果要自定义方言类,继承这个SqlDialect接口,并在SqlDialectFactoryImpl、SqlDialect中添加对应case即可

注意继承SqlDialect接口的时候,实现unparseCall方法最为重要,Default也需要根据对应方言类型的要求进行构造

5. 方言转换Demo

从这个demo可以看到sql经过不同方言类转换得到的sql均不相同,debug sqlNode.toSqlString方法即可看到sql组装的过程

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_31110741/article/details/111924204

智能推荐

Python list列表(详解)-程序员宅基地

文章浏览阅读7.5k次,点赞5次,收藏12次。在实际开发中,经常需要将一组(不只一个)数据存储起来,以便后边的代码使用。说到这里,一些读者可能听说过数组(Array),它就可以把多个数据挨个存储到一起,通过数组下标可以访问数组中的每个元素。需要明确的是,Python 中没有数组,但是加入了更加强大的列表。如果把数组看做是一个集装箱,那么 Python 的列表就是一个工厂的仓库。从形式上看,列表会将所有元素都放在一对中括号[ ]里面,相邻元素之间用逗号,分隔,如下所示:格式中,element1 ~ elementn 表示列表中的元素,个数没有限制,只要是_python list

Python实现二维码登录-程序员宅基地

文章浏览阅读489次。这里我们选择使用qrcode库,它是一个简单易用的库,可以方便地生成二维码。通过以上代码,我们实现了使用Python生成二维码和解析二维码的功能,从而实现了二维码登录的功能。以上代码中,我们首先使用qrcode库的imread函数读取二维码图片,然后调用decode函数解析二维码内容。接下来,我们生成一个随机的登录令牌。用户扫描二维码后,我们可以获取到登录令牌,然后可以根据具体需求进行后续的登录验证和操作。运行上述代码后,将会生成一个名为qrcode.png的二维码图片,并打印出生成的登录令牌和解析结果。

搭建智慧农业物联网云平台——基于阿里云物联网平台构建_写一个农业云平台系统出来有多难-程序员宅基地

文章浏览阅读1.9w次,点赞32次,收藏469次。目录前言8.1.1 物联网平台搭建8.2.1 LinkDevelop平台使用8.2.2 iotkit-embedded前言传统的物联网项目,需要嵌入式硬件、云平台。对于我们做嵌入式的来说,从零开始搭建一个物联网云平台几乎是不现实的。这里涉及到许多前后端的知识。通过阿里云物联网平台,我们可以在不懂前后端开发的基础上,半个小时候左右就可以搭建一个智慧农业的物联网云平台框架。效果如下:大数据面板:设备管理:设备地图分布:支持视频监控..._写一个农业云平台系统出来有多难

CFD后处理出图软件Tecplot的操作技巧(未完待续)_tecplot插值方法-程序员宅基地

文章浏览阅读2.3w次,点赞23次,收藏135次。1、实现Tecplot脚本的循环处理非定常流场文件时需要对大量数据快速处理,可以首先录制一段宏,然后对宏进行修改,在宏中加入循环结构,实现Tecplot的批处理功能。方法为:在第三行后面插入:$!Varset |NumLoop|=100$!Loop |NumLoop|$!Varset |num|=(|Loop|*5+2)其中100为循环次数,5为每次循环叠加的值。Loop从1..._tecplot插值方法

python3.7通过itchat方式登录微信给好友发送天气信息_ichatpython微信-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏4次。环境:win7,python3.7安装好 ichat,requests,yaml,Schedule(定时功能使用)准备一份全国地区的code;参照图一:citys.yml需先了解全国天气相关接口API:思路:想通过输入一个城市名就可以打印出相关天气信息;由于yml配置文件只有城市名:城市代码code通过城市名去获取code,在把code 引用到URL路径上进行对每个城市的天气信息进行爬..._ichatpython微信

路由器端口介绍-程序员宅基地

文章浏览阅读1.5w次,点赞14次,收藏61次。路由器所在的网络位置比较复杂,既可是内部子网边缘,也可位于内、外部网络边缘。同时为了实现强大的适用性,它需要连接各种网络,这样,它的接口也就必须多种多样。对于这些,不要说一般的网络爱好者,就连许多网管人员都无法说清楚。这里向大家全面介绍路由器的各种接口及连接方法。一、路由器接口 路由器具有非常强大的网络连接和路由功能,它可以与各种各样的不同网络进行物理连接,这就决定了路由器的接口技术非常复杂,越是高档的路由器其接口种类也就越多,因为它所能连接的网络类型越多。路由器的端口主要分局域网端口、广域网端口..._路由器端口

随便推点

matlab超限像素平滑法_2D-DIC | 二维数字图像相关法原理介绍 — 以开源算法Ncorr为例...-程序员宅基地

文章浏览阅读2.5k次,点赞2次,收藏9次。原文链接 2D-DIC | 二维数字图像相关法原理介绍 — 以开源算法Ncorr为例​mp.weixin.qq.com欢迎各位朋友关注数字图像相关法DIC小站,本小站公众号旨在推广数字图像相关法的研究和应用。【引言】 数字图像相关法(DIC)是一种利用在物体表面喷涂随机散斑,通过在物体变形前后的散斑图像中精确匹配对应点,测量变形位移等数据的非接触式光学测量方法。相比其它传统的接..._a 117 line 2d digital image correlation code written in matlab

3-位图的使用场景_redis 存储字节流-程序员宅基地

文章浏览阅读625次。1、二进制安全redis只存储字节流,与外界交互,存取都是字节流,只要双方客户端有统一的编解码,数据就不会被破坏。redis拿的是字节流,编码是一个字符一个字节redis-cli --raw 连接redis服务,并触发编码器的格式化。如果不格式化,redis只会识别ASCII码的,超出ASCII码,则显示为16进制2、位图的使用场景2.1、场景一:统计一段时间内用户的登录天数如果用数据库实现创建表,用户每笔登录都产生一行记录,然后登录登录时间,还有其他数据也需要记录。MySQL数据_redis 存储字节流

postman发送xml请求_postman xml请求-程序员宅基地

文章浏览阅读9.9k次。<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <MyS.._postman xml请求

字体图标 fa fa html5,Font Awesome 4.2.0的所有图标参考-程序员宅基地

文章浏览阅读4k次。 fa-adjust [] fa-adn [] fa-align-center [] fa-align-justify [] fa-align-left [] fa-align-right [] fa-ambulance [] fa-anchor [] fa-android [] fa-angellist [] fa-angle-double-down [..._fa fa图标

组装一台计算机需要哪些硬件(写出配置),电脑组装知识网组装电脑配置单中都有哪些配置组装电脑需要的电脑硬件...-程序员宅基地

文章浏览阅读9.7k次。本文转自:http://www.dn010.com/zhuangji/651.html比起直接购买装好的品牌电脑,很多人更喜欢自己买配置来组装一台电脑。组装电脑可以完全按照自己的喜好,组装出最适合自己的电脑。而且组装电脑的价格也相对来说比较划算,是一种很实用的方法。那么组装电脑需要购买一些什么样子的东西呢?今天,就来带大家总结一下组装电脑需要的配置单吧。1、电脑硬件:组装电脑最先要购买的就是电脑的..._电脑硬件怎么搭配

mh采样算法推导_深度学习:Gibbs 采样-程序员宅基地

文章浏览阅读1.9k次。1. 什么是Gibbs采样Gibbs采样是MH算法的一种特例(α==1),因此可以保证Gibbs抽取的样本,也构成一个非周期不可约稳定收敛的马氏链;Gibbs采样适用于样本是两维或以上的情况;通过积分去除掉相关但是不感兴趣的变量,称为“collapsed”的Gibbs采样;并且个人的一个感觉是,观测量所直接依赖的那些变量是不能被积分掉的,否则无法有效的进行抽样…gibbs采样需要知道样本中一个属性..._mh抽样