diff --git ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFFormatNumber.java ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFFormatNumber.java index a9a0176..dee3137 100644 --- ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFFormatNumber.java +++ ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFFormatNumber.java @@ -29,6 +29,7 @@ import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.DoubleObjectInspector; +import org.apache.hadoop.hive.serde2.objectinspector.primitive.FloatObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.IntObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.LongObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory; @@ -166,17 +167,21 @@ public Object evaluate(DeferredObject[] arguments) throws HiveException { } double xDoubleValue = 0.0; + float xFloatValue = 0.0f; int xIntValue = 0; long xLongValue = 0L; PrimitiveObjectInspector xObjectInspector = (PrimitiveObjectInspector)argumentOIs[0]; switch (xObjectInspector.getPrimitiveCategory()) { case VOID: - case FLOAT: case DOUBLE: xDoubleValue = ((DoubleObjectInspector) argumentOIs[0]).get(arguments[0].get()); resultText.set(numberFormat.format(xDoubleValue)); break; + case FLOAT: + xFloatValue = ((FloatObjectInspector) argumentOIs[0]).get(arguments[0].get()); + resultText.set(numberFormat.format(xFloatValue)); + break; case BYTE: case SHORT: case INT: diff --git ql/src/test/queries/clientpositive/udf_format_number.q ql/src/test/queries/clientpositive/udf_format_number.q index 2504bd0..0afd075 100644 --- ql/src/test/queries/clientpositive/udf_format_number.q +++ ql/src/test/queries/clientpositive/udf_format_number.q @@ -57,3 +57,9 @@ SELECT format_number(-9223372036854775807, 10), format_number(4.9E-324, 324), format_number(1.7976931348623157E308, 308) FROM src tablesample (1 rows); + +-- floats +SELECT format_number(CAST(12332.123456 AS FLOAT), 4), + format_number(CAST(12332.1 AS FLOAT), 4), + format_number(CAST(-12332.2 AS FLOAT), 0) +FROM src tablesample (1 rows); diff --git ql/src/test/results/clientpositive/udf_format_number.q.out ql/src/test/results/clientpositive/udf_format_number.q.out index 6771ae0..c95e7cc 100644 --- ql/src/test/results/clientpositive/udf_format_number.q.out +++ ql/src/test/results/clientpositive/udf_format_number.q.out @@ -171,3 +171,20 @@ POSTHOOK: type: QUERY POSTHOOK: Input: default@src #### A masked pattern was here #### -9,223,372,036,854,775,807.0000000000 9,223,372,036,854,775,807.00000000000000000000 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005 179,769,313,486,231,570,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +PREHOOK: query: -- floats +SELECT format_number(CAST(12332.123456 AS FLOAT), 4), + format_number(CAST(12332.1 AS FLOAT), 4), + format_number(CAST(-12332.2 AS FLOAT), 0) +FROM src tablesample (1 rows) +PREHOOK: type: QUERY +PREHOOK: Input: default@src +#### A masked pattern was here #### +POSTHOOK: query: -- floats +SELECT format_number(CAST(12332.123456 AS FLOAT), 4), + format_number(CAST(12332.1 AS FLOAT), 4), + format_number(CAST(-12332.2 AS FLOAT), 0) +FROM src tablesample (1 rows) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +#### A masked pattern was here #### +12,332.1230 12,332.0996 -12,332