Navis created HIVE-3411:
---------------------------
Summary: Filter predicates on outer join overlapped on single
alias is not handled properly
Key: HIVE-3411
URL: https://issues.apache.org/jira/browse/HIVE-3411
Project: Hive
Issue Type: Sub-task
Components: Query Processor
Affects Versions: 0.10.0
Environment: ubuntu 10.10
Reporter: Navis
Assignee: Navis
Priority: Minor
Currently, join predicates on outer join are evaluated in join operator (or
HashSink for MapJoin) and the result value is tagged to end of each values(as a
boolean), which is used for joining values. But when predicates are overlapped
on single alias, all the predicates are evaluated with AND conjunction, which
makes invalid result.
For example with table a with values,
{noformat}
100 40
100 50
100 60
{noformat}
Query below has overlapped predicates on alias b, which is making all the
values on b are tagged with true(filtered)
{noformat}
select * from a right outer join a b on (a.key=b.key AND a.value=50 AND
b.value=50) left outer join a c on (b.key=c.key AND b.value=60 AND c.value=60);
NULL NULL 100 40 NULL NULL
NULL NULL 100 50 NULL NULL
NULL NULL 100 60 NULL NULL
-- Join predicate
Join Operator
condition map:
Right Outer Join0 to 1
Left Outer Join1 to 2
condition expressions:
0 {VALUE._col0} {VALUE._col1}
1 {VALUE._col0} {VALUE._col1}
2 {VALUE._col0} {VALUE._col1}
filter predicates:
0
1 {(VALUE._col1 = 50)} {(VALUE._col1 = 60)}
2
{noformat}
but this should be
{noformat}
NULL NULL 100 40 NULL NULL
100 50 100 50 NULL NULL
NULL NULL 100 60 100 60
{noformat}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira