首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏码字搬砖

    calcite 入门

    前言 calcite 基本概念性的东西就不说了,本片不说技术相关的东西,仅仅闲谈 最近越来越明白了一件事:框架之所以叫框架,必然用到了模板方法,我们只需要实现哪些我们自己需要实现的东西即可。 特别有意思,如果能开发出一些有意思的东西就更有意思了 正文 calcite 是一个特别有意思的东东,介于查询与存储之间的解析层,类似于之前提到的 ANTL4 , 但远远比 antl4 强大。 Calcite 的架构有三个特点:flexible, embeddable, and extensible,就是灵活性、组件可插拔、可扩展,它的 SQL Parser 层、Optimizer 层等都可以单独使用 ,这也是 Calcite 受总多开源框架欢迎的原因之一。 但 calcite 入门很简单,进阶很难,里面有很多一系列的概念细节,最重要的是官网文档不是特别的健全。

    68310发布于 2021-03-11
  • 来自专栏大数据-BigData

    Calcite 背景介绍

    为了说明这一点,让我们创建一个空的Calcite实例,然后将它指向一些数据。 但是Calcite也可以处理其他数据格式的数据,比如JDBC。 Calcite使用优化器规则将JOIN和GROUP BY操作推入源数据库。 内存和JDBC只是两个熟悉的例子。Calcite可以处理任何数据源和数据格式。 优化器规则允许Calcite访问新格式的数据,允许您注册新的操作符(比如更好的连接算法),并允许Calcite优化查询转换为操作符的方式。 Calcite将结合您的规则和操作与内置规则和操作,应用基于成本的优化,并生成一个有效的计划。

    1.2K10编辑于 2022-01-18
  • 来自专栏大数据-BigData

    Calcite基础入门(一)

    这是一个循序渐进的教程,展示了如何构建和连接Calcite。它使用一个简单的适配器,使CSV文件的目录看起来是一个包含表的模式。Calcite完成了其余的工作,并提供了完整的SQL接口。 Calcite-example-CSV是一个功能齐全的Calcite适配器,读取CSV(逗号分隔值)格式的文本文件。值得注意的是,几百行Java代码就足以提供完整的SQL查询功能。 calcite/example/csv $ . Schema discovery Calcite是怎么找到这些表格的?记住,核心Calcite不知道任何关于CSV文件。(作为一个“没有存储层的数据库”,Calcite不知道任何文件格式。) 该插件是calcite-example-csv项目的一部分,并实现Calcite接口SchemaFactory。

    2.6K10编辑于 2022-01-18
  • 来自专栏若尘的技术专栏

    Calcite 语法拓展

    从Flink源码flink-table/flink-sql-parser/src/main/codegen文件夹copy到自己项目的src/main目录下

    1.3K95编辑于 2021-12-15
  • 来自专栏张恒的网络日志

    calcite简单入门

    2 架构与解析步骤 一般来说Calcite解析SQL有以下几步: Parser. 此步中Calcite通过Java CC将SQL解析成未经校验的AST Validate. --calcite核心包--> <dependency> <groupId>org.apache.calcite</groupId> <artifactId>calcite-core</ ; import org.apache.calcite.sql.type.SqlTypeName; import org.apache.calcite.util.Pair; import org.apache.calcite.util.Source 参考: calcite 入门介绍 calcite 自定义语法解析 calcite 进阶篇 如何使用Calcite实现一个简单的数据库 Apache Calcite官方文档中文版 Apache Calcite :Hadoop 中新型大数据查询引擎 calcite 简介 Apache Calcite教程

    8.5K21发布于 2020-04-29
  • 来自专栏Calcite剖析

    Calcite Lattice物化视图选择

    概述Calcite物化视图选择的实现原理。 (50-1) × 1 = 49 (50-1) × 1 = 49 h (100-10) × 1 = 90 (50-10) × 1 = 40 (50-10) × 1 = 30 Calcite 视图选择 实现说明 基于Calcite Lattice框架实现视图选择的核心流程如下,主要包括两部分: 视图构建:基于LatticeSuggester 将RelNode构建为Lattice对象; 视图选择 Calcite利用Pentaho 开源的MonteCarloAlgorithm 蒙特卡洛算法实现视图选择,将Lattice对象转为扩展Pentaho Schema的对象,基于StatisticsProvider 存在问题 社区Calcite基于Lattice框架和Monte Carlo随机采样算法实现基本的视图选择功能,详情可参考官方文档Lattices。该实现存在以下问题: 1.

    69943编辑于 2025-02-09
  • 来自专栏Tyrant Lucifer

    Apache Calcite 文档翻译 - 关系代数

    代数 关系代数是Calcite的核心。每个查询都被表示为一棵关系运算符的树。你可以将一条SQL语句翻译为关系代数,也可以直接建立树状结构。 规则器规则使用保留语义的数学特性来转换表达树。 Calcite通过对关系表达式进行反复应用规划器规则来优化查询。一个成本模型指导了优化的整个过程,规划器生成一个替代的表达式,语义与之前表达式相同,但具有更低的成本。 规划过程是可扩展的。 Calcite将字段按照序号进行转换,7和1 增加过滤和聚合 一个查询包含了过滤和聚合: final RelNode node = builder .scan("EMP") .aggregate 在内部,Calcite将这些字段表示为一个有11个字段的组合输入行:左边输入的第一个字段是字段#0(基于0,记住),右边输入的第一个字段是字段#8 但是通过 builder API,你可以指定哪个字段的输入

    1.5K30编辑于 2022-04-19
  • 来自专栏Flink实战剖析

    使用Calcite做Sql语法解析

    Flink SQL中使用Calcite作为sql语法解析、校验、优化工具,本篇是实操篇,介绍一下calcite做sql语法解析使用方式。 sql经过calcite解析之后,得到一棵抽象语法树,也就是我们说的AST,这棵语法树是由不同的节点组成,节点称之为SqlNode,根据不同类型的dml、ddl得到不同的类型的SqlNode,例如select 以上介绍了一下calcite解析sql的简单使用方式,我们可以使用Calcite来做血缘分析、flink sql维表关联等。 —END—

    3.6K31编辑于 2022-04-18
  • 来自专栏Calcite剖析

    Calcite系列(三):核心概念-Convention

    概念定义 Convention:Calcite设计的核心概念,代表一类特定的数据源或执行引擎,基于Convention可生成与具体数据源或者引擎相关的执行计划。 Calcite初始逻辑计划的所有树节点Convention=NONE,此时CBO代价无穷大,基于Calcite内置执行器无法直接执行。 只有将所有计划树节点都转为可执行Convention才可基于Calcite执行,该转换过程可等价理解为从逻辑计划转为物理计划。 在Calcite优化过程中,优化器将选择出该节点最优的Convention类型。 CalciteCalcite基于橙色Convention执行与数据源无关的跨源计算。

    69943编辑于 2024-04-16
  • 来自专栏叁金大数据

    Apache Calcite项目简介

    什么是Calcite Apache Calcite是一个动态数据管理框架,它具备很多典型数据库管理系统的功能,比如SQL解析、SQL校验、SQL查询优化、SQL生成以及数据连接查询等,但是又省略了一些关键的功能 目前,使用Calcite作为SQL解析与优化引擎的又Hive、Drill、Flink、Phoenix和Storm,Calcite凭借其优秀的解析优化能力,会有越来越多的数据处理引擎采用Calcite作为 那么前面对Calcite进行了简单的介绍,我们如何使用Calcite呢? 我们以Mysql数据源为例,我们通过添加Mysql数据库作为Calcite的数据源,实现通过Calcite对Mysql数据进行查询的Demo。 当然SQL解析、校验与执行计划优化是Calcite的基本功能,Calcite的NB之处在于,Calcite的目标是“one size fits all”,希望能为不同的计算平台和数据源提供统一的查询引擎

    2.3K31发布于 2019-03-15
  • 来自专栏Hadoop实操

    Calcite技术研究

    下图是采用Apache Calcite的开源数据处理系统,以及Calcite能连接到的数据源。 ? 大多数数据处理系统是使用Calcite来做SQL解析和查询优化。 Apache Calcite就是为解决这些问题而设计的。Calcite提供了所有数据处理系统所需要的查询执行、查询优化、查询语言等能力。 Calcite优化器的每个模块都是可插拔的可扩展的,包括rules和成本模型。这使得Calcite优化器非常灵活。 Calcite能在多个数据处理引擎上执行查询以及做查询优化。 Calcite本身已经实现了很多的适配器,当然我们也可以自己开发新的数据处理引擎对应的适配器。下图是calcite内置的适配器。 ? 查询处理与优化 查询优化是calcite的一个重要功能。 总结 本文主要描述的Calcite的架构以及基本原理,并简单介绍了Calcite的主要模块。Calcite的内容很多,后面还需要更深入的研究。

    2.6K40发布于 2020-02-24
  • 来自专栏skyyws的技术专栏

    Calcite parser config介绍

    Calcite针对SQL parse提供了很多的配置项,可以针对不同的SQL方言进行解析。 而这个config()就是Calcite默认提供的一个配置集合,如下所示: public static Config config() { return Config.DEFAULT; } /** .withConformance(SqlConformanceEnum.DEFAULT) .withParserFactory(SqlParserImpl.FACTORY); 可以看到,Calcite 通过上面的介绍我们可以发现,Calcite提供了比较多的配置项组合,可以解析不同的SQL方言,还是很强大的。 除了parse,Calcite还有一个unparse的过程,可以将RelNode转换成不同方言的sql,后续有时间再做介绍。

    2.7K50编辑于 2022-11-21
  • 来自专栏Calcite剖析

    Calcite系列(六):执行流程-语法解析

    然而,Calcite使用JavaCC编译器进行语法解析。 在Calcite中,Parser.jj是最核心的词法&语法分析文件。 package 包名; import 库名; public class 解析器类名 { 任意的Java代码,解析类方法 } PARSER_END(解析器类名) 词法分析器 语法分析器 Calcite 类似 抽象语法树 在Calcite中,基于SqlNode表示AST抽象语法树,一个SqlNode可对应语法树中的一个节点,即对应SQL语句中的一个元素。 标识符,例如表名、列名等 SqlLiteral:代表 SQL字面量,例如字符串、数字、日期等 SqlDataTypeSpec:代表数据类型规范,描述数据类型的各种属性,包括基本类型、精度、字符集等 在Calcite

    1.3K84编辑于 2024-05-12
  • 来自专栏Calcite剖析

    Calcite物化视图查询改写

    Server 2000视图改写的理论基础,高效实现基于selection, project, join, group-by算子匹配的视图改写方案,是当前很多计算引擎的物化视图查询改写的理论基础,例如:Calcite Calcite实现 基于SPJG论文的理论进行实现的,核心实现逻辑 MaterializedViewRule ,基于CBO选择代价最优的改写的计划树。基于perform 实现SPJG条件判断。

    58043编辑于 2025-03-20
  • 来自专栏skyyws的技术专栏

    Calcite源码学习】SqlNode方言转换

    方言转换代码解析 SqlNode.toSqlString方法 SUBSTRING转SUBSTR APPROX_COUNT_DISTINCT转APPROX_DISTINCT ROLLUP重写 小结 我们知道,Calcite 在optimize节点,Calcite会将parse tree转换为RelNode,同时进行一些优化,这属于logical plan。 Calcite目前提供了一些方言转换的功能,可以将SqlNode和RelNode转成指定计算引擎的SQL方言,例如Mysql、Presto等,相关的方言转换类如下所示: 本我们主要看一下,Calcite 在使用Calcite的parser进行解析之后,SQL就会被转换成一颗parse tree,树中每一个节点都对应一个SqlNode。对于非叶子结点,基本都是一个SqlCall,继承SqlNode。 方言转换代码解析 下面我们就来看一下,Calcite是如何实现这种方言转换的功能。

    4.6K20编辑于 2022-05-20
  • 来自专栏麒思妙想

    基于Calcite自定义JDBC Driver

    最近在公司享受福报,所以更新进度严重脱节了,本期依旧是一篇Calcite相关的文章,上一篇《基于Calcite自定义SQL解析器》有兴趣的童鞋可以移步去看看。 org.apache.calcite.linq4j.Enumerator; import org.apache.calcite.linq4j.Linq4j; import org.apache.calcite.linq4j.tree.Expression org.apache.calcite.rel.type.RelDataType; import org.apache.calcite.rel.type.RelDataTypeFactory; import org.apache.calcite.schema.ScannableTable; import org.apache.calcite.schema.SchemaPlus; import org.apache.calcite.schema.Schemas ; import org.apache.calcite.schema.Statistic; import org.apache.calcite.schema.Statistics; import org.apache.calcite.schema.Table

    2.3K30发布于 2020-07-10
  • 来自专栏Calcite剖析

    Calcite系列(一):背景介绍

    Calcite 最早的名称叫做optiq,起初在Hive 项目中,为Hive 提供CBO代价优化。 Calcite 的目标是"One planner fits all",期望能为不同的计算平台和数据源提供统一的查询优化器。作为一个通用的SQL处理层,Calcite 被众多的开源组件和公司广泛使用。 Calcite对外主要提供两种调用方式:1. 基于JDBC调用;2. 直接基于Java API调用。 Coral内核基于Calcite扩展了SQL优化和方言转换功能,下图展示了两个组件之间的交互关系,其中蓝色表示Calcite模块: Substrait:基于Proto Plan定义跨语言关系代数的序列化协议 Substrait-java 基于Calcite完成SQL到关系代数RelNode的转换,下图展示了两个组件之间的交互关系,其中蓝色表示Calcite模块: 我正在参与2024腾讯技术创作特训营最新征文

    1.4K87编辑于 2024-05-12
  • 来自专栏Calcite剖析

    Calcite系列(十一):物化视图

    提取查询特征并使用一套规则进行匹配改写,将查询表示为SPJG标准形式,提取查询中Join、Projects、Filters、Grouping、Aggregation五种表达式,分别与物化视图对应的表达式进行匹配改写; Calcite MaterializedViewSubstitutionVisitor实现,基于规则和等价类自底向上匹配 基于结构改写:由 MaterializedViewRule 规则集构成,基于查询优化器实现改写 Calcite 查询结果表达式可通过视图计算查询到; All output rows occur with the correct duplication factor:对于重复语义的算子,有相同一致的行为,如distinct算子在相同的字段; Calcite Calcite针对物化视图对Lattice进行扩展,根据用户定义的关联和聚合要求,划分出多个物化视图来适应不同类别的查询,支持自动划分物化视图。 Calcite中Lattice定义功能: 可声明主键和外键约束; 辅助优化器将用户查询映射到物化视图; 提供框架,用于采集数据量和用户查询统计信息; 允许Calcite自动产生物化视图; 我正在参与2024

    1.3K97编辑于 2024-04-24
  • 来自专栏牛肉圆粉不加葱

    Calcite - 看懂 Parser.jj 中的 SqlSelect

    javacc 会根据 parser.jj 中定义的相互穿插的 Token、Java 代码来自动生成 org.apache.calcite.sql.parser.impl.SqlParserImpl 的代码

    2.5K20发布于 2021-05-17
  • 来自专栏Calcite剖析

    Calcite系列(二):核心概念-关系代数

    随着关系模型的不断发展,更多的关系代数运算被提出,常用的关系代数运算如下表所示: Calcite实现 Calcite基于RelNode表示关系代数节点,即关系算子,其中,通过AbstractRelNode ):Join、Correlate(嵌套循环连接) SetOp(集合运算):Union(并集)、Minus(差集)、Intersect(交集) TableScan(关系):表节点,作为计划树叶子节点 在Calcite Calcite 中不单独区分逻辑算子(Logical operator) 和物理算子(Physical operator),RelNode 基于RelTrait 区分算子的物理属性(Physical properties 在Calcite中,为完整描述关系代数体系中,其他相关联的重要对象还包括: RexNode:行表达式,表示可单行计算并返回结果的表达式,例如:id=100。

    1K76编辑于 2024-05-04
领券