Apache Calcite初识
- Calcite原理和代码讲解(一) https://blog.csdn.net/qq_35494772/article/details/118887267
- quickstart:Apache Calcite精简入门与学习指导 https://blog.51cto.com/xpleaf/2639844
- quickstart:多源数据的关联 csv和mem数据类型 https://cloud.tencent.com/developer/article/1622438
- Apache Calcite: A Foundational Framework for Optimized Query Processing Over Heterogeneous Data Sources https://dl.acm.org/doi/abs/10.1145/3183713.3190662 | 翻译 https://xie.infoq.cn/article/f6f2fee3aa86cd3882cf5240a
- Apache Calcite 学习 (一) https://www.cnblogs.com/wcgstudy/p/11795886.html
Calcite的主要功能我们上面其实已经提到了,主要有以下功能:
- SQL解析:通过JavaCC将SQL解析成未经校验的AST语法树
- SQL校验:校验分两部分,一种为无状态的校验,即验证SQL语句是否符合规范;一种为有状态的即通过与元数据结合验证SQL中的Schema、Field、Function是否存在。
- SQL查询优化:对上个步骤的输出(RelNode)进行优化,得到优化后的物理执行计划
- SQL生成:将物理执行计划生成为在特定平台/引擎的可执行程序,如生成符合Mysql or Oracle等不同平台规则的SQL查询语句等
- 数据连接与执行:通过各个执行平台执行查询,得到输出结果。
// 初始化配置
SqlParser.ConfigBuilder configBuilder = SqlParser.configBuilder();
configBuilder.setUnquotedCasing(Casing.UNCHANGED);
//Sql解析:解析Sql语句,通过JavaCC解析成AST语法树,表现为SqlNode
SqlParser sqlParser = SqlParser.create(sql, configBuilder.build());
SqlNode sqlNode = sqlParser.parseQuery();
//Sql校验:结合元数据信息验证Sql是否符合规范
Planner planner = Frameworks.getPlanner(config);
SqlNode node = planner.validate(sqlNode);
//Sql查询优化:将SqlNode转换为LogicalPlan,表现为RelNode
RelRoot relRoot = planner.rel(node);
RelNode project = relRoot.project();
//指定优化规则
final HepProgram program = new HepProgramBuilder() .addRuleInstance(SubQueryRemoveRule.PROJECT).addRuleInstance(SubQueryRemoveRule.FILTER).addRuleInstance(SubQueryRemoveRule.JOIN).build();
//生成优化后的RelNode
HepPlanner prePlanner = new HepPlanner(program);
prePlanner.setRoot(project);
RelNode relNode = prePlanner.findBestExp();
//ToDo 执行查询
//创建Calcite Connection对象
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();
//创建Mysql的数据源schema
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");
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();
Calcite提供了多种方式添加数据源,如通过“inline:”的字符串方式以及通过json或yaml文件的方式。同时,Calcite抽象出了功能齐全的接口,可以方便的将CSV文件抽象成数据表进行查询。这部分内容可以通过官方的示例了解一下!
Apache Calcite初识相关推荐
- SQL解析引擎Apache Calcite
1. 什么是Apache Calcite ? Apache Calcite 是一款开源SQL解析工具, 可以将各种SQL语句解析成抽象语法术AST(Abstract Syntax Tree), 之后通 ...
- Apache Calcite官方文档中文版-概览-1.背景
第一部分 概览 1. 背景 Apache Calcite是一个动态数据管理框架.它包含了许多组成典型数据管理系统的经典模块,但省略了一些关键性的功能: 数据存储,数据处理算法和元数据存储库. ...
- 【Calcite】Apache Calcite 框架初探及概念详解
1. 简介 Calcite 是什么?如果用一句话形容 Calcite,Calcite 是一个用于优化异构数据源的查询处理的基础框架. 最近十几年来,出现了很多专门的数据处理引擎.例如列式存储 (HBa ...
- Apache Calcite入门
文章目录 01 简介 02 功能 03 相关组件 3.1 Catalog 3.2 SQL Parser 04 用法 05 文末 01 简介 Apache Calcite 是一款开源SQL解析工具, 可 ...
- Apache Calcite论文概要
ABSTRACT calcite的特点: 模块化优化规则和可扩展查询优化器 支持各种查询语言的查询处理器 可扩展适配器架构 异构数据模型和存储 1.INTRODUCTION 面临问题: 多种异构数据源 ...
- Apache Calcite初探和csv简单例子
ApacheCalcite官网介绍 Apache Calcite is a dynamic data management framework. It contains many of the pie ...
- Apache Calcite 简介
1. 什么是Apache Calcite ? Apache Calcite 是一款开源SQL解析工具, 可以将各种SQL语句解析成抽象语法术AST(Abstract Syntax Tree), 之后通 ...
- Apache Calcite教程-SQL解析-Calcite SQL解析
Calcite SQL解析 一.代码结构 其中,在codegen文件夹下, config.fmpp (主要制定实现类路径)表示calcite 模板配置,Parser.jj是JavaCC解析器所需解析 ...
- Apache Calcite 论文翻译
Apache Calcite 论文原稿: https://arxiv.org/pdf/1802.10233.pdf 文章目录 Apache Calcite 论文 1.简介 1.1. 引言 2.相关工作 ...
最新文章
- SQL高级查询(层次化查询,递归)
- SD-WAN开源优势是什么?
- 图片瀑布流Html,真的!!!两行css代码实现瀑布流,html,css最简单的瀑布流实现方式且没有缺点...
- 易创课堂成都站给你寄来一包干货,请注意查收
- apache httpclient 工具类_HttpClient
- python自动华 (四)
- maven jetty 插件 允许修改 js
- java实现定时任务 schedule_详解java定时任务
- (DevExpress2011控件教程)ASPxGridView 范例3 :ASPxGridView 排序和分组、过滤行、统计功能等功能实现...
- docker 命令_Docker的入门:安装Docker及记住常用的镜像命令和容器命令
- java安卓开发软件及环境配置
- NX二次开发-BlockUI对话框嵌套MFC对话框制作进度条
- 电商系统商品库的基本功能设计与实现
- Dynamics AX 2012 的工业物联网解决方案
- 测绘大王的GPS盛宴
- 7-5 换硬币 (20 分)
- 基于ttcrpy的跨孔CT高斯牛顿算法及python代码分享(2)
- iOS Charts
- 拯救脆弱的智慧城市:不但要“智商” 还得有“生气”
- win环境20分钟搭建php+sql服务器Apache+php+mysql在windows下的安装与