[ https://issues.apache.org/jira/browse/HIVE-9630?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14313633#comment-14313633 ]
Robert Miller commented on HIVE-9630: ------------------------------------- If I read HIVE-5472 correctly, then the current_timestamp() and current_date() UDF functions were added during the course of January 2015. We are not in a position to take a new release at this moment, but a month or two from now we will be. As nothing is passed into unix_timestamp(), I did not realize it would be considered non-deterministic. I will resolve this ticket. > 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)