Xuefu Zhang created HIVE-5356:
---------------------------------
Summary: Move arithmatic UDFs to generic UDF implementations
Key: HIVE-5356
URL: https://issues.apache.org/jira/browse/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: http://www.atlassian.com/software/jira