Apache Calcite
NobiGo
这个作者很懒,什么都没留下…
展开
-
MySql、PostGreSql中关于Char和VarChar的设定
MySqlcreate tablecreate table table_char_test(charColumn char(3) null,varCharColumn varchar(3) null);insert into calcite.table_char_test values ('a','a');insert into calcite.table_char_test values ('ab','ab');insert into calcite.table_char_原创 2021-11-25 21:58:06 · 970 阅读 · 0 评论 -
Apache Calcite——Custom traits
由于Apache Calcite的功能复杂,很多专业词汇不好理解,因此将找到的一系列YYDS的博客分享给大家,文章结束会附上转载地址,仅限大家互相学习,支持原创,多多交流。https://www.querifylabs.com/blog/custom-traits-in-apache-calcitehttps://www.querifylabs.com/author/vladimir-ozerov...转载 2021-08-13 15:47:59 · 338 阅读 · 0 评论 -
Apache Calcite-添加聚合函数(MODE Aggregation Function)
由于在Apache Calcite社区贡献了聚合函数的PR且被合入,这篇博客主要记录一下聚合函数的实现过程以及注意事项。添加聚合函数步骤在Parser.jj添加关键字(这个可以根据实际情况添加,由于当前MODE函数只在PostGresql中实现,因此在合入时候没有将MODE添加为关键字)新增函数解析在SqlKind新增Aggregation Function函数MODE在SqlStdOperatorTable(中保存了SqlOperator和SqlFunction)中新增MODE函数定义原创 2021-08-12 15:10:52 · 826 阅读 · 0 评论 -
Apache Calcite-NOT IN Sql 等价转换记录
在使用Apache Calcite的过程中发现Calcite的NOT IN子查询在包含NULL值时不能返回正确的值,在查看select 'T' not in ('S', NULL);这条Sql的执行计划后,发现会将当前语句解析为left join的形式,因此就在思考是不是在转化过程中丢失了什么条件问题。由于需要找到和NOT IN等价的JOIN Sql语句,因此需要从各个方面验证这个语句的正确性。语句1SELECT * FROM orders WHERE order_id NOT IN(SELECT原创 2021-07-14 14:59:00 · 365 阅读 · 0 评论 -
Apache Calcite——PostgreSql 数据准备
由于在学习Apache Calcite的过程中,需要用到PostgreSql,会涉及测试一些方法以及函数的作用,因此将创建数据的语句在这里进行记录。CREATE TABLEIF NOT EXISTS dept ( -- 部门编号 deptno serial PRIMARY KEY, -- 部门名称 dname VARCHAR (15), -- 部门所在位置 loc VARCHAR (50));CREATE TABLEIF NOT EXISTS em原创 2021-06-30 10:08:56 · 861 阅读 · 1 评论 -
Apache Calcite——Grouping Sets 子句
目的这个文章主要用来记录在Sql中Grouping Sets 子句的作用,之前在工作中没有接触到这部分内容。这里涉及的表使用上篇文章中的雇员表(EMP)。概要grouping sets子句允许你指定多个group by 选项。增强了group by 的功能。可以通过一条select 语句实现复杂繁琐的多条select 语句的查询。并且更加的高效,解析存储一条SQL于语句。过程下面通过使用 grouping sets 子句与没有使用grouping sets 子句来对比学习该子句。查询每个部门的每原创 2021-06-30 11:01:34 · 291 阅读 · 2 评论 -
PostgreSql-详解Ordered-Set Aggregate Functions
主要解释一下percentile_cont的计算方法:数据准备创建表:create table test( id integer, info text);alter table test owner to postgres;插入数据:INSERT INTO public.test (id, info) VALUES (1, 'test1');INSERT INTO public.test (id, info) VALUES (2, 'test2');INS原创 2021-06-23 10:30:58 · 450 阅读 · 0 评论 -
Apache Calcite——新增动态UDF支持
简介通过Apache Calcite支持UDF有两种方式:动态支持:直接通过执行时候将UDF的函数名以及类名传进去,这种方式解析的时候可以在schema中获取到UDF的信息,进而通过Sql校验(这次主要描述这种用法的使用过程以及注意事项)。静态支持:类似Sql中已有的sum、abs等内置函数,通过侵入式的方式将函数添加到其中。使用过程这里以JdbcExample为准,介绍整体的使用方式。加在特定的Schema中为特定的Schema添加UDF支持,调用时统一使用"schemaName".u原创 2021-06-16 13:45:29 · 2108 阅读 · 6 评论 -
Apache Calcite——新增DDL语法支持
在日常需求中,需要Calcite中添加对DDL语法的支持,这里记录一下调研过程以及实施结果。parser.jj、parserImpls.ftl和config.fmpp其中core模块中的parser.jj中定义了支持的语法模板,core模块中的parserImpls.ftl为空,在Server模块中的parserImpls.ftl中定义了具体的DDL语法,作为对core模块中的parserr.jj的补充,即如果采用serser模块中编译生成的SqlDdlParserImpl,是可以解析dql与ddl的,原创 2021-06-10 14:58:29 · 1915 阅读 · 3 评论 -
Gradle 仓库地址配置信息
记录一下Gradle仓库地址: repositories { maven { isAllowInsecureProtocol = true url = uri("https://maven.aliyun.com/repository/public/") } maven { isAllowInsecureProtocol = true url = uri("h原创 2021-06-08 15:52:32 · 1369 阅读 · 0 评论 -
Apache Calcite如何Debug查看学习代码
Apache Calcite刚接触Apache Calcite时(Version 1.26),各种变量比较复杂,上手门槛较高,那么如何直接通过命令行能快速Debug Apache Calcite呢?编译这里不过多叙述,有问题欢迎大家交流。Debug步骤准备工作将example/csv/sqlline文件中的最后一行更改为:exec java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Xmx1g $原创 2021-04-20 14:19:40 · 696 阅读 · 0 评论 -
Apache Calcite 实现方言转换
定义Calcite能够通过解析Sql为SqlNode,再将SqlNode转化为特定数据库的方言的形式实现Sql的统一。实现在Calcite中实现方言转换的主要类是SqlDialect基类,其具体的变量含义如下:public class SqlDialect {BUILT_IN_OPERATORS_LIST: 支持的内置定义函数或者运算符(例如:abs and..)// 列 表的标识符String identifierQuoteString: 标识符的开始符号String ident原创 2021-04-20 13:53:26 · 2792 阅读 · 3 评论