Aman Sinha created DRILL-4071:
---------------------------------

             Summary: Partition pruning fails when a Coalesce() function 
appears with partition filter
                 Key: DRILL-4071
                 URL: https://issues.apache.org/jira/browse/DRILL-4071
             Project: Apache Drill
          Issue Type: Bug
          Components: Query Planning & Optimization
            Reporter: Aman Sinha


Pruning fails for this query: 

{code}
0: jdbc:drill:zk=local> explain plan for select count(*) from 
dfs.`/Users/asinha/data/multilevel/parquet` where dir0 = 1994 and 
coalesce(o_clerk, 'Clerk') = '';
+------+------+
| text | json |
+------+------+
| 00-00    Screen
00-01      Project(EXPR$0=[$0])
00-02        StreamAgg(group=[{}], EXPR$0=[COUNT()])
00-03          Project($f0=[0])
00-04            SelectionVectorRemover
00-05              Filter(condition=[AND(=($0, 1994), =(CASE(IS NOT NULL($1), 
$1, 'Clerk'), ''))])
00-06                Scan(groupscan=[ParquetGroupScan 
[entries=[ReadEntryWithPath 
[path=file:/Users/asinha/data/multilevel/parquet/1994/Q1/orders_94_q1.parquet], 
ReadEntryWithPath 
[path=file:/Users/asinha/data/multilevel/parquet/1994/Q2/orders_94_q2.parquet], 
ReadEntryWithPath 
[path=file:/Users/asinha/data/multilevel/parquet/1994/Q3/orders_94_q3.parquet], 
ReadEntryWithPath 
[path=file:/Users/asinha/data/multilevel/parquet/1994/Q4/orders_94_q4.parquet], 
ReadEntryWithPath 
[path=file:/Users/asinha/data/multilevel/parquet/1995/Q1/orders_95_q1.parquet], 
ReadEntryWithPath 
[path=file:/Users/asinha/data/multilevel/parquet/1995/Q2/orders_95_q2.parquet], 
ReadEntryWithPath 
[path=file:/Users/asinha/data/multilevel/parquet/1995/Q3/orders_95_q3.parquet], 
ReadEntryWithPath 
[path=file:/Users/asinha/data/multilevel/parquet/1995/Q4/orders_95_q4.parquet], 
ReadEntryWithPath 
[path=file:/Users/asinha/data/multilevel/parquet/1996/Q1/orders_96_q1.parquet], 
ReadEntryWithPath 
[path=file:/Users/asinha/data/multilevel/parquet/1996/Q2/orders_96_q2.parquet], 
ReadEntryWithPath 
[path=file:/Users/asinha/data/multilevel/parquet/1996/Q3/orders_96_q3.parquet], 
ReadEntryWithPath 
[path=file:/Users/asinha/data/multilevel/parquet/1996/Q4/orders_96_q4.parquet]],
 selectionRoot=file:/Users/asinha/data/multilevel/parquet, numFiles=12, 
usedMetadataFile=false, columns=[`dir0`, `o_clerk`]]])
{code}

The log indicates no partition filters were found: 
{code}
...
o.a.d.e.p.l.partition.PruneScanRule - No conditions were found eligible for 
partition pruning.Total pruning elapsed time: 0 ms
{code}

A preliminary analysis indicates that since the Coalesce gets converted to a 
CASE(IS NOT NULL....) expression, the filter analysis does not correctly 
process the full expression tree.  At one point in 
{{FindPartitionConditions.analyzeCall()}} I saw the operandStack had 3 elements 
in it: [NO_PUSH, NO_PUSH, PUSH] which seemed strange since I would expect even 
number of elements. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to