hive-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Xuefu Zhang (JIRA)" <>
Subject [jira] [Created] (HIVE-5356) Move arithmatic UDFs to generic UDF implementations
Date Wed, 25 Sep 2013 04:41:05 GMT
Xuefu Zhang created HIVE-5356:

             Summary: Move arithmatic UDFs to generic UDF implementations
                 Key: HIVE-5356
             Project: Hive
          Issue Type: Task
          Components: UDF
    Affects Versions: 0.11.0
            Reporter: Xuefu Zhang
            Assignee: Xuefu Zhang
             Fix For: 0.13.0

Currently, all of the arithmetic operators, such as add/sub/mult/div, are implemented as old-style
UDFs and java reflection is used to determine the return type TypeInfos/ObjectInspectors,
based on the return type of the evaluate() method chosen for the expression. This works fine
for types that don't have type params.

Hive decimal type participates in these operations just like int or double. Different from
double or int, however, decimal has precision and scale, which cannot be determined by just
looking at the return type (decimal) of the UDF evaluate() method, even though the operands
have certain precision/scale. With the default of "decimal" without precision/scale, then
(10, 0) will be the type params. This is certainly not desirable.

To solve this problem, all of the arithmetic operators would need to be implemented as GenericUDFs,
which allow returning ObjectInspector during the initialize() method. The object inspectors
returned can carry type params, from which the "exact" return type can be determined.

It's worth mentioning that, for user UDF implemented in non-generic way, if the return type
of the chosen evaluate() method is decimal, the return type actually has (10,0) as precision/scale,
which might not be desirable. This needs to be documented.

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:

View raw message