优化规则

一只努力的微服务10 天前
大数据·数据库·calcite·优化规则
【Calcite 系列】深入理解 Calcite 的 AggregateValuesRuleAggregateValuesRule 处理的是 Aggregate 压在 Values 之上的极端小输入场景,尤其是空 Values 和“纯去重 aggregate”这两类情况。它不会试图通用执行所有聚合,而是专注做一些完全可以在优化阶段直接折叠的改写。本文结合源码实现,分析这条规则如何在空输入上直接构造聚合结果,以及它是怎样把 Aggregate(Values) 规约成去重后的 Values 的。
一只努力的微服务11 天前
大数据·数据库·calcite·优化规则
【Calcite 系列】深入理解 Calcite 的 AggregateUnionTransposeRuleAggregateUnionTransposeRule 会把 Aggregate 下推到 UNION ALL 的每个输入之上,再在 union 顶部加一层汇总聚合把子结果合并回来。这和 AggregateJoinTransposeRule 的思路类似,都是先在分支内部做局部汇总,再做顶层合并。本文结合源码实现,分析它为什么只支持 UNION ALL、只支持一组明确列出的聚合函数,以及它为什么要特别关心各个 union 输入的列空值性差异。
一只努力的微服务17 天前
大数据·数据库·calcite·优化规则
【Calcite 系列】深入理解 Calcite 的 AggregateFilterTransposeRuleAggregateFilterTransposeRule 会把 Aggregate(Filter(input)) 改写成 Filter(Aggregate(input)),也就是把聚合下推到过滤之前。听起来这不像常规的“提早过滤”优化,但这条规则的目的本来就不是减少输入行数,而是让计划形态更适合物化视图匹配和某些高代价谓词场景。本文结合源码实现,分析它何时可以直接转置,何时必须拆成上下两层聚合,以及它为什么明确拒绝 distinct 和不可 rollup 的聚合函数。
一只努力的微服务20 天前
大数据·数据库·calcite·优化规则
【Calcite 系列】深入理解 Calcite 的 IntersectToSemiJoinRule本文围绕 IntersectToSemiJoinRule 的源码实现,介绍 Calcite 如何把 INTERSECT 操作改写成一系列 SEMI JOIN,从而让优化器能利用 Join 相关的优化手段(哈希连接、索引等)来执行交集语义。
一只努力的微服务20 天前
大数据·数据库·calcite·优化规则
【Calcite 系列】深入理解 Calcite 的 SetOpToFilterRule本文围绕 SetOpToFilterRule 的源码实现,介绍 Calcite 如何把多个来自同一数据源、仅谓词不同的 UNION / INTERSECT / MINUS 分支,改写成单个数据源加复合过滤条件的等价形式,从而消除重复表扫描、增强谓词下推能力。
一只努力的微服务23 天前
calcite·优化规则
【Calcite 系列】深入理解 Calcite 的 JoinExpandOrToUnionRule本文围绕 JoinExpandOrToUnionRule 的源码实现,介绍 Calcite 如何把带 OR 条件的 Join 改写成多个更容易优化的 Join 分支,并通过 UNION ALL、ANTI JOIN 和补 NULL 的方式保持语义等价。
我是有底线的