Stamatis Zampetakis created CALCITE-7111:
--------------------------------------------

             Summary: Add an API for finding common relational sub-expressions
                 Key: CALCITE-7111
                 URL: https://issues.apache.org/jira/browse/CALCITE-7111
             Project: Calcite
          Issue Type: Improvement
          Components: core
            Reporter: Stamatis Zampetakis
            Assignee: Stamatis Zampetakis


There have been various tickets (CALCITE-5631) and 
[discussions|https://lists.apache.org/thread/oj7kzz39n4jn0jj7vgflzwl5xr65s3h5] 
touching the problem of optimizing queries with common sub-expressions. A 
recurrent need is given a query/plan/RelNode to identify common sub-expressions 
and for that purpose multiple algorithms can be developed with different 
trade-offs. Someone may opt to implement a complex algorithm from a research 
paper based on integer linear programming (ILP) while another one may simply go 
for a structure based traversal.

The goal of this ticket is to introduce a simple interface that given a RelNode 
finds/detects/suggests common sub-expressions.
{code:java}
 
@API(since = "1.41.0", status = API.Status.EXPERIMENTAL)
public interface RelCommonExpressionSuggester {
  Collection<RelNode> suggest(RelNode input, Context context);
}
{code}
The interface and its Javadoc will go along with a simple implementation 
detecting exact matches and some tests.

The main motivation behind this proposal comes from Apache Hive and Apache 
Impala that aim to exploit common sub-expressions during planning. Instead of 
crafting separate interfaces for each project or copy-pasting code around it is 
natural to have the basic interfaces in calcite-core. Moreover, this proposal 
allows closed source implementations of the interface to be used in each 
project without ending up with contrived cyclic dependencies.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to