hive-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hari Sankar Sivarama Subramaniyan (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HIVE-11634) Support partition pruning for IN(STRUCT(partcol, nonpartcol..)...)
Date Wed, 26 Aug 2015 21:33:47 GMT

    [ https://issues.apache.org/jira/browse/HIVE-11634?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14715560#comment-14715560
] 

Hari Sankar Sivarama Subramaniyan commented on HIVE-11634:
----------------------------------------------------------

[~ashutoshc] If you see the change in ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/OpProcFactory.java,
you can see that I use fop.getConf().getPartitionpruningPredicate() as the predicate used
by the partition pruner.
The test cases added in pcs.q will guarantee that this patch will work. i.e. If you run the
'EXPLAIN PLAN EXTENDED ... IN(STRUCT(..) 'queries in pcs.q without the patch, the plan will
be different. 

However, as you mentioned we should combine OrigPredicate and partitionPruningPredicate to
one field before this patch can be finally merged. I will do that soon in the next upload.

Thanks
Hari

> Support partition pruning for IN(STRUCT(partcol, nonpartcol..)...)
> ------------------------------------------------------------------
>
>                 Key: HIVE-11634
>                 URL: https://issues.apache.org/jira/browse/HIVE-11634
>             Project: Hive
>          Issue Type: Bug
>          Components: CBO
>            Reporter: Hari Sankar Sivarama Subramaniyan
>            Assignee: Hari Sankar Sivarama Subramaniyan
>         Attachments: HIVE-11634.1.patch, HIVE-11634.2.patch, HIVE-11634.3.patch
>
>
> Currently, we do not support partition pruning for the following scenario
> {code}
> create table pcr_t1 (key int, value string) partitioned by (ds string);
> insert overwrite table pcr_t1 partition (ds='2000-04-08') select * from src where key
< 20 order by key;
> insert overwrite table pcr_t1 partition (ds='2000-04-09') select * from src where key
< 20 order by key;
> insert overwrite table pcr_t1 partition (ds='2000-04-10') select * from src where key
< 20 order by key;
> explain extended select ds from pcr_t1 where struct(ds, key) in (struct('2000-04-08',1),
struct('2000-04-09',2));
> {code}
> If we run the above query, we see that all the partitions of table pcr_t1 are present
in the filter predicate where as we can prune  partition (ds='2000-04-10'). 
> The optimization is to rewrite the above query into the following.
> {code}
> explain extended select ds from pcr_t1 where  (struct(ds)) IN (struct('2000-04-08'),
struct('2000-04-09')) and  struct(ds, key) in (struct('2000-04-08',1), struct('2000-04-09',2));
> {code}
> The predicate (struct(ds)) IN (struct('2000-04-08'), struct('2000-04-09'))  is used by
partition pruner to prune the columns which otherwise will not be pruned.
> This is an extension of the idea presented in HIVE-11573.



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

Mime
View raw message