[
https://issues.apache.org/jira/browse/HIVE-16113?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16003300#comment-16003300
]
Remus Rusanu commented on HIVE-16113:
-------------------------------------
I don't think we should handle OR in removeNonPartCols, leaving it as NULL to
bubble behaves correctly. I made that change and tested it, all good.
But the NVL/COALESCE/CASE is trickier. I can write a filter like
{code}
where colpart=1 or col < 5
{code}
and works correct, but wrap it in an NVL:
{code}
where NVL(colpart=1 or col < 5, false)
{code}
and the result is no longer correct because the NULL is being replaced with
FALSE and this causes overaggressive partition pruning. My plan is to have
these UDFs (NVL/COALESCE) replaced with NULL in the pruning expr tree.
> PartitionPruner::removeNonPartCols needs to handle AND/OR cases
> ---------------------------------------------------------------
>
> Key: HIVE-16113
> URL: https://issues.apache.org/jira/browse/HIVE-16113
> Project: Hive
> Issue Type: Bug
> Components: Logical Optimizer
> Affects Versions: 1.2.1, 2.1.1, 2.2.0
> Reporter: Gopal V
> Assignee: Remus Rusanu
> Attachments: HIVE-16113.1.patch
>
>
> {code}
> create table daysales (customer int) partitioned by (dt string);
> insert into daysales partition(dt='2001-01-01') values(1);
> select * from daysales where nvl(dt='2001-01-01' and customer=1, false);
> 0 ROWS
> {code}
> https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartitionPruner.java#L384
> {code}
> 2017-03-05T12:37:47,153 WARN [6f053d71-6ad6-4ad0-833d-337f2d499c82 main]
> ppr.PartitionPruner: The expr = NVL(((dt = '2001-01-01') and null),false)
> {code}
> Because {{true and null => null}}, this turns into {{NVL(null, false)}}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)