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