自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(5292)
  • 资源 (10)
  • 收藏
  • 关注

原创 【Calcite】Calcite 处理流程详解(二)

Apache Calcite 查询优化器简介 本文介绍了Apache Calcite查询优化器的核心概念与实现。主要内容包括: 查询优化器概述:解释查询优化器在数据库和计算引擎中的核心作用,及其如何将关系代数表达式转换为高效执行计划。 优化模型: RBO(基于规则优化):严格按规则转换表达式,不考虑数据特性 CBO(基于成本优化):根据统计信息和代价模型选择最优计划,更适合离线场景 常见优化规则: 谓词下推:提前过滤减少join数据量 常量折叠:预计算常量表达式 列裁剪:仅扫描必要列减少IO Calcite

2025-08-03 00:30:00 4

原创 【Calcite】Calcite 处理流程详解(一)

Apache Calcite是一个灵活、可嵌入、可扩展的SQL查询处理框架,为Hive、Flink等大数据系统提供统一的查询优化和语言支持。其核心架构包括模块化查询优化器、多语言查询处理器和适配器扩展机制,支持关系型、半结构化、流式和地理空间数据。Calcite基于关系代数理论,通过关系表达式(RelNode)和优化规则(RelOptRule)实现查询重写与优化,其中ConverterRule处理不同数据源间的转换。理解这些基础概念对于掌握Calcite的查询优化流程至关重要,特别是关系代数操作(如选择σ、

2025-08-03 00:15:00 259

原创 【Calcite】Calcite Parser、SQL解析的几个文件

Calcite解析器自定义配置模板摘要:该模板文件用于配置Calcite SQL解析器的自定义实现,主要包括解析器类名、包路径、导入语句、关键字列表等配置项。其中定义了包名为"com.github.quxiucheng.tutorial.parser.custom",类名为"ExtensionSqlParserImpl"。模板包含大量SQL关键字和非保留关键字配置,如"ABSENT"、"ACTION"、"DATABAS

2025-08-02 00:30:00 250

原创 【Calcite】Calcite Parser Calcite SQL解析

本文介绍了Calcite SQL解析模块的核心结构和实现原理。主要内容包括:1) Calcite SQL解析器生成流程,从配置、工厂类到具体解析器的层次结构;2) SQL解析使用示例,展示如何通过SqlParser解析SQL语句并生成抽象语法树;3) Parser.jj文件解析SQL的核心过程;4) 常用解析类及其作用,如Span、SqlAbstractParserImpl、SqlParseException等;5) 各类SQL语句对应的子类实现;6) SqlLiteral常量的类型和使用方式。整体呈现了C

2025-08-02 00:15:00 7

原创 【Calcite】Calcite 基于代价的优化CBO 分析

本文介绍了Apache Calcite中基于代价的优化(CBO)概念及其实现机制。CBO通过等价表达式替换和代价模型迭代优化SQL执行计划,其核心公式为CBO = RBO + Cost Model + Model Iteration。Calcite采用Volcano/Cascades模型计算代价,该模型使用动态规划中的贪心算法,在枚举过程中进行局部优化。代价计算包含三个关键指标:行数(RowCount)、CPU消耗和IO成本。文章详细剖析了代价计算的核心组件RelMetadataQuery及其工作原理,包括

2025-07-31 00:30:00 17

原创 【Calcite】Calcite 原理、优化、Calcite RBO简介

基于规则的查询优化(RBO)简介 RBO(Rule-Based Optimization)是一种基于预定义等价代数表达式规则的查询优化方法。它通过应用一系列转换规则来优化查询执行计划,如: 连接顺序调整 外连接转内连接 列裁剪和常量折叠 投影合并 子查询转半连接等 在Calcite中,实现RBO需要: 确定规则适用的RelNode类型 继承RelOptRule或ConverterRule类 实现onMatch()或convert方法 核心执行过程分为两步: setRoot():将关系表达式转换为有向无环图

2025-07-31 00:15:00 122

原创 【Calcite】Calcite 从 SQL 语句中解析出源表和结果表

摘要:本文介绍了如何从SQL语句解析出的抽象语法树(AST)中提取所有表引用。重点分析了Calcite中SqlNode结构,指出表引用出现在FROM子句和JOIN子句的SqlIdentifier节点中。文章提供了Scala实现代码,通过递归遍历AST,识别SELECT、JOIN、AS等关键节点,最终提取源表和目标表。特别处理了AS别名的转发情况,确保能准确识别所有表引用。

2025-07-25 00:30:00 131

原创 【Calcite】Calcite 解析CSV案例

Calcite CSV适配器使用指南 本文介绍了Apache Calcite CSV适配器的基本使用方法。主要内容包括:通过Git克隆源码并编译安装;使用sqlline连接CSV数据源进行SQL查询测试;解析model.json配置文件如何定义数据模式;以及如何通过配置文件添加视图表。文中展示了CSV文件作为关系型数据源查询的完整流程,包括表连接、聚合等SQL操作示例,并简要说明了底层CsvSchemaFactory的实现原理。

2025-07-25 00:15:00 14

原创 【Calcite】Calcite 基于Calcite自定义JDBC Driver

本文介绍了如何利用Calcite框架实现自定义JDBC驱动程序,用于查询JSON文件。主要内容包括:1)定义JDBC URL格式为"jdbc:json://路径",其中路径下的JSON文件将被加载为表;2)构建JsonSchema类处理JSON文件元数据,以文件名作为表名;3)实现JsonTable类解析JSON数据结构和内容;4)提供示例JSON数据文件(user.json和order.json)作为测试数据。该方案通过Calcite的Schema接口和Table接口,将JSON文件映

2025-07-24 00:30:00 118

原创 【Calcite】Calcite 基于Calcite自定义SQL解析器(测试成功)

本文介绍了如何扩展Calcite SQL解析器以支持自定义语法。主要讲解了通过javacc和freemarker工具链,在编译阶段生成最终语法文件的技术实现流程。文章以一个具体案例为例,演示了如何在标准SQL语句前添加"jacky job"关键字并使其可被解析。详细说明了Maven工程的配置要点,包括必要的依赖项(如Calcite核心、日志组件等)和编译插件设置(maven-compiler-plugin、maven-dependency-plugin等),为开发者实现自定义SQL语法扩

2025-07-24 00:15:00 204

原创 【Calcite】Calcite 中定制自已SQL解析器

摘要 本文介绍了SQL解析器(Sql Parser)的基本概念,重点讲解了Calcite框架中的SQL语法解析实现。文章首先类比计算器解析数学表达式说明SQL解析的原理,然后详细解析了Calcite内置的语法解析配置,包括大小写敏感、引用标识符等参数设置,并指出解析器仅验证语法结构而不检查标识符存在性。 作者进一步演示了如何自定义SQL解析器来支持新语法"SUBMIT JOB AS",包括修改JavaCC文件、添加SqlNode子类、配置编译环境等步骤。通过扩展Calcite的解析器,可

2025-07-21 00:30:00 24

原创 【Calcite】Calcite 如何在Calcite中注册函数

Calcite自定义函数流程摘要(150字) Calcite自定义函数主要通过在SqlStdOperatorTable中注册实现。首先需在SqlStdOperatorTable中定义函数签名,包括函数名、返回类型、参数类型等。使用时通过配置FrameworkConfig指定自定义的OperatorTable实例。解析阶段会根据函数名在OperatorTable中查找匹配项,未找到则生成SqlUnresolvedFunction。验证阶段会解析未决函数,检查所有注册表中的函数定义。整个过程涉及Schema管理

2025-07-21 00:15:00 137

原创 【Calcite】Calcite 基于Json配置的查询

本文介绍了如何使用Apache Calcite通过JSON配置文件读取JDBC数据源。通过定义stock.json文件配置MySQL数据源连接信息,包括驱动、URL、用户名和密码。在Java代码中加载该配置文件,建立Calcite连接并执行SQL查询,实现对MySQL数据库中person表数据的读取。示例演示了Calcite作为中间件适配多种数据源的能力,展示了其在数据仓库中对接多源数据的重要作用。

2025-07-20 00:30:00 117

原创 【Calcite】Calcite 基于数据库的查询

JDBC连接MySQL数据库示例及参数解析 本文演示了使用JDBC通过Calcite连接MySQL数据库的代码示例,包括驱动加载、数据源配置和查询执行过程。代码展示了如何创建连接、获取Schema并执行SQL查询。同时详细介绍了JDBC连接字符串的各项参数,如caseSensitive、conformance、lex等,这些参数可以控制SQL解析、标识符处理和行为兼容性。文章还提供了Maven依赖配置说明和不同连接方式的示例,包括直接连接和通过Schema适配器连接。这些内容为开发者提供了JDBC连接MyS

2025-07-20 00:15:00 19

原创 【Calcite】Calcite 基于内存数据的查询

接下来我们使用calcite 来查询这个结构里的数据。如何引入calcite,以maven方式为例。下面来创建一个基于内存数据的查询。

2025-07-19 00:30:00 140

原创 【Calcite】Calcite 自定义解析器入门案例

本文介绍了使用FMPP(基于Freemarker的模板生成器)通过Maven插件自动生成Java代码的流程。主要包括:1)添加FMPP Maven插件依赖,配置模板目录和输出路径;2) 编写config.fmpp配置文件定义变量和模板文件;3) 创建Freemarker模板文件,支持变量替换和模板包含;4) 执行mvn fmpp:generate命令后,在target目录下生成包含变量替换结果的Java代码文件。通过示例展示了如何将配置文件中的变量值(1和3)动态插入到模板中,最终生成可执行的Java类。

2025-07-19 00:15:00 431

原创 【Calcite】Calcite SQLLine 命令讲解

SQLLine是一个基于Java的跨平台SQL命令行工具,功能类似于Oracle的sqlplus和MySQL的mysql客户端。它需要JVM、Jline库和JDBC驱动支持,通过下载jar包并配置classpath即可使用。SQLLine采用DriverManager机制连接数据库,主要执行流程包括初始化连接、获取驱动、验证URL等步骤。该工具提供简洁的命令行界面,支持执行SQL查询、查看表结构等基本数据库操作,适用于多种关系型数据库的连接和操作。

2025-07-18 00:30:00 130

原创 【Calcite】Calcite 浅谈数据库查询过程

摘要:SQL查询优化器的工作原理 SQL查询优化器是数据库系统的核心组件,负责将用户提交的非过程化SQL语句转换为高效执行方案。其工作流程包括:1)语法分析,检查语句正确性并转换为关系代数;2)语义检查,验证数据类型等约束;3)查询重写,基于关系代数优化查询形式;4)生成访问计划,评估成本选择最优方案;5)生成可执行代码并执行。优化器通过自动改进查询形式(如添加冗余条件减少连接数据量)和选择最小成本方案,显著提升查询性能,是决定数据库效率的关键因素。

2025-07-18 00:15:00 203

原创 【Calcite】Calcite SQL 优化基础

本文主要探讨了SQL查询优化的基本概念和逻辑优化技术。首先介绍了优化过程的四个主要步骤:词法分析、逻辑优化、物理优化和执行。随后重点阐述了逻辑优化的核心思想,包括子句局部优化、子句管理优化、形式变化优化等,这些优化主要基于关系代数和启发式规则。文章详细分析了从运算符角度(选择、投影、集合运算)和运算规则角度(交换律、结合律、分配律等)进行优化的方法,通过具体SQL示例展示了如何应用这些规则来提升查询效率。其中强调了条件化简、操作下推等技术对减少中间结果大小和数量的重要作用。

2025-07-17 00:30:00 122

原创 【Calcite】Calcite 基础知识-关系代数

参考文章:Apache Calcite教程-基础知识-关系代数

2025-07-17 00:15:00 17

原创 【Calcite】Calcite 概念大全

Calcite SQL解析与优化流程 本文介绍了Apache Calcite中SQL解析和优化的关键流程。SQL首先被解析为抽象语法树SqlNode,包含SqlIdentifier(字段)、SqlCall(函数)、SqlLiteral(常量)等节点。随后SqlNode被转换为关系表达式RelNode(如TableScan、Project、Filter等),期间会生成行表达式RexNode(RexInputRef、RexCall等)。关系表达式会携带特征Traits(Convention、RelCollati

2025-07-16 00:30:00 18

原创 【Calcite】Calcite 入门介绍

Calcite是一个Apache孵化项目,提供标准SQL查询底层各类数据源的能力。它采用"one size fits all"理念,通过Schema和Table抽象实现数据关系化,支持异构数据源联合查询。核心流程包括SQL解析、校验、优化和执行,支持多种查询优化规则。Calcite具有跨数据源查询、物化视图管理、流数据处理等特性,通过三种Table类型(ScannableTable、FilterableTable、TranslatableTable)实现不同级别的查询优化。其精简架构支持

2025-07-16 00:15:00 149

原创 【Calcite】Calcite官网、高级 Lattices

Apache Calcite中的Lattice(格)框架概述 Lattice是用于创建和填充物化视图的框架,能够识别并优化解决特定查询的物化视图。它基于星型或雪花模型,要求连接关系必须是多对一的,围绕事实表建立。Lattice利用SQL语句定义星型模型,声明主外键约束,帮助查询优化器将用户查询映射到物化视图。 关键特性: 允许所有列既作为维度又作为度量 支持通过表名引用重复列名 "tile"概念表示特定维度的物化表 提供自动生成和优化物化视图的算法 示例展示了如何创建包含Lattice的

2025-07-11 11:42:24 29

原创 【Calcite】Calcite官网、高级、Calcite中的流式SQL

摘要: Apache Calcite扩展了标准SQL以支持流式查询,通过引入STREAM关键字实现实时数据处理。流式查询与关系查询不同,前者持续处理流动数据而后者操作静态表。Calcite支持流式SQL的常见操作,如过滤(WHERE)、投影表达式和窗口聚合(如滚动窗口)。示例展示了从Orders流中筛选、计算和格式化数据的场景,并强调流式查询不会终止,而是持续输出新记录。该扩展保持了SQL语义的一致性,允许混合查询流和表数据,为实时分析提供了标准化的查询语言支持。(149字)

2025-07-11 11:41:56 138

原创 【Calcite】Calcite官网 高级 适配器

要定义自定义架构,您需要实现 interface SchemaFactory。在查询准备期间,Calcite将调用此接口以查找您的架构包含哪些表和子方案。在查询中引用架构中的表时,Calcite会要求您的架构创建的实例 interface Table。该表将包装在中 TableScan,并将进行查询优化过程。要定义自定义表格,您需要实现 interface TableFactory。模式工厂是一组命名表,而表工厂绑定到具有特定名称(以及可选的一组额外的操作数)的模式时会生成一个表。

2025-07-04 00:30:00 129

原创 【Calcite】Calcite官网 总览 Algebra(代数)

以下方法创建一个关系表达式(RelNode),将其压入堆栈,然后返回RelBuilder。方法描述创建一个TableScan。创建中的n最近的关系表达式。在给定类型的[TransientTable]](/ apidocs / org / apache / calcite / schema / TransientTable.html)上创建TableScan(如果未指定,将使用最新的关系表达式的类型)。创建一个值。在给定谓词的AND上创建过滤器;如果指定,则谓词可以引用这些变量。创建一个项目。

2025-07-04 00:15:00 19

原创 【Calcite】Calcite官网 总览 Tutorial

Apache Calcite CSV适配器教程摘要 本文介绍了如何使用Apache Calcite构建一个CSV文件适配器,将CSV目录转换为可查询的SQL数据库。主要内容包括: 适配器概述:calcite-example-cSV项目通过少量Java代码实现完整SQL功能,能读取CSV文件并作为表查询。 核心概念: 自定义Schema和Table接口实现 JSON模型文件定义表和视图 支持三种表实现方式:扫描表(ScannableTable)、可过滤表(FilterableTable)和可翻译表(Trans

2025-06-26 00:30:00 32

原创 【Calcite】SQL解析、词法分析、语法分析、语意分析

SQL解析包含三个过程:词法分析、语法分析、输出抽象语法树SQL解析将一个输入的字符串,变换为描述这个字符串的“结构体〞

2025-06-26 00:15:00 169

原创 【Flink】 No operators defined in streaming topology. Cannot execute

今天主要是记录一次排查No operators defined in streaming topology. Cannot execute的过程,稍微有些意义吧。我今天的的报错不一样,这个环境原先是好的,已经运行很久了,然后今天突然不能运行。这个环境是kerberos的认证环境开启kerberos认证,配置krb5.conf部分现场需要使用EsClient进行认证# 日志打印本地认证成功。

2025-06-22 00:30:00 70

原创 【Postgres】数据库SQL注入案例、order by sql注入

今天遇到一个数据安全问题,SQL注入问题,这个是我以前从来没有考虑到问题。这个功能是前端查看列表的时候传入排序字段和排序方式。最终的解决方法是: 需要每个mapper都写一个白名单,比如只能在name, id, type之中取。这里我对字段进行校验,想着没有空格就好了。但是如果有如下的参数那么还是有不对的。因此我写了第一个版本,但是改完人家一看还是有安全问题。那么就会有安全问题。可以看到查询到相关的数据。但是这样写是有问题的,比如前段传值如下。这里直接展示前端传入的值,这里。这里写的xml方法如下。

2025-06-22 00:15:00 45

原创 【Elastic】Elastic 监控运维 dipper-elastic-monitor

在日常运维和开发过程中,我们发现现有的 Elasticsearch 监控工具在某些场景下存在功能缺失、界面不友好或排查问题不够直观的问题。为了提升集群的稳定性、可观测性和使用体验,我开发并开源了这款轻量级的 **Elasticsearch 集群监控工具**。

2025-06-21 20:09:57 1279

原创 【Flink】记一次Flink变量可见性导致的问题

20240126日,今天遇到一个线程问题,发现我们一个变量总是为空,这个问题不具有普适性,但是对于我们来说恰恰是一个值得注意的地方。本次因为这个我在这个现场排查问题,耗时了4个小时,因此记录一下。下面我们将来演示一下这个代码。

2025-06-21 00:30:00 148

原创 【Flink】Flink 消费一段时间1万多条数据就卡死

我们有个现场环境,发现了奇怪的现象,就是每次启动任务后,消费1万多条数据后就会卡死,然后整个流不消费,也不往下输出,看起来卡死了一样。缺图这里面出现的网闸原因导致的,但是经过我们写了一个简单的kafka消费程序,然后在出问题的节点上消费数据,实际排查,发现不是这个问题。这个问题,发现也不是,这段时间没有进行过kafka数据清理。里面的问题。因为这个问题,我们后面的代码刻意规范了,不这样操作。后来是在没办法了,然后我们dump了线程,发现有如下代码。

2025-06-21 00:15:00 218

原创 【PostgreSQL】PostgreSQL创建的表字段信息为什么小写了

下面是现象:我使用工具创建了一个PostgreSQL 表,然后发现我填写的是大写,但是实际保存的是小写如上图我写的是大写但是点击确定后就会变成小写这是点击创建表的时候显示的语句既然这样生成的语句是,小写,那么我手动建表呢,故意大写可以看到创建的表信息仍然小写。

2025-06-20 00:15:00 41

原创 【Paimon】Apache Paimon 简介

Apache Paimon 原名 Flink Table Store(简称FTS),是Flink 子项目,2023年3月12日进入ASF化器,改名 Apache Paimon。Apache Paimon是一个流数据湖平台,支持 Streaming 实时计算能力和 Lakehouse 新架构优势,支持高速数据摄取、变更日志跟踪和高效的实时分析的能力,提供统一存储的能力。

2025-06-19 08:54:57 936

原创 【Flink】Flink JobGraph前置检测,OOM问题、代码编译问题

20240121日,今天在社区遇到一个这样的问题,flink1.16.2 sink doris,使用table api字段数超过100个就会提示如下异常,有哪些参数可以调整优化呀,错误日志报的是oom,但是没找到参数能优化我这里对这个异常栈进行分析,带着问题看代码,速度更快。

2025-06-19 00:45:00 38

原创 【Flink】Flink自定义流分区器Partitioner、数据倾斜、CustomPartitionerWrapper

首先我们看看这个类的定义 CustomPartitionerWrapper@OverrideK key;try {可以看到CustomPartitionerWrapper很简单,就是对我们的类进行包装了一下。我们可以实现Partitioner,然后重写逻辑,这里我们默认就是一个0位置。

2025-06-19 00:30:00 133

原创 【Flink】Flink 1.18 任务提交目录.flink目录过大

今天看了一个现场环境,然后对方因为Hadoop问题,然后导致一直无法提交任务到yarn上,日志阻塞如下来来回回的打印这个日志,看着一直在上传jar包。比如这个日志上传的是注意这个目录不是本地目录是远程目录。使用如下命令查看发现这个目录下有很多的提交jar包目录,每次提交都生成一个然后查看任意一个,里面基本都是flink程序的依赖包信息。但是这个目录非常大,然后我就想知道这个目录难道不会被清理吗?

2025-06-12 00:30:00 129

原创 【hadoop】hadoop no lease on /xx/zookeeper.jar._COPYING_ inode 42060 file does not exist holder DFSC

在执行脚本时使用HDFS命令将JAR文件推送到远程时出现了问题。检查HDFS用户:验证您正在使用的HDFS用户是否具有足够的权限来推送文件。您可以使用chown命令更改文件所有者或使用sudo命令以超级用户身份执行推送操作。检查文件路径:确保要推送的JAR文件路径是正确的,并且该文件确实存在。检查文件权限:确保您具有足够的权限来访问和推送文件。您可以使用chmod命令修改文件权限以确保您具有适当的访问权限。检查HDFS状态:确认HDFS服务正常运行,并且有足够的可用空间来放置您要推送的JAR文件。

2025-06-12 00:15:00 28

原创 【Flink】Flink 头部算子Busy、Mailbox Busy

20240117今天在社区里面,看到一个头部算子Busy、Mailbox Busy的问题,然后这个引起了一些疑问,但是也能梳理一下代码,因此看看这个异常的节点是source 节点,source 一直是100% 这是不正常的这说明下游算子处理速度较慢。

2025-06-11 00:30:00 166

hadoop单结点配置

hadoop单结点配置,根据官网配置的实验

2016-06-16

hadoop单结点

hadoop单结点

2016-06-16

hadoop 2.x 版本概要讲解,HA搭建指南

hadoop 2.x 版本概要讲解,HA搭建指南

2024-06-24

Drools-复杂事件处理

drools复杂事件处理,详细说明文档。一些语法的详细解析

2018-09-30

Eclipse Formatter 模板 Formatter.xml

Formatter模板设置好后,保存时可自动格式化代码。代码的空格处理,写的时候不用再担心格式问题。设置保存时,仅保存编辑的行,这样不会更新其他行的代码,提交代码时,也是只变更自己编辑的行。

2020-11-11

打飞机代码

一个打飞机游戏代码,全java写的,能实现打飞机的基本功能

2015-08-01

s2sh整合配置,非常适合初学者,明白配置流程

非常适合初学者掌握ssh2整合的例子,献给初学者

2015-12-18

hadoop学习文档

2016-09-14

native_32位

Hadoop配置需要的32位 native_32位

2016-06-16

excel操作包

excel导入到数据库的工具包

2017-02-20

eclipse的hadoop插件

2016-09-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除