org.apache.hadoop.hive.ql.udf.generic
Class GenericUDFOPDivide

java.lang.Object
  extended by org.apache.hadoop.hive.ql.udf.generic.GenericUDF
      extended by org.apache.hadoop.hive.ql.udf.generic.GenericUDFBaseNumeric
          extended by org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPDivide
All Implemented Interfaces:
Closeable

public class GenericUDFOPDivide
extends GenericUDFBaseNumeric

Note that in SQL, the return type of divide is not necessarily the same as the parameters. For example, 3 / 2 = 1.5, not 1. To follow SQL, we always return a decimal for divide.


Nested Class Summary
 
Nested classes/interfaces inherited from class org.apache.hadoop.hive.ql.udf.generic.GenericUDF
GenericUDF.DeferredJavaObject, GenericUDF.DeferredObject
 
Field Summary
 
Fields inherited from class org.apache.hadoop.hive.ql.udf.generic.GenericUDFBaseNumeric
ansiSqlArithmetic, byteWritable, confLookupNeeded, converterLeft, converterRight, decimalWritable, doubleWritable, floatWritable, intWritable, leftOI, longWritable, opDisplayName, opName, resultOI, rightOI, shortWritable
 
Constructor Summary
GenericUDFOPDivide()
           
 
Method Summary
protected  PrimitiveTypeInfo deriveResultApproxTypeInfo()
          Default implementation for getting the approximate type info for the operator result.
protected  DecimalTypeInfo deriveResultDecimalTypeInfo(int prec1, int scale1, int prec2, int scale2)
          A balanced way to determine the precision/scale of decimal division result.
protected  PrimitiveTypeInfo deriveResultExactTypeInfo()
          Default implementation for getting the exact type info for the operator result.
protected  PrimitiveTypeInfo deriveResultExactTypeInfoAnsiSql()
           
protected  PrimitiveTypeInfo deriveResultExactTypeInfoBackwardsCompat()
           
protected  DoubleWritable evaluate(DoubleWritable left, DoubleWritable right)
           
protected  HiveDecimalWritable evaluate(HiveDecimal left, HiveDecimal right)
           
 
Methods inherited from class org.apache.hadoop.hive.ql.udf.generic.GenericUDFBaseNumeric
copyToNewInstance, deriveResultDecimalTypeInfo, evaluate, evaluate, evaluate, evaluate, evaluate, evaluate, getDisplayString, initialize
 
Methods inherited from class org.apache.hadoop.hive.ql.udf.generic.GenericUDF
close, configure, flip, getRequiredFiles, getRequiredJars, getUdfName, initializeAndFoldConstants
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

GenericUDFOPDivide

public GenericUDFOPDivide()
Method Detail

deriveResultExactTypeInfo

protected PrimitiveTypeInfo deriveResultExactTypeInfo()
Description copied from class: GenericUDFBaseNumeric
Default implementation for getting the exact type info for the operator result. It worked for all but divide operator.

Overrides:
deriveResultExactTypeInfo in class GenericUDFBaseNumeric
Returns:

deriveResultExactTypeInfoAnsiSql

protected PrimitiveTypeInfo deriveResultExactTypeInfoAnsiSql()

deriveResultExactTypeInfoBackwardsCompat

protected PrimitiveTypeInfo deriveResultExactTypeInfoBackwardsCompat()

deriveResultApproxTypeInfo

protected PrimitiveTypeInfo deriveResultApproxTypeInfo()
Description copied from class: GenericUDFBaseNumeric
Default implementation for getting the approximate type info for the operator result. Divide operator overrides this.

Overrides:
deriveResultApproxTypeInfo in class GenericUDFBaseNumeric
Returns:

evaluate

protected DoubleWritable evaluate(DoubleWritable left,
                                  DoubleWritable right)
Overrides:
evaluate in class GenericUDFBaseNumeric

evaluate

protected HiveDecimalWritable evaluate(HiveDecimal left,
                                       HiveDecimal right)
Overrides:
evaluate in class GenericUDFBaseNumeric

deriveResultDecimalTypeInfo

protected DecimalTypeInfo deriveResultDecimalTypeInfo(int prec1,
                                                      int scale1,
                                                      int prec2,
                                                      int scale2)
A balanced way to determine the precision/scale of decimal division result. Integer digits and decimal digits are computed independently. However, when the precision from above reaches above HiveDecimal.MAX_PRECISION, interger digit and decimal digits are shrunk equally to fit.

Specified by:
deriveResultDecimalTypeInfo in class GenericUDFBaseNumeric


Copyright © 2014 The Apache Software Foundation. All rights reserved.