[ 
https://issues.apache.org/jira/browse/CALCITE-5365?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18128786#comment-18128786
 ] 

Arnaud Jegou edited comment on CALCITE-5365 at 10/19/26 2:26 PM:
-----------------------------------------------------------------

_edit: reframed_

Splitting the condition makes sense to me. Part of the blowup comes from 
something else though: above a union, lineage combines fields from different 
inputs of the same union, which can never happen (CALCITE-7869). Here only 3 x 
3 = 9 of the 3^14 combinations are valid. Fixing that keeps the result small in 
most cases, and splitting still helps on top of it when the conjuncts relate 
different unions. A limit still makes sense as a safeguard for plans that 
really have many valid combinations.

note: the query in the description uses left joins, and {{getAllPredicates}} 
returns null for an outer join, so as written it does not reach 
{{{}createAllPossibleExpressions{}}}. It does with inner joins and 
{{getAllPredicates}} does build the 3^14 combinations


was (Author: JIRAUSER310786):
_edit: reframed_

Splitting the condition makes sense to me. Part of the blowup comes from 
something else though: above a union, lineage combines fields from different 
union inputs, which can never happen (CALCITE-7869). Here only 3 x 3 = 9 of the 
3^14 combinations are valid. Fixing that keeps the result small in most cases, 
and splitting still helps on top of it when the conjuncts relate different 
unions. A limit still makes sense as a safeguard for plans that really have 
many valid combinations.

note: the query in the description uses left joins, and {{getAllPredicates}} 
returns null for an outer join, so as written it does not reach 
{{createAllPossibleExpressions}}. It does with inner joins and 
{{getAllPredicates}} does build the 3^14 combinations



> RelMdExpressionLineage#createAllPossibleExpressions  will create many RexCall 
> lead to OOM 
> ------------------------------------------------------------------------------------------
>
>                 Key: CALCITE-5365
>                 URL: https://issues.apache.org/jira/browse/CALCITE-5365
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.30.0
>            Reporter: hqbhoho
>            Priority: Major
>
> Execute query like:
> {code:java}
> select
> *
> from
> (
> select *
> from
> (
> select * from A1
> )
> union all
> (
> select * from A2
> )
> union all
> (
> select * from A3
> )
> ) t1
> left join
> (
> select *
> from
> (
> select * from B1
> )
> union all
> (
> select * from B2
> )
> union all
> (
> select * from B3
> )
> )t2
> on t1.a1 = t2.b1
> and t1.a2 = t2.b2
> and t1.a3 = t2.b3
> and t1.a4 = t2.b4
> and t1.a5 = t2.b5
> and t1.a6 = t2.b6
> and t1.a7 = t2.b7
> left join C1 name
> on t2.b8=name.c1 {code}
> I will get all Predicates via RelMetadataQuery.getAllPredicates(),but will 
> occur oom. 
> RelMdExpressionLineage#createAllPossibleExpressions will retrun 3^14 RexCall 
> when t1 join t2 with 7 condition? (t1.a1 will have 3 replacement)



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

Reply via email to