Robert Miller created HIVE-9630:
-----------------------------------

             Summary: partition filter using date_sub result produces 
non-optimal plans
                 Key: HIVE-9630
                 URL: https://issues.apache.org/jira/browse/HIVE-9630
             Project: Hive
          Issue Type: Bug
          Components: CLI
    Affects Versions: 0.14.0
         Environment: CentOS 6.5, HDP 2.2
            Reporter: Robert Miller


We queries which execute many times faster when comparing a date partition 
value to a date string than when comparing to the results of a date_sub 
(specifically: date_sub(to_date(from_unixtime(unix_timestamp())), 7) -- Looking 
for seven days earlier).

For example:  The following query requires a MR job to be spun-up and requires 
1917 seconds to tell me there are roughly 428 MM rows:

select count(*) from event_histories eh where eh.adjusted_activity_date_utc > 
date_sub(to_date(from_unixtime(unix_timestamp())), 7);

Replacing the "date_sub(to_date(from_unixtime(unix_timestamp())), 7)" with the 
literal value '2015-02-02' (the value for today) results in no MR job and the 
result of 428 MM is returned in 0.075 seconds.

There are queries which are using the same date_sub structure which appear to 
perform a full scan of the table

I expect the results of the date_sub function are not classed equivalent to the 
literal even though there is nothing in the date_sub function which will change 
during the course of the query.

Explaining the two queries:

explain select count(*) from event_histories eh where 
eh.adjusted_activity_date_utc > 
date_sub(to_date(from_unixtime(unix_timestamp())), 7);
OK
Explain
STAGE DEPENDENCIES:
  Stage-1 is a root stage
  Stage-0 depends on stages: Stage-1

STAGE PLANS:
  Stage: Stage-1
    Map Reduce
      Map Operator Tree:
          TableScan
            alias: eh
            Statistics: Num rows: 1993093006 Data size: 901863505920 Basic 
stats: PARTIAL Column stats: NONE
            Filter Operator
              predicate: (adjusted_activity_date_utc > 
date_sub(to_date(from_unixtime(unix_timestamp())), 7)) (type: boolean)
              Statistics: Num rows: 664364335 Data size: 300621168489 Basic 
stats: COMPLETE Column stats: NONE
              Select Operator
                Statistics: Num rows: 664364335 Data size: 300621168489 Basic 
stats: COMPLETE Column stats: NONE
                Group By Operator
                  aggregations: count()
                  mode: hash
                  outputColumnNames: _col0
                  Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE 
Column stats: NONE
                  Reduce Output Operator
                    sort order:
                    Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE 
Column stats: NONE
                    value expressions: _col0 (type: bigint)
      Reduce Operator Tree:
        Group By Operator
          aggregations: count(VALUE._col0)
          mode: mergepartial
          outputColumnNames: _col0
          Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column 
stats: NONE
          Select Operator
            expressions: _col0 (type: bigint)
            outputColumnNames: _col0
            Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column 
stats: NONE
            File Output Operator
              compressed: false
              Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column 
stats: NONE
              table:
                  input format: org.apache.hadoop.mapred.TextInputFormat
                  output format: 
org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
                  serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

  Stage: Stage-0
    Fetch Operator
      limit: -1
      Processor Tree:
        ListSink

Time taken: 1.853 seconds, Fetched: 49 row(s)


explain select count(*) from event_histories eh where 
eh.adjusted_activity_date_utc > '2015-02-02';
OK
Explain
STAGE DEPENDENCIES:
  Stage-0 is a root stage

STAGE PLANS:
  Stage: Stage-0
    Fetch Operator
      limit: 1
      Processor Tree:
        ListSink

Time taken: 0.06 seconds, Fetched: 10 row(s)



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

Reply via email to