[ 
https://issues.apache.org/jira/browse/CALCITE-6914?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Silun Dong updated CALCITE-6914:
--------------------------------
    Summary: Expand predicates from disjunction for a single table  (was: 
Expand join-dependent predicates from disjuction)

> Expand predicates from disjunction for a single table
> -----------------------------------------------------
>
>                 Key: CALCITE-6914
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6914
>             Project: Calcite
>          Issue Type: New Feature
>          Components: core
>    Affects Versions: 1.39.0
>            Reporter: Silun Dong
>            Assignee: Silun Dong
>            Priority: Major
>              Labels: pull-request-available
>
> For the following SQL:
> {code:java}
> select t1.name from t1, t2 
> where t1.id = t2.id 
> and ( 
>  (t1.id > 20 and t2.height < 50)  
>   or 
>  (t1.weight < 200 and t2.sales > 100) 
> ) {code}
> The disjuction {{(t1.id > 20 and t2.height < 50) or (t1.weight < 200 and 
> t2.sales > 100)}} uses t1 and t2, thus cannot be pushed below the join. 
> In fact, we can extract redundant {{(t1.id > 20 or t1.weight < 200)}} , 
> {{(t2.height < 50 or t2.sales > 100)}} from this predicate by a new rule and 
> push down these two predicates to both side of Join input. The paper 
> ??Quantifying TPC-H choke points and their optimizations?? describes this 
> optimization in 4.4 section.
>  
> Some notes: 
>  # The expanded redundant predicates can be pushed down, but the original 
> disjunction cannot be removed.
>  # This rule should only be applied once to avoid generate same redundant 
> expression.
>  # This rule should be used before {{FilterJoinRule}} and it seems to resolve 
> the TODO in {{{}FilterJoinRule{}}}.



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

Reply via email to