Xuefu Zhang created HIVE-5798:
---------------------------------

             Summary: NULL is mistaken as exact data type in numeric operations
                 Key: HIVE-5798
                 URL: https://issues.apache.org/jira/browse/HIVE-5798
             Project: Hive
          Issue Type: Bug
          Components: Types
    Affects Versions: 0.12.0
            Reporter: Xuefu Zhang
            Assignee: Xuefu Zhang


If NULL literal appears in as an operand in an arithmetic operator, it was 
treated as if it has an exact numeric data type. The following demonstrates the 
behaviour:
{code}
hive> desc test;
OK
i                       int                     None                
b                       boolean                 None                
d                       double                  None                
s                       string                  None                
dec                     decimal(5,2)            None                
Time taken: 0.272 seconds, Fetched: 5 row(s)
hive> create table test1 as select i + NULL from test limit 1;
hive> desc test1;
OK
_c0                     int                     None                
{code}

That is, integer type + NULL type = integer type. However, NULL means data 
missing or unknown. We don't know the type of a NULL literal. Thus, it should 
NOT be treated as a literal of an exact type.

MySQL, however, has a different behaviour, which seems more reasonable:
{code}
mysql> desc test;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| i     | int(11)      | YES  |     | NULL    |       |
| b     | tinyint(1)   | YES  |     | NULL    |       |
| d     | double       | YES  |     | NULL    |       |
| s     | varchar(5)   | YES  |     | NULL    |       |
| dd    | decimal(5,2) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
mysql> create table test24 as select i+NULL from test;
mysql> desc test24;
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| i+NULL | double(17,0) | YES  |     | NULL    |       |
+--------+--------------+------+-----+---------+-------+
{code}

Though the value in the column stays as NULL, the type of result column is 
different. Hive should follow MySQL in this aspect.



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to