- 博客(244)
- 资源 (12)
- 收藏
- 关注
原创 Apache Calcite - 将Sql转换为关系表达式
我们为了进行转换创建了自定义Schema,用过Sql解析都知道Sql解析时不需要Schema,而验证转换为关系表达式时需要schema。解析是将SQL字符串转换为抽象语法树(AST)的过程,这个过程只需要了解SQL的语法规则,不需要知道具体的表和字段。解析的结果是一个 SqlNode 对象,它表示SQL语句的结构。解析器根据SQL语法规则将SQL字符串解析成SqlNode。这个过程只涉及语法分析,不涉及具体的表和字段,因此不需要Schema信息。
2024-10-18 01:24:01 863 1
原创 Apache Calcite查询优化 - 构建关系代数表达式
在Apache Calcite中,RelNode(关系表达式节点)是用于表示关系查询计划的基本单元。每个RelNode 都代表逻辑或物理操作符,诸如扫描表、过滤、联接等。构建RelNode 是进行SQL优化的第一步,因为它为优化和执行提供了一种结构化的表示方式。标准化SQL表示:SQL查询是以字符串形式表达的,需要转换为一种结构化的形式,以便进行分析和优化。RelNode 提供了标准化的表示,可以对其进行各种转换和优化操作。逻辑与物理优化:通过构建RelNode,你可以创建SQL查询的逻辑计划。
2024-08-31 20:47:18 752
原创 Java 线程上下文传递
在Java并发编程中,线程上下文(Thread Context)是指与执行线程相关的环境和状态信息。这包括线程的局部变量、事务上下文、安全凭证、用户会话信息等。在多线程应用程序中,每个线程可能需要处理不同的任务,这些任务可能需要访问和修改与当前线程相关的特定数据。通常有下列常见的使用场景。数据隔离:在并发编程中,数据隔离是保证线程安全的关键。使用线程上下文可以确保每个线程都有自己的数据副本,从而避免了数据共享时的并发问题。
2024-07-21 16:17:16 776
原创 Apache Calcite Linq4j学习
Linq4j是Apache Calcite项目中的一个模块,它提供了类似于LINQ(Language-Integrated Query)的功能,用于在Java中进行数据查询和操作。Linq4j可以将逻辑查询转换为物理查询,支持对集合进行筛选、映射、分组等操作。
2024-06-28 01:36:51 839
原创 Apache Calcite - 使用框架Sql解析器解析Sql
Calcite提供的解析器和一般的语言解析器用法类似,均是基于访问者模式进行解析,最终实现特定的功能。
2024-06-18 02:14:17 1833
原创 Apache Calcite - 使用框架Reflective schema访问Java内存数据
Apache Calcite中的ReflectiveSchema是一种机制,允许Calcite通过反射来访问Java对象作为数据库的模式。即可以将普通的Java对象集合作为数据库表来查询。ReflectiveSchema可以将Java对象的字段映射为表的列,对象的集合映射为表的行。基于ReflectiveSchema适配器可以简化我们的工作,提升效率。但该工具有一定局限性 ,要么调整使用方式,要么改写核心方法。
2024-06-17 00:56:17 1087
原创 Apache Calcite - 自定义标量函数
为了方便演示,我们实现一个无用的简单方法,对整数减1接着扩展前文中用到的schema,实现getFunctionMultimap方法,并增加添加函数的方法@Override@Override最后我们在schema中注册函数完成上述工作后,在sql中使用自定义的函数打印结果,可以看到自定义方法的计算结果95 9421 2047 46实现自定义标量函数,注册到schema最后使用,schema是核心,维护了各类元信息,并提供了扩展接口来实现自定义的能力。
2024-06-02 15:17:53 854
原创 Apache Calcite - 使用内置函数
Apache Calcite 提供了广泛的 SQL 函数支持,包括但不限于标准的 SQL 函数(如聚合函数、数学函数、字符串函数等)以及一些 Calcite 特有的扩展函数。这些函数可以在 SQL 查询中使用,以执行复杂的数据处理和分析任务。详细的介绍可以参考[1]。下面是对参考手册中函数的分类介绍聚合函数:如 COUNT, SUM, AVG, MIN, MAX 等。数学函数:如 ABS, EXP, LOG, POWER, SQRT, SIN, COS 等。
2024-06-01 20:17:35 1167
原创 Apache Calcite - 自定义数据源适配之访问内存列表
为了适配多源数据,根据上一篇文章,我们需要扩展实现Calcite中的Schema与Table。实现多源访问,了解框架结构及核心类最终实现。
2024-06-01 17:35:03 1308 2
翻译 Apache Calcite简介
在这篇文章中,我们探讨了Apache Calcite的能力,它能快速地为数据库提供标准化的SQL解析器,验证器和优化器。这让供应商无需花费太多时间开发查询引擎,使他们能够优先考虑后端存储。此外,Calcite的适配器简化了与各种数据库的连接,有助于开发统一的集成接口。更进一步,通过利用Calcite,数据库开发者可以加快产品上市的时间,同时提供强大、多功能的SQL功能。
2024-05-19 17:11:42 309
原创 软件团队协作常见问题与应对方法
一个团队成员均有各自的任务,更多关注自己的事情,导致团队整体协作时没有形成合力效应。例如成员A做架构升级,成员B做新业务迭代,他们都希望对方能支持自己的工作,但是都没有响应。这样的分工就是简单的加法逻辑,没有发挥出乘法效应。
2024-04-13 20:25:39 270
原创 日常工作中时间管理的方法学习总结
时间管理不仅仅是关于工作的效率,它还关系到生活的质量。有效的时间管理可以让你有更多的时间去做自己喜爱的事情,提高工作和生活的满意度。
2024-03-24 15:42:42 923
原创 hive窗口函数学习总结
Hive中的窗口函数主要用于在数据集的子集(窗口)上执行计算。窗口函数可以解决一些复杂的数据分析问题,例如计算移动平均值、累计和、排名等。例如,如果你想要计算每个用户的购买总额排名,或者计算每个月的销售额是前三个月的平均值的多少倍,这些问题都可以通过窗口函数来解决。窗口函数的主要特点是可以在不改变原始数据行数的情况下,为每一行提供一个基于窗口的计算结果。这与聚合函数不同,聚合函数会将多行数据聚合成一行。
2024-03-23 13:19:36 1125
翻译 软件架构模式概述
架构模式是我们设计应用程序的核心。虽然我们可能选择不同的模式,但通过识别和理解它们的共性,我们可以遵循一些基础原则,这些原则将为设计关键的业务应用程序提供坚实的基础。在我看来,理解这些规则帮助我创建出了可扩展、可测试的软件系统。
2024-02-21 20:39:35 76
原创 使用py-spy对python程序进行性能诊断学习
py-spy是一个强大的工具,它可以帮助Python开发者进行性能分析而不影响程序的正常运行。通过生成火焰图和提供实时的性能数据,py-spy使得性能优化变得更加直观和高效。
2024-01-28 17:10:10 1071
原创 Python异常处理TypeError: translation() got an unexpected keyword argument ‘codeset‘
学习安装好依赖后执行命令仅接着出现下列错误,主要提示是 「TypeError: translation() got an unexpected keyword argument ‘codeset’」
2024-01-01 17:08:31 1495
翻译 软件研发中技术主R的职责
在项目管理中,“项目主R"中的"R"通常是"Responsibility”(责任)的缩写,表示这个人在项目中担任主要责任。而"技术主R"一般指的是一次项目中技术侧实施负责人。技术主R并不一定要承担项目经理全部的职责,但要从项目管理的角度推进技术的落地。从技术负责人的视角看,项目管理可以被划分为四个阶段:需求阶段、设计阶段、开发阶段和上线阶段。作为负责人,就是确保项目生命周期中的每个阶段都被妥善处理。
2023-12-24 17:53:37 726
翻译 LangChain简介
这就是我们对LangChain的简单介绍——一个允许我们基于LLMs构建更高级应用程序的库,如OpenAI的GPT-3模型或通过Hugging Face提供的模型。
2023-12-17 21:06:05 502
原创 基于大语言模型的垂直领域知识问答系统流程学习
大模型能回答多数一般性问题,但在垂直领中,模型知识深度、准确度有限。为了解决该问题,我们可以利用向量数据库结合大模型和私有知识,构建垂直领域的智能服务。
2023-12-03 22:01:50 1622 2
翻译 Java中MapDB使用简介
在这篇文章中,我们深入研究了MapDB的嵌入式数据库引擎和集合框架。我们首先研究了核心类DB和DBMaker来配置、打开和管理我们的数据库。然后,我们通过一些例子来看MapDB提供的数据结构如何处理我们的记录。最后,我们看了MapDB相比传统数据库或Java集合的优势。
2023-11-26 21:43:54 1251
原创 数据可视化diff工具jsondiffpatch使用学习
数据迁移工程中diff是重要的一环,便于我们排查问题,提高迁移的质量。基于这个工具,我们可以实现可视化比较。当有定制化比较诉求是,通过扩展函数实现定制化功能,最终可以搭建起我们的diff工具服务。
2023-08-20 03:26:13 2810
原创 Spring Boot单元测试使用MockBean注解向Service注入Mock对象
MockBean注解是Spring Boot提供的一个注解,用于模拟依赖对象。它的作用是在Spring上下文中创建一个模拟对象,并将其注入到被测试对象中,以便进行单元测试。
2023-08-13 15:03:52 5614
翻译 使用h2database对java关系数据库访问逻辑进行测试
h2database是一个用Java编写的嵌入式关系型数据库管理系统,可以在内存中运行。h2database支持标准的SQL语法和JDBC API。高性能:采用了高效的算法和数据结构,具有出色的性能。轻量:的代码量非常小,可以很容易地嵌入到应用程序中,同时也支持多种部署方式。兼容性强:支持标准的SQL语法和JDBC API,同时也支持多种数据库的兼容模式。可靠性高:采用了事务机制和数据持久化技术,可以保证数据的一致性和可靠性。使用简介:提供了丰富的文档和示例,可以很容易地上手使用。
2023-08-06 21:36:30 244
翻译 linux服务器中部署java应用在jar包中搜索指定的文件及文件中的字符串
class文件是一个字节码文件,包含了类或接口的字节码定义。JavaRuntime(JAR)是一个基于ZIP格式的压缩归档文件,将Java字节码、源码、数据、元数据文件在一起,文件的扩展名是.jar。这样打包组织可以更方便部署、使用。定位问题通常要通过搜索来完成,先明确要搜索的对象,然后按部分完成不同部分搜索,最终定位问题。
2023-03-05 17:14:15 1873
翻译 linux通过端口号定位进程的几种方法
日常在linux 服务器上排查问题时,会有根据端口号找对应pid(进程id)的需求,最终通过定位pid来排查问题。本文将介绍如何在linux系统上通过监听端口号找到相关的进程。本文介绍了3个命令可以可以找出监听某个端口的进程id,日常排查网络连接数过多,分析来源可以通过这些命令帮助我们快速发现问题。
2023-02-28 22:57:03 13369
翻译 Java单元测试对私有方法测试
本文简要讲了为什么测试私有方法不是一个好的实践,其次演示了如果一定要测试私有方法,如何通过反射的方式进行测试。
2022-12-31 07:15:10 4443 2
翻译 MacOS下Chrome浏览器打开文件选择对话框快速切换路径的方法
当我们打开浏览器,选择打开文件对话框按钮,此时会弹出文件选择对话框这时要选择的文件可能藏的很深,经过很多次路径选择才能找到,十分繁琐。
2022-10-22 16:52:15 862
翻译 团队绩效沟通的注意事项
绩效沟通通常是在一个考核周期结束时,主管与下属共同参与分析下属在考核周期内的针对目标完成情况,分析亮点与不足,最终制定计划针对不足进行改进,帮助下属提高。
2022-08-27 19:48:44 346
翻译 Java单元测试对void方法的测试
日常系统单测开发都是通过对方法的返回值进行验证。而void方法没有返回值,这是我们可以对其行为进行验证。下面是几个常见的例子,被验证方法均是void方法。这时我们就可以通过mock并验证这组行为是否发生。在java项目中一般通过mockito来实现。......
2022-08-13 23:27:00 8346 1
翻译 团队协作常见问题分析与解决
尽管团队成员彼此信任,在冲突中进行争执,对所做的决定做出承诺,并且主动承担起相应的责任,但他们很可能会只从个人角度确定自己认为有利于团队的需求、日常工作及关注点。他们很可能只关注他们部门在团队中的位置、个人职业的发展,忽视了代表团队集体成功的结果,所以需要所有团队成员紧盯团队结果,为集体成功而努力。这是因为他们相信所有的意见和想法都已经拿到桌面上进行了考虑,也就说不存在任何芥蒂地对团队成员给与了信赖,这样当他们找不到更好的答案时,他们愿意拥护执行当前的决议,兑现对决议的承诺。......
2022-07-23 18:10:21 5162
翻译 性能衡量指标-吞吐量与响应时间
吞吐量(Throughput)吞吐量用来衡量系统总体性能。对于事务处理系统来说,吞吐量通常通过TPS(每秒事务数)或TPM(每分钟事务数)来衡量。 根据定义可以看到通过数量反应问题一个指标。吞吐量的高低通常与下列因素有关:机器配置参数软件处理任务的开销数据在磁盘上的分布软件系统或硬件系统的并行度被处理事务的类型吞吐量的衡量方式 :在应用程序代码中记录事物Ways to measure throughputThe best way to measure throughput for a
2022-05-08 15:00:37 2325
翻译 Java中职责链的泛化使用
ChannelInboundHandlerAdapter 与 ChannelOutboundHandlerAdapterif (packet instanceof LoginRequestPacket) {// …} else if (packet instanceof MessageRequestPacket) {// …} else if …public class LoginRequestHandler extends SimpleChannelInboundHandler {@Over
2022-04-30 23:14:25 240
翻译 通过Java学习与演示CQRS与事件溯源模式
1 简介本文将介绍CQRS与Event Sourcing设计模式的基本概念。我们首先分别学习两种模式,最后学习二者是如何结合使用。此外还有一些支持这些模式的框架,如Axon。但为了学习两种模式本文不会使用框架演示,而是编写一个简单的应用来理解基本概念。2 基本概念使用前先需要理解模式,通常这两个模式在企业应用中是结合在一起使用2.1 事件溯源(Event Sourcing)Event Sourcing 模式是将应用程序的状态以一系列事件的进行持久化,最终可以在任何时候查询这些状态并将应用恢复到任意
2022-03-31 23:39:08 1207
翻译 Java Hamcrest学习
1 概述在Java生态中,Hamcrest是一个用在单元测试中的框架。该框架与JUnit集成。Java中使用JUnit进行单元测试。JUnit提供了若干断言工具。 如assertEquals、assertTrue等。此外我们还可以通过扩展能力来增强assert*的表达。这时我们使用assertThatpublic static void assertThat(T actual,Matcher<? super T> matcher)通过指定不同的matcher,来判断actual对
2022-02-15 22:29:40 639
翻译 linux服务器java应用cpu load超过阈值常见问题分析与解决
1. 分析服务发布时间分析:在服务发布一段时间后,出现该问题,可以断定与服务发布相关。通过ps命令,可以看到一个进程的启动时间。如果启动时间与cpu load飙升时间点符合,或服务发布后的几分钟内产生,可以判断是新服务启动导致。ps -ef | grep [pid]解决:分析新上线代码,进行处理2. 排查系统进程数分析:根据负载的定义,可以排查是否是系统进程数量过多导致。这是我们会用到vmstat命令。vmstat 1 10 # 每一秒显示一次,显示10次输出的指标可分为6类[1]
2021-11-21 11:53:50 751
翻译 Java 线程池拒绝策略
0 前置依赖本例中会依赖assertj-core完成单测,maven依赖如下: <!-- https://mvnrepository.com/artifact/org.assertj/assertj-core --> <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> &l
2021-10-30 20:13:32 1101
翻译 Idea中单测JunitTest环境运行Maven spring项目profile环境选择
1 背景Idea单测4.xSpring项目常见一种写法如下@RunWithapplicationContextAbstractTransactionalJUnit4SpringContextTests@RunWith(SpringJUnit4ClassRunner.class)@Rollback(false)@ContextConfiguration(locations = {"classpath:/applicationContext.xml"})public abstract cla
2021-09-19 19:38:00 1524
FASTJSON那些事.pptx
2019-09-22
WxWidget教程
2015-09-13
软件项目管理的九阴真经
2013-10-04
《Visual C++音频/视频技术开发与实战》前9章源码
2013-05-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人