Paul Rogers created IMPALA-8038:
-----------------------------------

             Summary: Incorrect estimation of selectivity of OR expression
                 Key: IMPALA-8038
                 URL: https://issues.apache.org/jira/browse/IMPALA-8038
             Project: IMPALA
          Issue Type: Bug
          Components: Frontend
    Affects Versions: Impala 3.1.0
            Reporter: Paul Rogers
            Assignee: Paul Rogers


Suppose we have a query in which we include an OR expression:

{code:sql}
select *
from functional.alltypestiny t
where t.id = 10
   or t.bool_col = true
{code}

We can compute the join cardinality, {{|join|}} by observing that:

* Either id will match,
* Or, month will match,
* Or, both will match.

The number of matches is given as {{NDV(col)/|T|}}, and:

* {{|T| = 8}}
* {{NDV(id) = |T| = 8}}
* {{NDV(bool_col) = 2}}
* {{|T 𝜎 id=10| = |T|/NDV(id) = 1}}
* {{|T 𝜎 bool_col=true| = |T|/NDV(bool_col) = 4}}

So, if one or the other (or both) columns match, this means that we get either 
1 row or 4 rows. So, the estimated cardinality should be the maximum of the two 
terms:

{noformat}
|bool_col| = NDV(bool_col)
|id| = NDV(id)

|join| = max( |T|/|id|, |T|/|bool_col| )
         = max(1, 4)
         = 4
{noformat}

Let's see what we actually get:

{noformat}
PLAN-ROOT SINK
|  mem-estimate=0B mem-reservation=0B thread-reservation=0
|
00:SCAN HDFS [functional.alltypestiny t]
   partitions=4/4 files=4 size=460B
   predicates: t.id = CAST(10 AS INT) OR t.bool_col = TRUE
   tuple-ids=0 row-size=89B cardinality=5
{noformat}

So, looks like the code uses {{|id| + |bool_col|}}, not the correct {{max( 
|id|, |bool_col| )}}.

While the error here is small, it can be larger in other cases. Bad errors lead 
to bad join estimation, leading to bad joins, leading to poor performance, 
leading to unhappy users.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to