- 博客(5315)
- 资源 (10)
- 收藏
- 关注
原创 【Flink】Flink消费kafka是如何提交offset的
创建AbstractFetcher,然后在adjustAutoCommitConfig方法中我们会调整提交方式当偏移提交模式是on_checkpoint时,请确保禁用自动提交。这将覆盖用户在属性中配置的任何设置。这里我们是自动提交,所以这里不会走到。最终我们创建了KafkaConsumerThread。到此为止,我们先停止一下。如果是自动提交,没有检测点,那么就是kafka内部的自动提交。
2025-08-21 00:30:00
643
原创 【postgresql】JPA @Lob 存储大文本 PSQLException: 大型对象无法被使用在自动确认事物交易模式
因为在JPA建表时,有几个字段用了@Lob注解,对应Java SQL的Clob和Blob类型,Spring data在查询时,默认不开启事物,而PostgreSQL在查询Clob和Blob时要求不能是自动提交模式,需要开启事物,在网上搜了一下,大部分都是建议修改数据库字段类型为TEXT,并在对应的字段上加上注解:@org.hibernate.annotations.Type(type = “org.hibernate.type.TextType”)。我的改动如下,在下面加上注解试试。然后再次测试就好了。
2025-08-21 00:30:00
124
原创 【Flink】Flink自定义Function状态保存过程、snapshotState、initializeState方法什么时候执行
CheckpointedFunction 是 Apache Flink 中用于支持状态一致性的接口之一。实现了这个接口的函数可以在检查点时保存和恢复其内部状态。这对于在发生故障时保持应用程序状态的一致性非常重要。
2025-08-21 00:15:00
6
原创 【Flink】Flink消费kafka topic 分区的offset 是负值、导致分区从EARLIEST 开始消费
遇到 flink 消费kafka(有checkpoint) 过程中发生了 恢复,但是 一些节点 从状态里面拿到 kafka topic 分区的offset 是负值,导致 这些 分区 从 EARLIEST 开始消费。
2025-08-21 00:15:00
5
原创 【javacc】通过四则运算解析,初探语法分析
JavaCC 生成的是自上而下,不支持左递归,递归下降的解析器。这种解析器的优点是语法编写简单易懂,方便调试。在语法解析树上可以上下的传递属性,分支间可以也可调用。如图:可以把左递归等价的改下为右递归处理。语法解析重要就要理解清楚这个规则的语义,清楚了语义写规则就是信手捏来,那么动作执行就水到渠成。
2025-08-19 00:45:00
134
原创 【javacc】javacc的 Hello world 入门案例
TOKEN : {| .....符号“|”是或者的含义,匹配规则类似正则表达式。javacc的词法类型有SKIP、TOKEN 、MORE、SPECIAL_TOKEN。词法定义是语法解析的基础,好的词法定义可以让语法解析时很容易处理到达事半功倍的效果。下一篇博客将会对词法进行较为详细的总结。返回类型 语法规则名(参数) 异常抛出声明 :{变量声明}//语法规则定义词的组合规则{匹配规则时的执行动作,即使java代码执行;
2025-08-19 00:15:00
11
原创 【Calcite】SimpleSelectParser 解析 select 1+1
本章主要是 SimpleSelectParser 解析 select 1+1;这个文件的路径一定要是这里,不然无法编译。然后Java CC 的 Maven 插件如下。
2025-08-17 15:56:16
139
1
原创 【javacc】javacc 简单介绍
每一个关键字都由一个 TOKEN 构成,SKIP 用于指定在解析时需要跳过的宇符。每个TOKEN 用尖括号标识,多个TOKEN 之间用竖线分隔。尖括号里用冒号分隔,冒号前面是变量名,冒号后面是定义该变量的正则表达式。本小节的示例需要定义数字 NUMBER。为了简单,示例中并末处理不能以。开始的数宇,其余符号都只有一个单词,具体的定义方法如代码清单6-10所示。
2025-08-17 15:55:42
12
原创 【Flink】flink使用流式写入clickhouse、大幅度提高写入性能
在上一篇文章:【clickhouse】clickhouse 如何实现tcp方式发送数据 中我们写入数据的时候,使用的是第三方的框架,然后这个写入性能在500个字段的表中,我们的性能是单表,3个并行度,每秒仅能写入1-2万的eps,常见在1万附近的eps。下面是写入代码的简单案例,并不是我们测试的案例对此我们对这个性能不是很满意,一直想找一下更好的写入性能,后来我们偶然发现flink使用流式写入clickhouse可以大幅度提高写入性能。这个写入性能在500个字段的表中,我们的性能是单表,3个并行度,每秒
2025-08-16 00:45:00
394
原创 【Flink】Flink 广播流消费延迟
20240220日,今天在群里看到一个问题:我有一个数据流connect广播流,广播流优先级好像很低,每次都得等数据流积压消完,才开始消费, 请问有什么办法解决吗?经过测试发现并不会阻塞。但是可能是我写的太简单了,或者可能是数据量级的问题。然后针对这个问题,我就测试了一下。
2025-08-16 00:30:00
139
原创 【Flink】Flink记录一次使用缓存导致排查了一年的问题
但是数据量多的情况下我们遇到了问题,首先我们的并行度调高了,原先20几个并发,现在变成了几千个,然后对数据库的压力极大,而且规则配置也变得多了,以前几百条,现在几万条,然后这个规则转换又很慢。这种情况下,我们为每个TM设置一个查询缓存,然后把查询的规则配置,一个TM只放一个,然后这个是没有什么问题的,错误的地方是我后面看他编译较慢,然后按照一样的套路加了一个编译缓存。2023年12月25号现场出现问题,然后我们来解决这个问题,因为以前都是小数据量,然后没有复现这个问题,然后现在大数据量复习了这个问题。
2025-08-15 04:30:00
259
原创 【Calcite】Calcite SQLLine 基本操作、命令详解
建议看原文,这里仅供自己学习。SOLLine 是一个基于Java 开发的连接关系数据库和执行 SQL 语句的控制台工具。它类似于其他的命令行数据库连接器,比如为 Oracle 提供服务的 SQL*PLUS 和为 Sybase/SQL 提供服务的 isql。因为它是基于 Java 开发的,所以它同样具有跨平台性。
2025-08-15 02:00:00
12
原创 【Flink】Flink提交任务到kerberos认证的yarn报错rror while authenticating with endpoint kms/v
一个线程环境,部署很久了,然后今天任务正常运行,然后打算重启一下,然后Flink提交任务到kerberos认证的yarn报错rror while authenticating with endpoint kms/v。但是却不影响正常启动任务,但是看这个报错挺陌生的,应该是连接kerberos服务器的时候,偶然连接不上,然后重新自动连接了,然后就不影响任务启动,因为第一次遇到,所以这里小记录一下。
2025-08-15 02:00:00
18
原创 【Flink】Flink 如何实现瞬时指标
我们平常使用Flink指标的时候,一般做累加操作,但是今天我遇到一个问题,我的一个函数里面调用了另外一个函数,我想在指标中看到这个函数耗时情况,我希望在指标中就能看到,那么我该怎么看呢?因为我用Counter指标用的熟悉,一直都是累加操作,然后今天突发奇想,能不能用这个做累加操作呢?然后看了一下,还真能,案例如下。
2025-08-15 01:45:00
122
原创 【IDEA】IDEA中maven报nexus-maven-repository-index.properties does not exist
改完之后,切换一下maven配置,切换成其他的,然后再次切换回来。而在使用maven的命令的时候一直报的错误。找到自己的setting.xml,修改。然后把本地内置的也修改一下。然后点击Update更新。
2025-08-14 23:48:35
11
原创 【java】List数组切分与List分页,数据切分、数组等分
我们有个接口不是查询数据库,数据量不大,但是却要要分页查看,界面可以选择分页大小和页数,页数是从0开始的。今天发现这个短短的十几行代码,历经多人修改多人修改的历史记录多处处理边界值问题,数组越界问题,然后今天居然还有bug,我决定修改一下这个,以后不出问题的那种。
2025-08-07 00:30:00
364
原创 【Calcite】实战calcite进行CBO优化、CSV多表注册
在上一篇文章中我们学会了如何注册单表解析CSV文件,本章节我们要学习CSV多表注册以及calcite进行CBO优化案例。我们先看一个语句在这个SQL中如果我们没有左优化,那么我们会先把TEST01的数据查询出来,然后再把TEST02的数据查询出来,然后做数据join操作,如果我们做优化,可以先执行where条件,这样过滤后的数据就更少,性能就更好。
2025-08-07 00:15:00
22
原创 【Calcite】Calcite解析读取CSV文件案例
本章节主要是讲解如何使用Calcite解析读取CSV文件。首先看一下整个项目结构csv的文件名称一定要大写,然后内容如下然后我们定义一个CsvSchemaFactory,这个代表csv的scheam工厂,是入口。然后在CsvSchema中,主要是将csv文件集合封装成表信息,比如一个文件代表一个表,key就是文件名称,value是表信息。
2025-08-06 00:30:00
20
原创 【Calcite】Calcite Planner、HepPlanner源码分析
HepPlanner是一套greedy方式的Planner,可以认为是所优即所得,即任何rule只要命中运行,就认为其产生的结果是更优。例:Calcite实现的ProjectFilterTransposeRule,功能主要是将Project与Filter进行交换。subTree1:subTree2:则HepPlanner会将subTree2作为更优的plan。
2025-08-06 00:15:00
127
原创 【Calcite】Calcite 的类型系统
Calcite类型系统概述 Calcite的类型系统定义了数据对象间的行为和约束,通过RelDataTypeSystem接口实现类型规则定制。系统提供了默认实现RelDataTypeSystem.DEFAULT,并支持通过继承RelDataTypeSystemImpl或使用DelegatingTypeSystem进行扩展定制。类型工厂RelDataTypeFactory负责SQL/Java类型与关系类型的转换,基础实现包括RelDataTypeFactoryImpl和SqlTypeFactoryImpl。关
2025-08-04 00:30:00
122
原创 【Calcite】Calcite 的validate校验
本文介绍了SQL校验器SqlValidator的核心组件和工作流程。主要包含以下内容: SqlValidatorImpl作为默认实现类,负责SQL语句的校验工作 SqlValidatorScope定义了SQL校验的名称解析范围,表示在查询特定点可访问的表和列 SqlValidatorNamespace描述查询中使用的数据源,可以是表或子查询 校验过程从validate()入口开始,通过validateScopedExpression()进行语法检查 校验过程会先对SQL节点进行标准化重写,然后注册作用域和命
2025-08-04 00:15:00
24
原创 【Calcite】Calcite 处理流程详解(二)
Apache Calcite 查询优化器简介 本文介绍了Apache Calcite查询优化器的核心概念与实现。主要内容包括: 查询优化器概述:解释查询优化器在数据库和计算引擎中的核心作用,及其如何将关系代数表达式转换为高效执行计划。 优化模型: RBO(基于规则优化):严格按规则转换表达式,不考虑数据特性 CBO(基于成本优化):根据统计信息和代价模型选择最优计划,更适合离线场景 常见优化规则: 谓词下推:提前过滤减少join数据量 常量折叠:预计算常量表达式 列裁剪:仅扫描必要列减少IO Calcite
2025-08-03 00:30:00
22
原创 【Calcite】Calcite 处理流程详解(一)
Apache Calcite是一个灵活、可嵌入、可扩展的SQL查询处理框架,为Hive、Flink等大数据系统提供统一的查询优化和语言支持。其核心架构包括模块化查询优化器、多语言查询处理器和适配器扩展机制,支持关系型、半结构化、流式和地理空间数据。Calcite基于关系代数理论,通过关系表达式(RelNode)和优化规则(RelOptRule)实现查询重写与优化,其中ConverterRule处理不同数据源间的转换。理解这些基础概念对于掌握Calcite的查询优化流程至关重要,特别是关系代数操作(如选择σ、
2025-08-03 00:15:00
275
原创 【Calcite】Calcite Parser、SQL解析的几个文件
Calcite解析器自定义配置模板摘要:该模板文件用于配置Calcite SQL解析器的自定义实现,主要包括解析器类名、包路径、导入语句、关键字列表等配置项。其中定义了包名为"com.github.quxiucheng.tutorial.parser.custom",类名为"ExtensionSqlParserImpl"。模板包含大量SQL关键字和非保留关键字配置,如"ABSENT"、"ACTION"、"DATABAS
2025-08-02 00:30:00
263
原创 【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
24
原创 【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
32
原创 【Calcite】Calcite 原理、优化、Calcite RBO简介
基于规则的查询优化(RBO)简介 RBO(Rule-Based Optimization)是一种基于预定义等价代数表达式规则的查询优化方法。它通过应用一系列转换规则来优化查询执行计划,如: 连接顺序调整 外连接转内连接 列裁剪和常量折叠 投影合并 子查询转半连接等 在Calcite中,实现RBO需要: 确定规则适用的RelNode类型 继承RelOptRule或ConverterRule类 实现onMatch()或convert方法 核心执行过程分为两步: setRoot():将关系表达式转换为有向无环图
2025-07-31 00:15:00
135
原创 【Calcite】Calcite 从 SQL 语句中解析出源表和结果表
摘要:本文介绍了如何从SQL语句解析出的抽象语法树(AST)中提取所有表引用。重点分析了Calcite中SqlNode结构,指出表引用出现在FROM子句和JOIN子句的SqlIdentifier节点中。文章提供了Scala实现代码,通过递归遍历AST,识别SELECT、JOIN、AS等关键节点,最终提取源表和目标表。特别处理了AS别名的转发情况,确保能准确识别所有表引用。
2025-07-25 00:30:00
155
原创 【Calcite】Calcite 解析CSV案例
Calcite CSV适配器使用指南 本文介绍了Apache Calcite CSV适配器的基本使用方法。主要内容包括:通过Git克隆源码并编译安装;使用sqlline连接CSV数据源进行SQL查询测试;解析model.json配置文件如何定义数据模式;以及如何通过配置文件添加视图表。文中展示了CSV文件作为关系型数据源查询的完整流程,包括表连接、聚合等SQL操作示例,并简要说明了底层CsvSchemaFactory的实现原理。
2025-07-25 00:15:00
24
原创 【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
131
原创 【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
222
原创 【Calcite】Calcite 中定制自已SQL解析器
摘要 本文介绍了SQL解析器(Sql Parser)的基本概念,重点讲解了Calcite框架中的SQL语法解析实现。文章首先类比计算器解析数学表达式说明SQL解析的原理,然后详细解析了Calcite内置的语法解析配置,包括大小写敏感、引用标识符等参数设置,并指出解析器仅验证语法结构而不检查标识符存在性。 作者进一步演示了如何自定义SQL解析器来支持新语法"SUBMIT JOB AS",包括修改JavaCC文件、添加SqlNode子类、配置编译环境等步骤。通过扩展Calcite的解析器,可
2025-07-21 00:30:00
49
原创 【Calcite】Calcite 如何在Calcite中注册函数
Calcite自定义函数流程摘要(150字) Calcite自定义函数主要通过在SqlStdOperatorTable中注册实现。首先需在SqlStdOperatorTable中定义函数签名,包括函数名、返回类型、参数类型等。使用时通过配置FrameworkConfig指定自定义的OperatorTable实例。解析阶段会根据函数名在OperatorTable中查找匹配项,未找到则生成SqlUnresolvedFunction。验证阶段会解析未决函数,检查所有注册表中的函数定义。整个过程涉及Schema管理
2025-07-21 00:15:00
144
原创 【Calcite】Calcite 基于Json配置的查询
本文介绍了如何使用Apache Calcite通过JSON配置文件读取JDBC数据源。通过定义stock.json文件配置MySQL数据源连接信息,包括驱动、URL、用户名和密码。在Java代码中加载该配置文件,建立Calcite连接并执行SQL查询,实现对MySQL数据库中person表数据的读取。示例演示了Calcite作为中间件适配多种数据源的能力,展示了其在数据仓库中对接多源数据的重要作用。
2025-07-20 00:30:00
130
原创 【Calcite】Calcite 基于数据库的查询
JDBC连接MySQL数据库示例及参数解析 本文演示了使用JDBC通过Calcite连接MySQL数据库的代码示例,包括驱动加载、数据源配置和查询执行过程。代码展示了如何创建连接、获取Schema并执行SQL查询。同时详细介绍了JDBC连接字符串的各项参数,如caseSensitive、conformance、lex等,这些参数可以控制SQL解析、标识符处理和行为兼容性。文章还提供了Maven依赖配置说明和不同连接方式的示例,包括直接连接和通过Schema适配器连接。这些内容为开发者提供了JDBC连接MyS
2025-07-20 00:15:00
31
原创 【Calcite】Calcite 基于内存数据的查询
接下来我们使用calcite 来查询这个结构里的数据。如何引入calcite,以maven方式为例。下面来创建一个基于内存数据的查询。
2025-07-19 00:30:00
153
原创 【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
446
原创 【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
141
Eclipse Formatter 模板 Formatter.xml
2020-11-11
hadoop学习文档
2016-09-14
eclipse的hadoop插件
2016-09-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人