• 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初识相关推荐

  1. SQL解析引擎Apache Calcite

    1. 什么是Apache Calcite ? Apache Calcite 是一款开源SQL解析工具, 可以将各种SQL语句解析成抽象语法术AST(Abstract Syntax Tree), 之后通 ...

  2. Apache Calcite官方文档中文版-概览-1.背景

    第一部分 概览 1. 背景   Apache Calcite是一个动态数据管理框架.它包含了许多组成典型数据管理系统的经典模块,但省略了一些关键性的功能: 数据存储,数据处理算法和元数据存储库.    ...

  3. 【Calcite】Apache Calcite 框架初探及概念详解

    1. 简介 Calcite 是什么?如果用一句话形容 Calcite,Calcite 是一个用于优化异构数据源的查询处理的基础框架. 最近十几年来,出现了很多专门的数据处理引擎.例如列式存储 (HBa ...

  4. Apache Calcite入门

    文章目录 01 简介 02 功能 03 相关组件 3.1 Catalog 3.2 SQL Parser 04 用法 05 文末 01 简介 Apache Calcite 是一款开源SQL解析工具, 可 ...

  5. Apache Calcite论文概要

    ABSTRACT calcite的特点: 模块化优化规则和可扩展查询优化器 支持各种查询语言的查询处理器 可扩展适配器架构 异构数据模型和存储 1.INTRODUCTION 面临问题: 多种异构数据源 ...

  6. Apache Calcite初探和csv简单例子

    ApacheCalcite官网介绍 Apache Calcite is a dynamic data management framework. It contains many of the pie ...

  7. Apache Calcite 简介

    1. 什么是Apache Calcite ? Apache Calcite 是一款开源SQL解析工具, 可以将各种SQL语句解析成抽象语法术AST(Abstract Syntax Tree), 之后通 ...

  8. Apache Calcite教程-SQL解析-Calcite SQL解析

    Calcite SQL解析 一.代码结构 其中,在codegen文件夹下,  config.fmpp (主要制定实现类路径)表示calcite 模板配置,Parser.jj是JavaCC解析器所需解析 ...

  9. Apache Calcite 论文翻译

    Apache Calcite 论文原稿: https://arxiv.org/pdf/1802.10233.pdf 文章目录 Apache Calcite 论文 1.简介 1.1. 引言 2.相关工作 ...

最新文章

  1. SQL高级查询(层次化查询,递归)
  2. SD-WAN开源优势是什么?
  3. 图片瀑布流Html,真的!!!两行css代码实现瀑布流,html,css最简单的瀑布流实现方式且没有缺点...
  4. 易创课堂成都站给你寄来一包干货,请注意查收
  5. apache httpclient 工具类_HttpClient
  6. python自动华 (四)
  7. maven jetty 插件 允许修改 js
  8. java实现定时任务 schedule_详解java定时任务
  9. (DevExpress2011控件教程)ASPxGridView 范例3 :ASPxGridView 排序和分组、过滤行、统计功能等功能实现...
  10. docker 命令_Docker的入门:安装Docker及记住常用的镜像命令和容器命令
  11. java安卓开发软件及环境配置
  12. NX二次开发-BlockUI对话框嵌套MFC对话框制作进度条
  13. 电商系统商品库的基本功能设计与实现
  14. Dynamics AX 2012 的工业物联网解决方案
  15. 测绘大王的GPS盛宴
  16. 7-5 换硬币 (20 分)
  17. 基于ttcrpy的跨孔CT高斯牛顿算法及python代码分享(2)
  18. iOS Charts
  19. 拯救脆弱的智慧城市:不但要“智商” 还得有“生气”
  20. win环境20分钟搭建php+sql服务器Apache+php+mysql在windows下的安装与

热门文章

  1. 吲哚菁绿ICG-ICG Biotin/ADIBO/ATT-ICG生物素近红外荧光染料用于科研
  2. 图解Java开发工具JBuilder 9 0(三)
  3. PAT 1040有几个PAT
  4. 工业传奇不止《美国工厂》:百度智能云正在参演中国制造保卫战
  5. 快速提高英语口语和听力水平的办法_转载
  6. asp.net实现显示在线会员
  7. 计算机操作工中级理论,计算机操作员中级理论知识复习题及答案.doc
  8. ABB机器人零位校准的那些秘密
  9. qt QWebEngineView 缓存问题,如何查找缓存路径 centos
  10. CAD新建图层(网页版)