You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hive.apache.org by "Dhiraj Kumar (JIRA)" <ji...@apache.org> on 2016/11/28 09:02:59 UTC

[jira] [Created] (HIVE-15291) Comparison of timestamp fails if only date part is provided.

Dhiraj Kumar created HIVE-15291:
-----------------------------------

             Summary: Comparison of timestamp fails if only date part is provided. 
                 Key: HIVE-15291
                 URL: https://issues.apache.org/jira/browse/HIVE-15291
             Project: Hive
          Issue Type: Bug
          Components: Hive, UDF
    Affects Versions: 2.1.0
            Reporter: Dhiraj Kumar


Summary : If a query needs to compare two timestamp with one timestamp provided in "YYYY-MM-DD" format and skipping the time part, it returns incorrect result. 

Steps to reproduce : 

1. Start a hive-cli. 
2. Fire up the query -> select cast("2016-12-31 12:00:00" as timestamp) > "2016-12-30";
3. Expected result : true
4. Actual result : NULL

Detailed description : 
If two primitives of different type needs to compared, a common comparator type is chosen. Prior to 2.1, Common type Text was chosen to compare Timestamp type and Text type. 

In version 2.1, Common type Timestamp is chosen to compare Timestamp type and Text type. This leads to converting Text type (YYYY-MM-DD) to be converted into java.sql.Timestamp which throws Exception saying the input is not in proper format. The exception is suppressed and a null is returned. 

Code below from org.apache.hadoop.hive.ql.exec.FunctionRegistry
{code:java}
if (pgA == PrimitiveGrouping.STRING_GROUP && pgB == PrimitiveGrouping.DATE_GROUP) {
      return b;
    }
    // date/timestamp is higher precedence than String_GROUP
    if (pgB == PrimitiveGrouping.STRING_GROUP && pgA == PrimitiveGrouping.DATE_GROUP) {
      return a;
    }
{code}


The bug was introduced in  [HIVE-13381|https://issues.apache.org/jira/browse/HIVE-13381]



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