前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Calcite 背景介绍

Calcite 背景介绍

作者头像
从大数据到人工智能
发布于 2022-01-18 13:55:35
发布于 2022-01-18 13:55:35
1K00
代码可运行
举报
文章被收录于专栏:大数据-BigData大数据-BigData
运行总次数:0
代码可运行

Apache Calcite是一个动态数据管理框架。

它包含了组成典型数据库管理系统的许多部分,但省略了一些关键功能:数据存储、处理数据的算法和存储元数据的存储库。

Calcite有意不参与存储和处理数据的业务。正如我们将看到的,这使得它成为在应用程序与一个或多个数据存储位置和数据处理引擎之间进行中介的绝佳选择。它也是构建数据库的完美基础:只需添加数据。

为了说明这一点,让我们创建一个空的Calcite实例,然后将它指向一些数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static class HrSchema {
  public final Employee[] emps = 0;
  public final Department[] depts = 0;
}
Class.forName("org.apache.calcite.jdbc.Driver");
Properties info = new Properties();
info.setProperty("lex", "JAVA");
Connection connection = DriverManager.getConnection("jdbc:calcite:", info);
CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class);
SchemaPlus rootSchema = calciteConnection.getRootSchema();
Schema schema = new ReflectiveSchema(new HrSchema());
rootSchema.add("hr", schema);
Statement statement = calciteConnection.createStatement();
ResultSet resultSet = statement.executeQuery(
    "select d.deptno, min(e.empid)\n"
    + "from hr.emps as e\n"
    + "join hr.depts as d\n"
    + "  on e.deptno = d.deptno\n"
    + "group by d.deptno\n"
    + "having count(*) > 1");
print(resultSet);
resultSet.close();
statement.close();
connection.close();Copy

数据库在哪里?没有数据库。连接是完全空的,直到new ReflectiveSchema将Java对象注册为模式,并将其集合字段emps和depts注册为表。

Calcite不需要自己保存数据;它甚至没有最喜欢的数据格式。本示例使用内存中的数据集,并使用来自linq4j库的join和groupBy等操作符处理它们。但是Calcite也可以处理其他数据格式的数据,比如JDBC。在第一个例子中,替换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Schema schema = new ReflectiveSchema(new HrSchema());
Copy

为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Class.forName("com.mysql.jdbc.Driver");
BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl("jdbc:mysql://localhost");
dataSource.setUsername("username");
dataSource.setPassword("password");
Schema schema = JdbcSchema.create(rootSchema, "hr", dataSource,
    null, "name");Copy

Calcite将在JDBC中执行相同的查询。对于应用程序来说,数据和API是相同的,但在幕后实现是非常不同的。Calcite使用优化器规则将JOIN和GROUP BY操作推入源数据库。

内存和JDBC只是两个熟悉的例子。Calcite可以处理任何数据源和数据格式。要添加数据源,需要编写一个适配器,告诉方解石数据源中应该考虑哪些集合为“表”。

对于更高级的集成,您可以编写优化器规则。优化器规则允许Calcite访问新格式的数据,允许您注册新的操作符(比如更好的连接算法),并允许Calcite优化查询转换为操作符的方式。Calcite将结合您的规则和操作与内置规则和操作,应用基于成本的优化,并生成一个有效的计划。

写一个适配器

example/csv下的子项目提供了一个csv适配器,它可以在应用程序中完全使用,但如果您正在编写自己的适配器,它也足够简单,可以作为一个好的模板。

有关使用CSV适配器和编写其他适配器的信息,请参阅教程

有关使用其他适配器以及一般使用方解石的更多信息,请参阅HOWTO

目前状态

完成了以下功能。

  • 查询解析器、验证器和优化器
  • 支持JSON格式的读取模型
  • 许多标准函数和聚合函数
  • 对Linq4j和JDBC后端进行JDBC查询
  • Linq4j前端
  • SQL特性:SELECT, FROM(包括JOIN语法),WHERE, GROUP BY(包括GROUPING SETS),聚合函数(包括COUNT(DISTINCT…)和FILTER), HAVING, ORDER BY(包括NULLS FIRST/LAST),集合操作(UNION, INTERSECT, MINUS),子查询(包括相关子查询),窗口聚合,LIMIT(语法为Postgres);更多细节见SQL引用
  • 本地和远程JDBC驱动程序;看到Avatica
  • 几个适配器

本文为从大数据人工智能博主「xiaozhch5」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://cloud.tencent.com/developer/article/1936477

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Apache Calcite 文档翻译 - 背景概述
它包含了构成典型数据库管理系统的许多部分,但是省略了一些关键性的功能:数据存储、处理数据的算法和一个用于存储元数据的元数据库。
tyrantlucifer
2022/03/23
8590
Apache Calcite项目简介
Apache Calcite是一个动态数据管理框架,它具备很多典型数据库管理系统的功能,比如SQL解析、SQL校验、SQL查询优化、SQL生成以及数据连接查询等,但是又省略了一些关键的功能,比如Calcite并不存储相关的元数据和基本数据,不完全包含相关处理数据的算法等。
叁金
2019/03/15
2.2K0
Calcite基础入门(一)
这是一个循序渐进的教程,展示了如何构建和连接Calcite。它使用一个简单的适配器,使CSV文件的目录看起来是一个包含表的模式。Calcite完成了其余的工作,并提供了完整的SQL接口。
从大数据到人工智能
2022/01/18
2.3K0
Apache Calcite 文档翻译 - 基础教程
这是一个手把手并循序渐进的教程,展示了如何和Calcite建立连接。它使用了一个简单的适配器,使得一个包含了csv文件的目录看起来是一个包含数据库表的模式(schema)。Calcite负责其他工作,并提供了一个完整的SQL接口。
tyrantlucifer
2022/03/23
1K0
阿卡姆大数据科普报告——Calcite
Apache Calcite 是独立于存储与执行的SQL解析、优化引擎,广泛应用于各种离线、搜索、实时查询引擎,如Drill、Hive、Kylin、Solr、flink、Samza等。
麒思妙想
2020/07/10
1.7K0
Calcite系列(四):核心概念-Adapter
Calcite作为SQL中间件,为提供扩展性并适配不同数据源,设计了Adapter适配器方式对接异构数据源,允许Calcite连接到不同类型的数据源。Adapter会根据数据源特性进行查询优化,并负责将Calcite的逻辑查询转换为可以在特定数据源上执行。
Yiwenwu
2024/04/17
5900
Apache Calcite 论文学习笔记
特别声明:本文来源于掘金,“预留”发表的[Apache Calcite 论文学习笔记](https://juejin.im/post/5d2ed6a96fb9a07eea32a6ff)
叁金
2019/07/22
1.5K0
calcite简单入门
Apache Calcite是一款开源的动态数据管理框架,它提供了标准的 SQL 语言、多种查询优化和连接各种数据源的能力,但不包括数据存储、处理数据的算法和存储元数据的存储库。
zhangheng
2020/04/29
8.2K0
基于Calcite自定义JDBC Driver
最近在公司享受福报,所以更新进度严重脱节了,本期依旧是一篇Calcite相关的文章,上一篇《基于Calcite自定义SQL解析器》有兴趣的童鞋可以移步去看看。本文我们将介绍一下如何自定义JDBC Driver。
麒思妙想
2020/07/10
2.1K0
10分钟教你写一个数据库
今天教大家借助一款框架快速实现一个数据库,这个框架就是Calcite,下面会带大家通过两个例子快速教会大家怎么实现,一个是可以通过 SQL 语句的方式可以直接查询文件内容,第二个是模拟 Mysql 查询功能,以及最后告诉大家怎么实现 SQL 查询 Kafka 数据。
艾小仙
2022/12/05
1.1K0
10分钟教你写一个数据库
Calcite技术研究
Apache Calcite是一个基础的软件框架,它提供了查询处理、查询优化以及查询语言支持的能力。很多流行的开源数据处理系统例如Apache Hive,Apache Storm,ApacheFlink,Druid等都采用了它。
Fayson
2020/02/24
2.4K0
Calcite技术研究
基于Calcite的分布式多数据源查询
在本文中,我们将实践 GBase8s 和 MySQL 的跨数据源联合查询,案例中 MySQL 数据源中存放商品信息,GBase8s 数据源中存放订单信息。整体架构如下
麒思妙想
2022/02/25
2.4K0
基于Calcite的分布式多数据源查询
如何使用calcite rule做SQL重写(上)
各位读者朋友,我想死你们了,今天我带着 calcite这个专题的第三篇文章来了,今天我们来说说sql重写,这可能也是大家都有需求的方面,我计划这个专题分为三篇来写:
麒思妙想
2023/08/28
1.8K0
如何使用calcite rule做SQL重写(上)
如何使用calcite构建SQL并执行查询
大家好,这是 Calcite 的第二篇文章了,我一直毫不掩饰对她的喜爱,而且一直在致力于为社区做一些贡献,如果你也喜欢这个项目的话,欢迎评论,转发,如果没看过第一篇的话,也欢迎移步去看看(手把手教你使用Calcite查看SQL执行计划)。如果你还不了解这个项目的话,我也希望能通过我,让你知道这个优秀的项目。
麒思妙想
2023/08/28
1.3K0
如何使用calcite构建SQL并执行查询
【Flink SQL】Apache Calcite 架构剖析
Apache Calcite 是一个动态的数据管理框架, 可以实现 SQL 的解析、验证、优化和执行。Calcite 是模块化和插件式的, 解析、验证、优化和执行的步骤都对应着一个相对独立的模块。用户可以选择使用其中的一个或多个模块,也可以对任意模型进行定制化扩展。
王知无-import_bigdata
2023/04/07
1.1K0
【Flink SQL】Apache Calcite 架构剖析
Calcite系列(七):执行流程-合法性校验
合法性校验是SQL处理的第二步,在计算执行前,提前验证SQL正确性。该验证操作是非线性的,需要基于语法树处理各种嵌套的复杂情况。Calcite合法性校验基于SqlValidator 接口和对应实现类SqlValidatorImpl 完成。
Yiwenwu
2024/04/20
6620
手把手教你使用Calcite查看SQL执行计划
大家好,我又腆着大脸来更新了,也是知道自己鸽了很久很久,也就不找说辞了,尽管确实是有点遭不住996了。还是恭祝大家端午安康吧,那么问题来了,粽子你是吃甜的?还是吃肉的呢?我先表个态,我吃肉的!
麒思妙想
2023/08/28
1K0
手把手教你使用Calcite查看SQL执行计划
Spring JDBC
在掌握了Spring容器的基础知识之后,我们要把它们应用到实际的程序之中。一个很好的起点是针对几乎所有企业程序都存在的需求:数据访问。几乎所有程序员都曾经处理过数据库访问,也都知道使用传统的JDBC进行数据访问具有一些缺陷。接下来我们将要学习Spring是如何改善数据访问过程中存在的缺陷的。
张哥编程
2024/12/17
1470
Spring JDBC
Apache Calcite 框架 50 倍性能优化实践
某天临时被当成壮丁拉去参加一个非常牛逼的应用监控平台(后续会开源),然后大佬就给我派了一个任务,要将项目中的查询性能优化 50 倍以上,大佬对我如此地寄予厚望,我怎么能让大佬失望呢(虽然我内心瑟瑟发抖)?于是我就开始了这段性能优化之旅。
张乘辉
2021/01/28
5.6K1
JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法
我们知道,在设计一个Java bean的时候,要把这些BEAN 的数据存放在数据库中的表结构,然而这些数据库中的表直接又有些特殊的关系,例如员工与部门直接有一对多的关系,学生与老师直接又多对多的关系,那么这些表的关系如何表示呢? 首先在建立数据库的时候就应该建立这样的对应关系。 一对多 ,只要建立两个表就能建立这样的关系,因为你可以把多方的那个表设置一个Foreign Key 属性 ,下面是一个部门和员工的表结构关系 在MySQL 数据库上应该这样建立表结构: create table department
庞小明
2018/03/09
3.8K0
相关推荐
Apache Calcite 文档翻译 - 背景概述
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验