Mihai Budiu created CALCITE-7608:
------------------------------------

             Summary: Introduce a LogicalSelectMany operator
                 Key: CALCITE-7608
                 URL: https://issues.apache.org/jira/browse/CALCITE-7608
             Project: Calcite
          Issue Type: Improvement
          Components: core
    Affects Versions: 1.42.0
            Reporter: Mihai Budiu
            Assignee: Mihai Budiu


Today UNNEST is implemented using the Uncollect operator. We propose adding an 
alternative LogicalSelectMany operator, which generalizes Uncollect. (Notice 
that Enumerable API already has a SelectMany.) The main difference between 
Uncollect and SelectMany is that Uncollect unnests all the fields of its input 
relation, whereas LogicalSelectMany would only unnest SOME of the fields of the 
input collection, preserving the other ones in each output row.

This distinction is very important, because:
 * LogicalSelectMany can be directly and efficiently implemented using the 
Enumerable SelectMany
 * UNNEST used in a cross-join is implemented using an Uncollect and a 
LogicalCorrelate. However, the same UNNEST can be represented using just one 
LogicalSelectMany node
 * Neither the old nor the new decorrelator can actually eliminate 
LogicalCorrelate nodes that are paired with Uncollect. Using LogicalSelectMany 
we can decorrelate many more plans.



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

Reply via email to