Apache Calcite
junwen12221
编程语言爱好者,在信息安全领域,数据库领域有一定研究,qq:294712221
展开
-
[Mycat2]分库分表中间件Join下推规则
Join下推author:chenjunwenqq:294712221This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.单表与单表只涉及单表与单表之间的join,只要它们的存储节点相同,就可以下推任意表与全局表涉及任意表与全局表之间的left/inner join都可以下推相同数据分布关系(ER关系)涉及分片表之间的分片算法的数据分布原创 2021-11-17 13:19:25 · 674 阅读 · 1 评论 -
[Apache Calcite]org.apache.calcite.plan.volcano.RelSubset cannot be cast to
public Calc copy(RelTraitSet traitSet, RelNode child, RexProgram program)实现该方法没有使用参数的值导致的错误原创 2021-02-07 01:57:10 · 240 阅读 · 0 评论 -
Enumerator#reset调用图
org.apache.calcite.linq4j.CartesianProductEnumerator#reset调用图org.apache.calcite.linq4j.CartesianProductEnumerator子类:org.apache.calcite.runtime.SqlFunctions.ProductComparableListEnumeratororg.apache.calcite.runtime.SqlFunctions#product...原创 2021-01-26 14:02:42 · 116 阅读 · 0 评论 -
基于Calcite制作分库分表中间件(方案3)
上次提到模版结合新自定义关系表达式来实现有效的sql生成,那么我们可不可以像方案1中直接使用Calcite现成的(蛛丝马迹)功能实现,或者说加以强化.答案是有的方法有三种表函数法org.apache.calcite.rel.core.TableFunctionScan实际上分库分表的逻辑表可以表述为形式1:分片函数_表名(单分片值),分片函数_表名(范围分片值)形式2:分片函数(表名,分片值),分片函数(表名,范围分片值)而分片分表的谓词分析就是为了提取分片值..原创 2021-01-21 19:59:36 · 505 阅读 · 1 评论 -
基于Calcite制作分库分表中间件(功能场景)
使用Calcite制作分库分表中间件,在实现功能的过程中,存在着几种用途,总得来说,有三种.1.仅分析或简单执行例子1观察此SQLUPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' Calcite会把它编译成类似下面的关系表达式LogicalTableModify LogicalFilter LogicalProject LogicalTableScan.原创 2020-12-23 22:46:07 · 536 阅读 · 2 评论 -
基于Calcite制作分库分表中间件(方案2)
作为分库分表中间件,分片条件应用分区剪裁规则,减少扫描范围是必须做的优化.在方案1中,使用了一次下推,一次关系表达式重写,一次上拉,在然后生成分片执行的SQL,然后使用CBO生成执行器.在生成SQL的代码里,仅仅是使用分片信息作为区分在中间件中运算的部分与在存储数据库中运行的部分是不足够的.我们还要考虑以下因素,生成的SQL能否在数据库中运行,关系表达式以及他们的组合是否能变成SQL,生成的SQL在数据库中执行高效.所以我们需要进一步定制规则来优化.新的关系表达式重写器我们不妨制作.原创 2020-12-22 23:50:59 · 309 阅读 · 0 评论 -
基于Calcite制作分库分表中间件(方案1)
基于Calcite制作分库分表中间件(方案1)RBO第一阶段-下推分片条件谓词使用下推LogicalFilter的规则与org.apache.calcite.rel.rules.FilterTableScanRuleorg.apache.calcite.rel.rules.ProjectTableScanRule规则把Filter下沉到LogicTableScan之上FilterTableScanRule和ProjectTableScanRule会把Table转化成..原创 2020-12-21 19:55:01 · 483 阅读 · 1 评论 -
[Apache Calcite] 添加calcite类型转换规则
org.apache.calcite.sql.type.SqlTypeAssignmentRule 添加TIME TO INTERVAL_TYPES 与INTERVAL_TYPES TO TIME //TIME TO INTERVAL_TYPES rule.clear(); rule.addAll(SqlTypeName.INTERVAL_TYPES); rules.add(SqlTypeName.TIME, rule); rules.add(SqlTyp...原创 2020-09-29 18:22:39 · 611 阅读 · 0 评论 -
[Apache Calcite] 允许使用未定义的sql函数
org.apache.calcite.sql.validate.SqlValidator.Config#withLenientOperatorLookup设置为true SqlValidator.Config.DEFAULT.withSqlConformance(calciteConnectionConfig.conformance()) .withTypeCoercionEnabled(true).withLenientOperatorLookup(...原创 2020-08-20 15:16:22 · 414 阅读 · 0 评论 -
[Apache Calcite] 名字唯一性
org.apache.calcite.prepare.RelOptTableImpl#create(org.apache.calcite.plan.RelOptSchema, org.apache.calcite.rel.type.RelDataType, org.apache.calcite.schema.Table, com.google.common.collect.ImmutableList<java.lang.String>)其中ImmutableList<St...原创 2020-06-15 09:43:25 · 212 阅读 · 0 评论 -
[Apache Calcite] 更改生成的字段名
实现org.apache.calcite.sql.validate.SqlValidatorUtil.Suggester原创 2020-06-08 21:08:42 · 532 阅读 · 1 评论 -
[Apache Calcite]BindableConvention 与EnumerableConvention的不同
BindableConvention 允许运行用户自己实现执行器EnumerableConvention则是ling4j的实现calcite转换过程的实现是先变成EnumerableConvention然后变成BindableConventionBindableConvention 的原始设计目标是解释器执行EnumerableConvention的设计目标是代码生成执行但是后来BindableConvention弃用解释器执行也变成Enumerabl...原创 2020-06-08 10:09:38 · 448 阅读 · 0 评论 -
CalciteContextException: At line 0, column 0: No match found for function signature LOCALTIMESTAMP()
Exception in thread "main" java.sql.SQLException: HY000 org.apache.calcite.runtime.CalciteContextException: At line 0, column 0: No match found for function signature LOCALTIMESTAMP() at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native M...原创 2020-06-06 23:52:51 · 3469 阅读 · 3 评论 -
[Aapache Calcite]转换in表达式
org.apache.calcite.sql2rel.SqlToRelConverter#substituteSubQuery /** Returns the {@code inSubQueryThreshold} option, * default {@link #DEFAULT_IN_SUB_QUERY_THRESHOLD}. Controls the list...原创 2020-05-20 09:46:49 · 369 阅读 · 0 评论 -
[Apache Calcite]reduce avg AggregateReduceFunctionsRule
org.apache.calcite.rel.rules.AggregateReduceFunctionsRule** <li>AVG(x) → SUM(x) / COUNT(x)** <li>STDDEV_POP(x) → SQRT(* (SUM(x * x) - SUM(x) * SUM(x) / COUNT(x)...原创 2020-03-16 22:42:04 · 154 阅读 · 0 评论 -
[Apache Calcite] org.apache.calcite.adapter.elasticsearch 拿到生成的es运行json
org.apache.calcite.adapter.elasticsearch.ElasticsearchRel.Implementor收集生成的字符串该字符串是遍历关系表达式生成的,关系表达式树就是运行的中间语言Implementor 实现翻译...原创 2020-03-13 20:37:08 · 537 阅读 · 0 评论 -
[Apache Calcite]Got a sink null to which there is no match source type!
节点的字段和类型对不上原创 2020-03-05 16:04:45 · 115 阅读 · 0 评论 -
[Apache Calcite] ModifiableView关键实现
/** Wraps a relational expression in the projects and filters implied by * a {@link ModifiableView}. * * <p>The input relational expression is suitable for inserting into the ...原创 2020-03-16 21:32:15 · 190 阅读 · 0 评论 -
[Apache Calcite]创建SchemaPlus
创建SchemaPlus SchemaPlus plus = CalciteSchema.createRootSchema(true).plus();从SchemaPlus 创建CalciteSchemaCalciteSchema from = CalciteSchema.from(plus);原创 2020-02-08 15:37:18 · 441 阅读 · 0 评论 -
[Apache Calcite]创建RelDataType
JavaTypeFactoryImpl javaTypeFactory = new JavaTypeFactoryImpl(); RelDataType structType = javaTypeFactory.createStructType(Double.class);原创 2020-02-07 16:32:12 · 476 阅读 · 0 评论 -
[Apache Calcite] 添加自定义运算符
/** "MYAGG" user-defined aggregate function. This agg function accept two numeric arguments * in order to reproduce the throws of CALCITE-2744. */ public static class MyAvgAggFunction ...原创 2020-02-07 16:09:14 · 1042 阅读 · 0 评论 -
[Apache Calcite] 把非Logical关系表达式还原成Logical关系表达式
org.apache.calcite.rel.logical.ToLogicalConverter RelNode fixLogic = new ToLogicalConverter(RelBuilder.create(config)) { @Override public RelNode visit(RelNode relNo...原创 2020-02-07 15:43:26 · 342 阅读 · 0 评论 -
[Apache Calcite] 创建RelOptSchema
RelOptSchema在Calcite里面是通过CatalogReader表达 final JavaTypeFactory typeFactory = prepareContext.getTypeFactory(); final CalciteSchema schema = config.getDefaultSchema() != null ...原创 2020-02-06 15:39:53 · 247 阅读 · 0 评论 -
Apache Calcite创建CalciteSchema
org.apache.calcite.tools.Frameworks#createRootSchemaorg.apache.calcite.jdbc.CalciteSchema#createRootSchema(boolean, boolean, java.lang.String)org.apache.calcite.jdbc.CalciteSchema#crea...原创 2020-02-06 15:30:32 · 675 阅读 · 0 评论 -
大小写无关的字符串为键的map
org.apache.calcite.util.NameMap使用TreeMap的键比较器比较,使用floorKey和ceilingKey忽略大小写 /** Returns a map containing all the entries in the map that match the given * name. If case-sensitive, that ma...原创 2020-02-06 15:18:21 · 175 阅读 · 0 评论 -
Apache Calcite创建RelOptTable
org.apache.calcite.prepare.RelOptTableImpl#create(org.apache.calcite.plan.RelOptSchema, org.apache.calcite.rel.type.RelDataType, java.util.List<java.lang.String>, org.apache.calcite.linq4j.t...原创 2020-02-06 15:06:03 · 409 阅读 · 0 评论 -
Apache Calcite 创建RelBuilder 方式2
RelBuilderFactory proto = RelBuilder.proto(Contexts.of(RelFactories.LOGICAL_BUILDER)); proto.create()原创 2020-02-06 14:59:00 · 380 阅读 · 0 评论 -
Apache Calcite 创建RelOptTable.ToRelContext
ViewExpanders.simpleContext(cluster)org.apache.calcite.plan.ViewExpanders#toRelContext原创 2020-02-06 14:27:57 · 236 阅读 · 0 评论 -
[翻译]Implementing Data Cubes Efficiently摘要简介翻译
https://web.eecs.umich.edu/~jag/eecs584/papers/implementing_data_cube.pdf摘要决策支持应用程序涉及到非常大的数据库上的复杂查询。由于响应时间应该很小,因此查询优化至关重要。用户通常将数据视为多维数据多维数据集。数据多维数据集的每个单元格都是关注汇总(例如总销售额)的视图。这些单元格中的许多单元格的值取决于数据多...原创 2020-02-05 16:44:15 · 408 阅读 · 0 评论 -
is not allowed under the current SQL conformance level
final static SqlParser.Config SQL_PARSER_CONFIG = SqlParser.configBuilder().setLex(Lex.MYSQL) .setConformance(SqlConformanceEnum.MYSQL_5) .setCaseSensitive(false).build(...原创 2020-01-27 23:49:44 · 2099 阅读 · 0 评论 -
Apache Calcite 使用org.apache.calcite.plan.RelOptRule
1.继承与单例public class PushDownFilter extends RelOptRule { public PushDownFilter(RelOptRuleOperand operand, String description) { super(operand, "XXXXX:" + description); } // o...原创 2020-01-21 13:20:25 · 1209 阅读 · 0 评论 -
Apache Calcite 把Bindables.BindableTableScan转换为LogicalTableScan,LogicalFilter,LogicalProject
RelOptTable dataNodes = relOptSchema.getTableForMember(Arrays.asList(MetadataManager.DATA_NODES, uniqueName)); RelNode logicalTableScan = LogicalTableScan.create(cluster, dataNodes...原创 2020-01-17 23:11:14 · 419 阅读 · 0 评论 -
Apache Calcite 创建 SchemaPlus
org.apache.calcite.schema.SchemaPlus SchemaPlus rootSchema = Frameworks.createRootSchema(false);原创 2020-01-17 15:39:27 · 537 阅读 · 0 评论 -
Apache Calcite 根据RelNode生成java.sql.ResultSetMetaData
每个字段的类是org.apache.calcite.avatica.ColumnMetaData#ColumnMetaData生成的代码是org.apache.calcite.prepare.CalcitePrepareImpl#metaData原创 2020-01-17 10:44:13 · 849 阅读 · 0 评论 -
Apache Calcite 设置sql解析中上下文默认schema
SchemaPlus defaultSchemaPLus = connection.getRootSchema().getSubSchema(defaultSchema); final FrameworkConfig config = Frameworks.newConfigBuilder().defaultSchema(...原创 2020-01-17 09:57:22 · 658 阅读 · 9 评论 -
Apache Calcite 设置schema
org.apache.calcite.prepare.CalciteCatalogReader public CalciteCatalogReader(CalciteSchema rootSchema, List<String> defaultSchema, RelDataTypeFactory typeFactory, CalciteConnectionConf...原创 2020-01-17 01:11:10 · 613 阅读 · 0 评论 -
Apache Calcite org.apache.calcite.schema.Table#isRolledUp 已汇总列
io.mycat.calcite.JdbcTable#isRolledUp是否列已经汇总io.mycat.calcite.JdbcTable#rolledUpColumnValidInsideAgg确定给定的聚集调用有效上述两个函数默认为false当isRolledUp总是返回false,则rolledUpColumnValidInsideAgg永远都不会被调用...原创 2020-01-16 11:35:01 · 141 阅读 · 0 评论 -
Apache Calcite 解决java.sql.SQLException: No suitable driver found for jdbc:calcite:
本质上是因为驱动没有注册,所以触发驱动注册即可org.apache.calcite.jdbc.Driver#Driver/** * Calcite JDBC driver. */public class Driver extends UnregisteredDriver { public static final String CONNECT_STRING_PREFIX = "...原创 2020-01-10 16:06:36 · 898 阅读 · 0 评论 -
Apache Calcite的设置当前sql默认的scheam(database)
CalciteConnection connection = CalciteEnvironment.INSTANCE.getConnection(MetadataManager.INSTANCE); String schema = client.getDefaultSchema(); connection....原创 2020-01-06 12:22:05 · 284 阅读 · 1 评论 -
Apache Calcite的属性设置,例如解决编码问题
在项目的资源文件新建一个saffron.properties文件内容为calcite.default.charset = utf8然后在org.apache.calcite.config.CalciteSystemProperty#loadProperties函数打断点查看是否加载该配置文件即可...原创 2020-01-06 12:10:00 · 1920 阅读 · 7 评论