2、Calcite 源码编译与运行

news2024/11/24 5:38:50
Calcite 源码编译与运行
一、概述
1)简介

Calcite是一个数据库查询优化器。

2)使用方式
1.将Calcite作为独立的服务,向下对接异构数据源,上层应用则使用Calcite原生的JDBC接口,利用SQL语句进行请求和响应。
2.将Calcite进行拆分,作为一个嵌入式的组件存在于查询引擎当中。

例如:Hive、Flink

3)架构

在这里插入图片描述

Calcite的各个组件可以分为4种类型

1.查询优化器(Query Optimizer)

是整个Calcite的核心,它会对上游产生的逻辑查询计划进行优化,生成最终的执行计划。

在优化过程中,查询优化器基于优化模型,对SQL关系代数算子树进行优化,查询优化器会根据不同的优化模型来选择不同的优化策略。

在Calcite中,查询优化器提供了两种优化模型

一种是根据经验来进行查询优化的启发式模型(Heuristic Model),它一般会根据预先设定的优化规则,对查询计划进行优化,例如谓词下推、常量折叠等确定会对查询带来性能提升的策略都属于启发式模型的范畴。

另一种是基于代价的优化模型——火山优化模型(Valcano Model),火山模型不仅会考虑到预先设定的优化规则,还会综合考量数据集的统计信息(数据行数、某个字段的基数、最小值、最大值等)以及当前服务器的状态(CPU性能、内存占用率、网络情况等),最终将上层的逻辑计划转换成更符合当前场景的物理查询计划。

2.操作表达式(Operator Expression)、元数据提供器(Metadata Provider)、插件化优化规则(Pluggable Rule)

其中操作表达式会对操作表达式进行适配,内部包含输入的原始计划、中间结果以及最终输出的计划

元数据提供器会对元数据进行适配

插件化优化规则会对优化规则进行适配

所有的适配器都可以根据具体的场景进行扩展

3.其它流程性的组件

例如负责接收JDBC请求的JDBC服务器(JDBC Server)

负责解析SQL语法的SQL解析器(SQL Parser)

负责校验SQL语法的SQL校验器(SQL Validator)

以及负责构建表达式的表达式构建器(Expression Builder)

4.最外层的数据处理系统(Data Processing System)和数据源(Data Source)

用户可以根据自己的需要,挂载不同的数据执行引擎。

二、源码编译与运行
1)从 githup clone 源码
git clone https://github.com/apache/calcite.git
2)编译源码
1.修改 calcite/gradle.properties

对 systemProp.org.gradle.internal.publish.checksums.insecure=true 增加 # 号注释

#systemProp.org.gradle.internal.publish.checksums.insecure=true
2.执行 gradle 的 build 操作

在这里插入图片描述

三、使用 Calcite 内置的 SQLLine 操作 model.json 中的数据

进入项目目录,启动内置的 SQLLine

cd */calcite/example/csv

./sqlline

注意:执行以下命令时,带 !的无需加 ;号

1、基础操作
1)利用SQLLine来连接数据库的命令
!connect jdbc:calcite:model=src/test/resources/model.json admin admin
2查看所有表的元数据信息
!tables

+-----------+-------------+------------+--------------+---------+----------+------------+-----------+---------------------------+----------------+
| TABLE_CAT | TABLE_SCHEM | TABLE_NAME |  TABLE_TYPE  | REMARKS | TYPE_CAT | TYPE_SCHEM | TYPE_NAME | SELF_REFERENCING_COL_NAME | REF_GENERATION |
+-----------+-------------+------------+--------------+---------+----------+------------+-----------+---------------------------+----------------+
|           | SALES       | DEPTS      | TABLE        |         |          |            |           |                           |                |
|           | SALES       | EMPS       | TABLE        |         |          |            |           |                           |                |
|           | SALES       | SDEPTS     | TABLE        |         |          |            |           |                           |                |
|           | metadata    | COLUMNS    | SYSTEM TABLE |         |          |            |           |                           |                |
|           | metadata    | TABLES     | SYSTEM TABLE |         |          |            |           |                           |                |
+-----------+-------------+------------+--------------+---------+----------+------------+-----------+---------------------------+----------------+

3)查看某张表里面所有的字段元数据信息
!columns DEPTS

+-----------+-------------+------------+-------------+-----------+-----------+-------------+---------------+----------------+----------------+----------+
| TABLE_CAT | TABLE_SCHEM | TABLE_NAME | COLUMN_NAME | DATA_TYPE | TYPE_NAME | COLUMN_SIZE | BUFFER_LENGTH | DECIMAL_DIGITS | NUM_PREC_RADIX | NULLABLE |
+-----------+-------------+------------+-------------+-----------+-----------+-------------+---------------+----------------+----------------+----------+
|           | SALES       | DEPTS      | DEPTNO      | 4         | INTEGER   | -1          | null          | null           | 10             | 1        |
|           | SALES       | DEPTS      | NAME        | 12        | VARCHAR   | -1          | null          | null           | 10             | 1        |
+-----------+-------------+------------+-------------+-----------+-----------+-------------+---------------+----------------+----------------+----------+
2、查询操作
1)查询Calcite中的数据
SELECT * FROM DEPTS;

+--------+-----------+
| DEPTNO |   NAME    |
+--------+-----------+
| 10     | Sales     |
| 20     | Marketing |
| 30     | Accounts  |
+--------+-----------+
3 rows selected (1.598 seconds)
2)使用聚合操作和连接操作来查询和处理Calcite中的数据
0: jdbc:calcite:model=src/test/resources/mode> SELECT d.name, COUNT(*)
. . . . . . . . . . . . . . . . . . semicolon> FROM emps AS e JOIN depts AS d ON
. . . . . . . . . . . . . . . . . . semicolon> e.deptno = d.deptno GROUP BY d.name;
+-----------+--------+
|   NAME    | EXPR$1 |
+-----------+--------+
| Sales     | 1      |
| Marketing | 2      |
+-----------+--------+
2 rows selected (0.667 seconds)
3)通过函数来完成对数据的构建和运算
0: jdbc:calcite:model=src/test/resources/mode> VALUES CHAR_LENGTH('Hello, ' || 'world!');
+--------+
| EXPR$0 |
+--------+
| 13     |
+--------+
1 row selected (0.15 seconds)
4)查看连接信息
0: jdbc:calcite:model=src/test/resources/mode> !list
1 active connection:
 #0  open                          jdbc:calcite:model=src/test/resources/model.json
5)使用"!all"命令对所有数据库连接执行相同操作
!all DELETE FROM COMPANY
6)在SQLLine中读取外部配置文件信息
!properties test.properties
7)查看当前所有数据源驱动信息的操作
0: jdbc:calcite:model=src/test/resources/mode> !scan  
scan complete in 15ms
3 driver classes found
Compliant Version Driver Class
yes       0.0     org.apache.calcite.avatica.remote.Driver
yes       1.36    org.apache.calcite.jdbc.Driver
yes       2.7     org.hsqldb.jdbc.JDBCDriver 
8)使用SQL语句来对底层数据源进行查询的操作
SELECT * FROM DEPTS; 
9)在SQLLine中执行一个SQL文件中的所有SQL语句的操作
!run example.sql 
3、事务操作
1)使用"!autocommit"命令将自动提交事务的功能关闭,后面事务需要手动提交才能生效
!autocommit off 
2)删除数据
delete from DEPTS;
3)回滚删除的数据
!rollback 
4、输出操作
设置输出格式
1)在SQLLine中将输出格式设置为表格格式
!outputformat table 
2)在SQLLine中将输出格式设置为CSV文件格式
!outputformat csv 
在SQLLine中查看当前执行的进程的情况
!procedures %JDBC%
在SQLLine中将查询结果输出到指定文件当中

使用“!record”命令指定输出路径,将之后的数据输出到该文件当中

!record /Users/hhx/Desktop/mysession.out 

使用“!record”命令停止数据的输出

!record
5、在SQLLine中将当前的配置信息进行保存
!save
退出连接
!q

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1100668.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不同行业的WMS仓储管理系统解决方案要考虑哪些因素

随着经济的发展和社会的进步,各行各业对仓储管理的需求日益增长。WMS仓储管理系统解决方案作为物流管理的重要组成部分,在提高仓储效率、降低成本、提升服务质量等方面具有重要作用。然而,不同行业在WMS仓储管理系统设计方面面临着不同的难点…

vue+ts vite环境项目取不到process 解决方法

在tdesign文档中用官方的解决方案创建了一个 vue2ts项目 用的配置文件是 vite.config.js 这里 我做了一个简单的多环境配置 当我在js中 使用 console.log(process.env.VITE_APP_BASE_URL)代码会直接白屏 然后 报错内容大概就是 process 这个属性拿不到 在vite中 我们改成了…

【 OpenGauss源码学习 —— 列存储(CU)(一)】

列存储(CU) 概述cstore 存储单元结构(CU)CU 类CU 的构造函数Reset 函数 CU::CheckCrc 函数CU::GenerateCrc 函数CU::AppendValue 函数CU::AppendCuData 函数 声明:本文的部分内容参考了他人的文章。在编写过程中&#…

win10如何取消文件夹分组

问题描述 最近不知道把哪里碰了,win10文件夹显示的文件都是按照日期分组了,很讨厌。如下图所示 修改方法 1、文件夹空白处-右击 2、分组依据(P)-选择(无)(N) 下面是操作好之后的效果图 结束 -----华丽的分割线,以下是凑字数,大…

嵌入式实时操作系统的设计与开发(aCoral线程学习)

真正的RTOS,基本上没有做到进程,只是停留在多线程,因为多进程要解决很多问题,且需要硬件支持,这样就使得系统复杂了,从而就可能影响系统实时性。 线程之间是共享地址的,也就是说当前线程的地址…

损失函数总结(一):损失函数介绍

损失函数总结(一):损失函数介绍 1 引言2 损失函数是什么3 为什么要使用损失函数4 总结 1 引言 在网络模型进行训练时,激活函数、损失函数、优化器都会成为影响模型最终效果的关键因素。其中,激活函数和损失函数根据任…

vue3 v-md-editor markdown编辑器(VMdEditor)和预览组件(VMdPreview )的使用

vue3 v-md-editor markdown编辑器和预览组件的使用 概述安装支持vue3版本使用1.使用markdown编辑器 VMdEditor2.markdown文本格式前端渲染 VMdPreview 例子效果代码部分 完整代码 概述 v-md-editor 是基于 Vue 开发的 markdown 编辑器组件 轻量版编辑器 轻量版编辑器左侧编辑…

智慧党建小程序源码系统+在线答题考试二合一 带完整的搭建教程

大家好,今天来给大家分享一个智慧党建小程序源码系统。以下是部分核心代码图: 系统特色功能一览: 积分体系:党员可以通过完成各种党建活动,如学习党的理论知识、参加组织生活、开展志愿服务等获得积分,积分…

【JVM】synchronized与锁升级

文章目录 1. synchronized锁优化背景2. synchronized锁性能优化过程2.1 java5以前2.2 monitor锁2.3 java6开始 3. 无锁4. 偏向锁4.1 背景4.2 理论落地4.3 技术实现4.4 偏向锁的撤销4.5 题外话 5. 轻量级锁5.1 轻量级锁的加锁5.2 轻量级锁的释放5.3 锁升级 6. 重量级锁7. 锁升级…

本地安装telepresence,访问K8S集群 Mac(m1) 非管理員

kubeconfig 一.安装telepresence 1.安装 Telepresence Quickstart | Telepresence (1)brew install datawire/blackbird/telepresence 2.配置 目录kubectl 将使用默认的 kubeconfig 文件:$HOME/.kube/config 创建文件夹&…

集成电路CD40161-多功能计数器和分频器的重要性 | 百能云芯

在电子电路和数字系统设计中,CD40161是一款常用的集成电路(IC)元件。它是一个多功能的计数器和分频器,具有广泛的应用领域。云芯将带您深入解释CD40161的功能、特点、应用以及未来前景,帮助您更好地了解这一电子元件。…

小程序开发平台源码系统+全功能小程序商城功能 带前后端完整搭建教程

今天来给大家介绍一下小程序开发平台源码系统的全功能小程序商城功能。全功能小程序商城是一种基于微信平台开发的电子商务应用,它通过小程序商城为商家提供了一站式电子商务解决方案,帮助商家实现线上购物的便利。下面是部分核心代码图: 系统…

玩转代码| Vue 中 JSX 的特性,这一篇讲的明明白白

目录 什么时候使用JSX JSX在Vue2中的基本使用 配置 文本插值 条件与循环渲染 属性绑定 事件绑定 v-show与v-model 插槽 使用自定义组件 在method里返回JSX JSX是一种Javascript的语法扩展,即具备了Javascript的全部功能,同时又兼具html的语义…

八、单臂路由实验

拓扑图: 单臂路由的特点,基于VLAN实现在一个路由器同一个端口下,不同网段相互通讯 首先对各个PC机ip配置完毕 进入SW1,首先创建vlan 10 20 进入2 3口配置access分别允许10 20通过,进入1 4口配置trunk允许10和20通过 …

小程序开发平台源码系统——美容美发行业小程序功能 带完整搭建教程

今天来给大家介绍一下小程序开发平台其中的美容美发行业小程序开发的功能。在我们现在的日常生活中,美容美发行业都无处不在,而创建一个小程序可以帮助美容美发店更好地进行营销推广。通过在小程序中发布优惠活动、打折信息等,可以吸引更多的…

SAP ME21N\ME22N\ME23N采购订单增强:抬头、行项目取值处理

采购订单增强:ME_PROCESS_PO_CUST 抬头: HEADERDATA: ls_mepoheader TYPE mepoheader.ls_mepoheader im_header->get_data( ). 行项目: ITEMDATA: ls_mepoitem TYPE mepoitem,ls_customer TYPE mepo_badi_exampl,ls_tbsg TYPE tb…

yolov8训练自定义目标检测模型

本文使用Ultralytics的python API进行模型训练,适用于yolov8小白入门,大佬请忽略本文 笔者也是昨天开始学习的小白,如有错误希望多多指正 目录 准备数据集 python安装yolov8 配置yaml 从0开始训练 从预训练模型开始训练 准备数据集 …

Matlab论文插图绘制模板第120期—分组气泡云图

​在之前的文章中,分享了Matlab气泡云图的绘制模板: 进一步,再来分享一下分组气泡云图。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,加群的朋友请自行下载。有需要的朋友可以关注…

【Vue】vue在Windows平台IIS的部署

系列文章 【C#】IIS平台下,WebAPI发布及异常处理 本文链接:https://blog.csdn.net/youcheng_ge/article/details/126539836 【Vue】vue2与WebApi跨域CORS问题 本文链接:https://blog.csdn.net/youcheng_ge/article/details/133808959 文章目…

新闻发稿多少钱一篇?轻松发布新闻一站式发稿服务平台

随着互联网的发展,新闻发布成为企业和个人宣传推广的重要手段之一。而在选择新闻发稿平台时,费用是一个关键因素。对于很多人而言,关心的问题是:新闻发稿多少钱一篇?是否有平价的选择?在这个方面&#xff0…