[ https://issues.apache.org/jira/browse/HIVE-16113?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16002677#comment-16002677 ]
Remus Rusanu commented on HIVE-16113: ------------------------------------- I think the issue is that the partition pruning logic expects {{null}} values to percolate through the expression tree and trigger the {{isUnknown}} case in {{PartitionPrunner.prunePartitionNames}}. But expressions like CASE, COALESCE or NVL (maybe other?) stop null bubbling and can evaluate the tree to a resolute {{false}} instead, causing overaggressive partition elimination. If the expression has these functions (NVL, COALESCE) to handle {{null}} values at a *row* level we're evaluating them and taking a decision at *partition* level (prune/not prune), and the 'prune' case is not safe. Perhaps we should consider functions like NVL/COALESCE 'special' and inject 'true' instead in the pruning expression? > 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)