drill-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jinfeng Ni (JIRA)" <j...@apache.org>
Subject [jira] [Created] (DRILL-3702) PartitionPruning hit ClassCastException in Interpreter when the pruning filter expression is of non-nullable type.
Date Mon, 24 Aug 2015 22:07:45 GMT
Jinfeng Ni created DRILL-3702:
---------------------------------

             Summary: PartitionPruning hit ClassCastException in Interpreter when the pruning
filter expression is of non-nullable type.
                 Key: DRILL-3702
                 URL: https://issues.apache.org/jira/browse/DRILL-3702
             Project: Apache Drill
          Issue Type: Bug
          Components: Query Planning & Optimization
            Reporter: Jinfeng Ni
            Assignee: Jinfeng Ni
             Fix For: 1.2.0


I have the following parquet table, created using partition by clause:

{code}
create table mypart (id, name) partition by (id) as select cast(n_regionkey as varchar(20)),
n_name from cp.`tpch/nation.parquet`;
{code}

The generated parquet table consists of 5 files, each representing a partition:

{code}
0_0_1.parquet 0_0_2.parquet 0_0_3.parquet 0_0_4.parquet 0_0_5.parquet
{code}

For the following query, partition pruning works as expected:

{code}
select id, name from mypart where id  = '0' ;

00-01      Project(id=[$1], name=[$0])
00-02        Scan(groupscan=[ParquetGroupScan [entries=[ReadEntryWithPath [path=/tmp/mypart/0_0_1.parquet]],
selectionRoot=file:/tmp/mypart, numFiles=1, columns=[`id`, `name`]]])

"selectionRoot" : "file:/tmp/mypart",
    "fileSet" : [ "/tmp/mypart/0_0_1.parquet" ],
    "cost" : 5.0
{code}

However, the following query would hit ClassCastException when PruneScanRule calls interpreter
to evaluate the filtering condition, which happens to be non-nullable.

{code}

select id, name from mypart where concat(id,'')  = '0' ;

00-05              Project(id=[$1], name=[$0])
00-06                Scan(groupscan=[ParquetGroupScan [entries=[ReadEntryWithPath [path=file:/tmp/mypart]],
selectionRoot=file:/tmp/mypart, numFiles=1, columns=[`id`, `name`]]])

"selectionRoot" : "file:/tmp/mypart",
    "fileSet" : [ "/tmp/mypart/0_0_1.parquet", "/tmp/mypart/0_0_4.parquet", "/tmp/mypart/0_0_5.parquet",
"/tmp/mypart/0_0_2.parquet", "/tmp/mypart/0_0_3.parquet" ],
    "cost" : 25.0
  },
{code}

Here is the error for the ClassCastException, raised in Interpreter:

{code}
java.lang.ClassCastException: org.apache.drill.exec.expr.holders.BitHolder cannot be cast
to org.apache.drill.exec.expr.holders.NullableBitHolder
{code}

The cause of the problem is that PruneScanRule assumes the output type of a filter condition
is NullableBit, while in this case the filter condition is Bit type, which leads to ClassCastException.





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

Mime
View raw message