You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by se...@apache.org on 2018/07/24 19:40:29 UTC

[09/11] hive git commit: HIVE-20082: HiveDecimal to string conversion doesn't format the decimal correctly (Jason Dere, reviewed by Ashutosh Chauhan)

HIVE-20082: HiveDecimal to string conversion doesn't format the decimal correctly (Jason Dere, reviewed by Ashutosh Chauhan)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/26f4d8ea
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/26f4d8ea
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/26f4d8ea

Branch: refs/heads/master-txnstats
Commit: 26f4d8ea422eda39c2d24c2cce99f74686a40f48
Parents: 87b9f64
Author: Jason Dere <jd...@hortonworks.com>
Authored: Tue Jul 24 10:30:15 2018 -0700
Committer: Jason Dere <jd...@hortonworks.com>
Committed: Tue Jul 24 10:30:15 2018 -0700

----------------------------------------------------------------------
 .../predicate/TestAccumuloRangeGenerator.java   |   7 +-
 .../DTIColumnArithmeticDTIColumnNoConvert.txt   |   1 -
 .../DTIScalarArithmeticDTIColumnNoConvert.txt   |   1 -
 .../hadoop/hive/ql/exec/FunctionRegistry.java   |   7 +-
 .../ql/exec/vector/VectorizationContext.java    |  26 +--
 .../vector/expressions/CastDecimalToString.java |   2 +-
 .../hive/ql/index/IndexPredicateAnalyzer.java   |   2 +
 .../calcite/translator/RexNodeConverter.java    |   4 +-
 .../hive/ql/optimizer/physical/Vectorizer.java  |   3 +-
 .../apache/hadoop/hive/ql/udf/UDFToString.java  | 181 -------------------
 .../hive/ql/udf/generic/GenericUDFToString.java |  79 ++++++++
 .../vector/expressions/TestVectorTypeCasts.java |   6 +-
 .../clientpositive/autoColumnStats_6.q.out      |   2 +-
 .../clientpositive/bucket_map_join_spark1.q.out |   4 +-
 .../clientpositive/bucket_map_join_spark2.q.out |   4 +-
 .../clientpositive/bucket_map_join_spark3.q.out |   4 +-
 .../results/clientpositive/bucketmapjoin5.q.out |   4 +-
 .../clientpositive/bucketmapjoin_negative.q.out |   2 +-
 .../bucketmapjoin_negative2.q.out               |   2 +-
 .../bucketsortoptimize_insert_3.q.out           |   2 +-
 .../clientpositive/char_pad_convert.q.out       |   4 +-
 .../column_pruner_multiple_children.q.out       |   2 +-
 .../test/results/clientpositive/decimal_2.q.out |   4 +-
 .../test/results/clientpositive/groupby12.q.out |   2 +-
 .../test/results/clientpositive/groupby5.q.out  |   2 +-
 .../clientpositive/groupby5_noskew.q.out        |   2 +-
 .../results/clientpositive/groupby7_map.q.out   |   4 +-
 .../groupby7_map_multi_single_reducer.q.out     |   4 +-
 .../clientpositive/groupby7_map_skew.q.out      |   4 +-
 .../clientpositive/groupby7_noskew.q.out        |   4 +-
 .../groupby7_noskew_multi_single_reducer.q.out  |   4 +-
 .../test/results/clientpositive/groupby8.q.out  |   8 +-
 .../results/clientpositive/groupby8_map.q.out   |   4 +-
 .../clientpositive/groupby8_map_skew.q.out      |   4 +-
 .../clientpositive/groupby8_noskew.q.out        |   4 +-
 .../test/results/clientpositive/groupby9.q.out  |  20 +-
 .../clientpositive/groupby_cube_multi_gby.q.out |   2 +-
 .../clientpositive/groupby_position.q.out       |   8 +-
 .../clientpositive/groupby_sort_1_23.q.out      |   2 +-
 .../clientpositive/groupby_sort_skew_1_23.q.out |   4 +-
 .../infer_bucket_sort_dyn_part.q.out            |   2 +-
 .../infer_bucket_sort_grouping_operators.q.out  |   6 +-
 .../infer_bucket_sort_map_operators.q.out       |   6 +-
 .../infer_bucket_sort_num_buckets.q.out         |   2 +-
 .../results/clientpositive/input_part10.q.out   |   2 +-
 .../clientpositive/llap/bucketmapjoin1.q.out    |   4 +-
 .../clientpositive/llap/bucketmapjoin2.q.out    |   6 +-
 .../clientpositive/llap/bucketmapjoin3.q.out    |   4 +-
 .../clientpositive/llap/bucketmapjoin4.q.out    |   4 +-
 .../llap/default_constraint.q.out               |   4 +-
 .../llap/dynamic_partition_pruning.q.out        |  16 +-
 .../llap/insert_into_default_keyword.q.out      |  20 +-
 .../llap/materialized_view_rewrite_6.q.out      |   4 +-
 .../llap/multi_insert_lateral_view.q.out        |  32 ++--
 .../clientpositive/llap/orc_merge1.q.out        |   6 +-
 .../clientpositive/llap/orc_merge10.q.out       |   6 +-
 .../clientpositive/llap/orc_merge2.q.out        |   2 +-
 .../clientpositive/llap/orc_merge_diff_fs.q.out |   6 +-
 .../clientpositive/llap/rcfile_merge2.q.out     |   2 +-
 .../llap/schema_evol_text_nonvec_part.q.out     |   4 +-
 ...hema_evol_text_nonvec_part_all_complex.q.out |  16 +-
 ...l_text_nonvec_part_all_complex_llap_io.q.out |  16 +-
 .../schema_evol_text_nonvec_part_llap_io.q.out  |   4 +-
 .../llap/schema_evol_text_vec_part.q.out        |   4 +-
 .../schema_evol_text_vec_part_all_complex.q.out |  16 +-
 .../llap/schema_evol_text_vecrow_part.q.out     |   4 +-
 ...hema_evol_text_vecrow_part_all_complex.q.out |  16 +-
 .../results/clientpositive/llap/stats11.q.out   |   4 +-
 .../clientpositive/llap/subquery_multi.q.out    |   6 +-
 .../llap/tez_union_multiinsert.q.out            |  30 +--
 .../results/clientpositive/llap/union6.q.out    |   2 +-
 .../clientpositive/llap/unionDistinct_1.q.out   |  18 +-
 .../clientpositive/llap/unionDistinct_3.q.out   |  10 +-
 .../llap/vector_case_when_1.q.out               |  10 +-
 .../llap/vector_char_mapjoin1.q.out             |   6 +-
 .../clientpositive/llap/vector_decimal_1.q.out  |   2 +-
 .../clientpositive/llap/vector_decimal_2.q.out  |   8 +-
 .../llap/vector_decimal_expressions.q.out       |  28 +--
 .../llap/vector_string_concat.q.out             |   2 +-
 .../clientpositive/llap/vector_udf1.q.out       |   6 +-
 .../llap/vector_varchar_mapjoin1.q.out          |   6 +-
 .../clientpositive/llap/vectorized_casts.q.out  |   2 +-
 .../vectorized_dynamic_partition_pruning.q.out  |  16 +-
 .../clientpositive/multi_insert_mixed.q.out     |   4 +-
 .../results/clientpositive/orc_merge1.q.out     |   6 +-
 .../results/clientpositive/orc_merge10.q.out    |   6 +-
 .../results/clientpositive/orc_merge2.q.out     |   2 +-
 .../clientpositive/orc_merge_diff_fs.q.out      |   6 +-
 .../clientpositive/perf/spark/query36.q.out     |   6 +-
 .../clientpositive/perf/spark/query70.q.out     |   6 +-
 .../clientpositive/perf/spark/query86.q.out     |   6 +-
 .../clientpositive/perf/tez/query36.q.out       |   4 +-
 .../clientpositive/perf/tez/query70.q.out       |   4 +-
 .../clientpositive/perf/tez/query86.q.out       |   4 +-
 .../results/clientpositive/show_functions.q.out |   1 -
 .../results/clientpositive/smb_mapjoin_20.q.out |  12 +-
 .../spark/bucket_map_join_spark1.q.out          |   4 +-
 .../spark/bucket_map_join_spark2.q.out          |   4 +-
 .../spark/bucket_map_join_spark3.q.out          |   4 +-
 .../clientpositive/spark/bucketmapjoin1.q.out   |   4 +-
 .../clientpositive/spark/bucketmapjoin2.q.out   |   6 +-
 .../clientpositive/spark/bucketmapjoin3.q.out   |   4 +-
 .../clientpositive/spark/bucketmapjoin4.q.out   |   4 +-
 .../clientpositive/spark/bucketmapjoin5.q.out   |   4 +-
 .../spark/bucketmapjoin_negative.q.out          |   2 +-
 .../spark/bucketmapjoin_negative2.q.out         |   2 +-
 .../spark/dynamic_rdd_cache.q.out               |   8 +-
 .../results/clientpositive/spark/groupby5.q.out |   2 +-
 .../clientpositive/spark/groupby5_noskew.q.out  |   2 +-
 .../clientpositive/spark/groupby7_map.q.out     |   4 +-
 .../groupby7_map_multi_single_reducer.q.out     |   4 +-
 .../spark/groupby7_map_skew.q.out               |   4 +-
 .../clientpositive/spark/groupby7_noskew.q.out  |   4 +-
 .../groupby7_noskew_multi_single_reducer.q.out  |   4 +-
 .../results/clientpositive/spark/groupby8.q.out |   8 +-
 .../clientpositive/spark/groupby8_map.q.out     |   4 +-
 .../spark/groupby8_map_skew.q.out               |   4 +-
 .../clientpositive/spark/groupby8_noskew.q.out  |   4 +-
 .../results/clientpositive/spark/groupby9.q.out |  20 +-
 .../clientpositive/spark/groupby_position.q.out |   8 +-
 .../spark/groupby_sort_1_23.q.out               |   2 +-
 .../spark/groupby_sort_skew_1_23.q.out          |   4 +-
 .../spark/infer_bucket_sort_map_operators.q.out |   6 +-
 .../spark/multi_insert_lateral_view.q.out       |  32 ++--
 .../spark/multi_insert_mixed.q.out              |   4 +-
 .../clientpositive/spark/smb_mapjoin_20.q.out   |  12 +-
 .../spark/spark_dynamic_partition_pruning.q.out |  44 ++---
 ...k_vectorized_dynamic_partition_pruning.q.out |  44 ++---
 .../results/clientpositive/spark/stats1.q.out   |   2 +-
 .../clientpositive/spark/subquery_multi.q.out   |   6 +-
 .../results/clientpositive/spark/union17.q.out  |   8 +-
 .../results/clientpositive/spark/union18.q.out  |   2 +-
 .../results/clientpositive/spark/union19.q.out  |   4 +-
 .../results/clientpositive/spark/union20.q.out  |   4 +-
 .../results/clientpositive/spark/union32.q.out  |   4 +-
 .../results/clientpositive/spark/union33.q.out  |   4 +-
 .../results/clientpositive/spark/union6.q.out   |   2 +-
 .../clientpositive/spark/union_remove_19.q.out  |   4 +-
 .../spark/vector_string_concat.q.out            |   2 +-
 ql/src/test/results/clientpositive/stats1.q.out |   2 +-
 .../results/clientpositive/tablevalues.q.out    |   2 +-
 ql/src/test/results/clientpositive/udf3.q.out   |   2 +-
 .../results/clientpositive/udf_string.q.out     |   9 +-
 .../test/results/clientpositive/union17.q.out   |   6 +-
 .../test/results/clientpositive/union18.q.out   |   2 +-
 .../test/results/clientpositive/union19.q.out   |   4 +-
 .../test/results/clientpositive/union20.q.out   |   4 +-
 .../test/results/clientpositive/union32.q.out   |   4 +-
 .../test/results/clientpositive/union33.q.out   |   4 +-
 ql/src/test/results/clientpositive/union6.q.out |   2 +-
 .../clientpositive/union_remove_19.q.out        |   4 +-
 .../clientpositive/vector_case_when_1.q.out     |  10 +-
 .../clientpositive/vector_char_mapjoin1.q.out   |   4 +-
 .../clientpositive/vector_decimal_1.q.out       |   2 +-
 .../vector_decimal_expressions.q.out            |  28 +--
 .../clientpositive/vector_string_concat.q.out   |   2 +-
 .../vector_varchar_mapjoin1.q.out               |   4 +-
 .../clientpositive/vectorized_casts.q.out       |   2 +-
 .../PrimitiveObjectInspectorConverter.java      |   3 +-
 .../PrimitiveObjectInspectorUtils.java          |   3 +-
 .../TestObjectInspectorConverters.java          |  46 ++++-
 .../TestPrimitiveObjectInspectorUtils.java      |  14 ++
 162 files changed, 648 insertions(+), 695 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/accumulo-handler/src/test/org/apache/hadoop/hive/accumulo/predicate/TestAccumuloRangeGenerator.java
----------------------------------------------------------------------
diff --git a/accumulo-handler/src/test/org/apache/hadoop/hive/accumulo/predicate/TestAccumuloRangeGenerator.java b/accumulo-handler/src/test/org/apache/hadoop/hive/accumulo/predicate/TestAccumuloRangeGenerator.java
index 9df2aad..4975fa0 100644
--- a/accumulo-handler/src/test/org/apache/hadoop/hive/accumulo/predicate/TestAccumuloRangeGenerator.java
+++ b/accumulo-handler/src/test/org/apache/hadoop/hive/accumulo/predicate/TestAccumuloRangeGenerator.java
@@ -38,7 +38,7 @@ import org.apache.hadoop.hive.ql.plan.ExprNodeColumnDesc;
 import org.apache.hadoop.hive.ql.plan.ExprNodeConstantDesc;
 import org.apache.hadoop.hive.ql.plan.ExprNodeDesc;
 import org.apache.hadoop.hive.ql.plan.ExprNodeGenericFuncDesc;
-import org.apache.hadoop.hive.ql.udf.UDFToString;
+import org.apache.hadoop.hive.ql.udf.generic.GenericUDFToString;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFBridge;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPAnd;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPEqual;
@@ -388,12 +388,11 @@ public class TestAccumuloRangeGenerator {
     ExprNodeGenericFuncDesc addition = new ExprNodeGenericFuncDesc(TypeInfoFactory.intTypeInfo, plus, Arrays.asList(fourty, fifty));
 
     // cast(.... as string)
-    UDFToString stringCast = new UDFToString();
-    GenericUDFBridge stringCastBridge = new GenericUDFBridge("cast", false, stringCast.getClass().getName());
+    GenericUDFToString stringCast = new GenericUDFToString();
 
     // cast (40 + 50 as string)
     ExprNodeGenericFuncDesc cast = new ExprNodeGenericFuncDesc(TypeInfoFactory.stringTypeInfo,
-        stringCastBridge, "cast", Collections.<ExprNodeDesc> singletonList(addition));
+        stringCast, "cast", Collections.<ExprNodeDesc> singletonList(addition));
 
     ExprNodeDesc key = new ExprNodeColumnDesc(TypeInfoFactory.stringTypeInfo, "key", null,
         false);

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/gen/vectorization/ExpressionTemplates/DTIColumnArithmeticDTIColumnNoConvert.txt
----------------------------------------------------------------------
diff --git a/ql/src/gen/vectorization/ExpressionTemplates/DTIColumnArithmeticDTIColumnNoConvert.txt b/ql/src/gen/vectorization/ExpressionTemplates/DTIColumnArithmeticDTIColumnNoConvert.txt
index bfccf2a..5307d33 100644
--- a/ql/src/gen/vectorization/ExpressionTemplates/DTIColumnArithmeticDTIColumnNoConvert.txt
+++ b/ql/src/gen/vectorization/ExpressionTemplates/DTIColumnArithmeticDTIColumnNoConvert.txt
@@ -18,7 +18,6 @@
  
 package org.apache.hadoop.hive.ql.exec.vector.expressions.gen;
 
-import org.apache.hadoop.hive.ql.udf.UDFToString;
 import org.apache.hadoop.hive.ql.exec.vector.expressions.StringExpr;
 import org.apache.hadoop.io.LongWritable;
 

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/gen/vectorization/ExpressionTemplates/DTIScalarArithmeticDTIColumnNoConvert.txt
----------------------------------------------------------------------
diff --git a/ql/src/gen/vectorization/ExpressionTemplates/DTIScalarArithmeticDTIColumnNoConvert.txt b/ql/src/gen/vectorization/ExpressionTemplates/DTIScalarArithmeticDTIColumnNoConvert.txt
index 514f3f9..f8cfa57 100644
--- a/ql/src/gen/vectorization/ExpressionTemplates/DTIScalarArithmeticDTIColumnNoConvert.txt
+++ b/ql/src/gen/vectorization/ExpressionTemplates/DTIScalarArithmeticDTIColumnNoConvert.txt
@@ -18,7 +18,6 @@
  
 package org.apache.hadoop.hive.ql.exec.vector.expressions.gen;
 
-import org.apache.hadoop.hive.ql.udf.UDFToString;
 import org.apache.hadoop.hive.ql.exec.vector.expressions.StringExpr;
 import org.apache.hadoop.io.LongWritable;
 

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
index 3d5506f..4459184 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
@@ -109,7 +109,6 @@ import org.apache.hadoop.hive.ql.udf.UDFToFloat;
 import org.apache.hadoop.hive.ql.udf.UDFToInteger;
 import org.apache.hadoop.hive.ql.udf.UDFToLong;
 import org.apache.hadoop.hive.ql.udf.UDFToShort;
-import org.apache.hadoop.hive.ql.udf.UDFToString;
 import org.apache.hadoop.hive.ql.udf.UDFType;
 import org.apache.hadoop.hive.ql.udf.UDFUUID;
 import org.apache.hadoop.hive.ql.udf.UDFUnbase64;
@@ -402,12 +401,11 @@ public final class FunctionRegistry {
     system.registerUDF(serdeConstants.BIGINT_TYPE_NAME, UDFToLong.class, false, UDFToLong.class.getSimpleName());
     system.registerUDF(serdeConstants.FLOAT_TYPE_NAME, UDFToFloat.class, false, UDFToFloat.class.getSimpleName());
     system.registerUDF(serdeConstants.DOUBLE_TYPE_NAME, UDFToDouble.class, false, UDFToDouble.class.getSimpleName());
-    system.registerUDF(serdeConstants.STRING_TYPE_NAME, UDFToString.class, false, UDFToString.class.getSimpleName());
     // following mapping is to enable UDFName to UDF while generating expression for default value (in operator tree)
     //  e.g. cast(4 as string) is serialized as UDFToString(4) into metastore, to allow us to generate appropriate UDF for
     //  UDFToString we need the following mappings
     // Rest of the types e.g. DATE, CHAR, VARCHAR etc are already registered
-    system.registerUDF(UDFToString.class.getSimpleName(), UDFToString.class, false, UDFToString.class.getSimpleName());
+    // TODO: According to vgarg, these function mappings are no longer necessary as the default value logic has changed.
     system.registerUDF(UDFToBoolean.class.getSimpleName(), UDFToBoolean.class, false, UDFToBoolean.class.getSimpleName());
     system.registerUDF(UDFToDouble.class.getSimpleName(), UDFToDouble.class, false, UDFToDouble.class.getSimpleName());
     system.registerUDF(UDFToFloat.class.getSimpleName(), UDFToFloat.class, false, UDFToFloat.class.getSimpleName());
@@ -416,6 +414,7 @@ public final class FunctionRegistry {
     system.registerUDF(UDFToShort.class.getSimpleName(), UDFToShort.class, false, UDFToShort.class.getSimpleName());
     system.registerUDF(UDFToByte.class.getSimpleName(), UDFToByte.class, false, UDFToByte.class.getSimpleName());
 
+    system.registerGenericUDF(serdeConstants.STRING_TYPE_NAME, GenericUDFToString.class);
     system.registerGenericUDF(serdeConstants.DATE_TYPE_NAME, GenericUDFToDate.class);
     system.registerGenericUDF(serdeConstants.TIMESTAMP_TYPE_NAME, GenericUDFTimestamp.class);
     system.registerGenericUDF(serdeConstants.TIMESTAMPLOCALTZ_TYPE_NAME, GenericUDFToTimestampLocalTZ.class);
@@ -1626,7 +1625,7 @@ public final class FunctionRegistry {
     return udfClass == UDFToBoolean.class || udfClass == UDFToByte.class ||
         udfClass == UDFToDouble.class || udfClass == UDFToFloat.class ||
         udfClass == UDFToInteger.class || udfClass == UDFToLong.class ||
-        udfClass == UDFToShort.class || udfClass == UDFToString.class ||
+        udfClass == UDFToShort.class || udfClass == GenericUDFToString.class ||
         udfClass == GenericUDFToVarchar.class || udfClass == GenericUDFToChar.class ||
         udfClass == GenericUDFTimestamp.class || udfClass == GenericUDFToBinary.class ||
         udfClass == GenericUDFToDate.class || udfClass == GenericUDFToDecimal.class ||

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java
index 5631347..20cc894 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java
@@ -440,6 +440,7 @@ public class VectorizationContext {
   // Set of UDF classes for type casting data types in row-mode.
   private static Set<Class<?>> castExpressionUdfs = new HashSet<Class<?>>();
   static {
+    castExpressionUdfs.add(GenericUDFToString.class);
     castExpressionUdfs.add(GenericUDFToDecimal.class);
     castExpressionUdfs.add(GenericUDFToBinary.class);
     castExpressionUdfs.add(GenericUDFToDate.class);
@@ -454,7 +455,6 @@ public class VectorizationContext {
     castExpressionUdfs.add(UDFToBoolean.class);
     castExpressionUdfs.add(UDFToDouble.class);
     castExpressionUdfs.add(UDFToFloat.class);
-    castExpressionUdfs.add(UDFToString.class);
     castExpressionUdfs.add(UDFToInteger.class);
     castExpressionUdfs.add(UDFToLong.class);
     castExpressionUdfs.add(UDFToShort.class);
@@ -1139,7 +1139,7 @@ public class VectorizationContext {
         udfClass = new UDFToDouble();
         break;
       case STRING:
-        udfClass = new UDFToString();
+        genericUdf = new GenericUDFToString();
         break;
       case CHAR:
         genericUdf = new GenericUDFToChar();
@@ -1207,11 +1207,7 @@ public class VectorizationContext {
           || udfClass.equals(UDFConv.class)
           || udfClass.equals(UDFFromUnixTime.class) && isIntFamily(arg0Type(expr))
           || isCastToIntFamily(udfClass) && isStringFamily(arg0Type(expr))
-          || isCastToFloatFamily(udfClass) && isStringFamily(arg0Type(expr))
-          || udfClass.equals(UDFToString.class) &&
-               (arg0Type(expr).equals("timestamp")
-                   || arg0Type(expr).equals("double")
-                   || arg0Type(expr).equals("float"))) {
+          || isCastToFloatFamily(udfClass) && isStringFamily(arg0Type(expr))) {
         return true;
       }
     } else if ((gudf instanceof GenericUDFTimestamp && isStringFamily(arg0Type(expr)))
@@ -1229,16 +1225,13 @@ public class VectorizationContext {
             || gudf instanceof GenericUDFCase
             || gudf instanceof GenericUDFWhen) {
       return true;
-    } else if (gudf instanceof GenericUDFToChar &&
+    } else if ((gudf instanceof GenericUDFToString
+                   || gudf instanceof GenericUDFToChar
+                   || gudf instanceof GenericUDFToVarchar) &&
                (arg0Type(expr).equals("timestamp")
                    || arg0Type(expr).equals("double")
                    || arg0Type(expr).equals("float"))) {
       return true;
-    } else if (gudf instanceof GenericUDFToVarchar &&
-            (arg0Type(expr).equals("timestamp")
-                || arg0Type(expr).equals("double")
-                || arg0Type(expr).equals("float"))) {
-      return true;
     } else if (gudf instanceof GenericUDFBetween && (mode == VectorExpressionDescriptor.Mode.PROJECTION)) {
       // between has 4 args here, but can be vectorized like this
       return true;
@@ -2061,6 +2054,8 @@ public class VectorizationContext {
     } else if (udf instanceof GenericUDFBridge) {
       ve = getGenericUDFBridgeVectorExpression((GenericUDFBridge) udf, childExpr, mode,
           returnType);
+    } else if (udf instanceof GenericUDFToString) {
+      ve = getCastToString(childExpr, returnType);
     } else if (udf instanceof GenericUDFToDecimal) {
       ve = getCastToDecimal(childExpr, returnType);
     } else if (udf instanceof GenericUDFToChar) {
@@ -2508,8 +2503,6 @@ public class VectorizationContext {
       ve = getCastToBoolean(childExpr);
     } else if (isCastToFloatFamily(cl)) {
       ve = getCastToDoubleExpression(cl, childExpr, returnType);
-    } else if (cl.equals(UDFToString.class)) {
-      ve = getCastToString(childExpr, returnType);
     }
     if (ve == null && childExpr instanceof ExprNodeGenericFuncDesc) {
       ve = getCustomUDFExpression((ExprNodeGenericFuncDesc) childExpr, mode);
@@ -2585,7 +2578,8 @@ public class VectorizationContext {
       return ((Number) scalar).toString();
     case DECIMAL:
       HiveDecimal decimalVal = (HiveDecimal) scalar;
-      return decimalVal.toString();
+      DecimalTypeInfo decType = (DecimalTypeInfo) type;
+      return decimalVal.toFormatString(decType.getScale());
     default:
       throw new HiveException("Unsupported type "+typename+" for cast to String");
     }

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/CastDecimalToString.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/CastDecimalToString.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/CastDecimalToString.java
index a3a0e9d..77bfe13 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/CastDecimalToString.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/CastDecimalToString.java
@@ -60,7 +60,7 @@ public class CastDecimalToString extends DecimalToStringUnaryUDF {
   @Override
   protected void func(BytesColumnVector outV, DecimalColumnVector inV, int i) {
     HiveDecimalWritable decWritable = inV.vector[i];
-    final int byteIndex = decWritable.toBytes(scratchBuffer);
+    final int byteIndex = decWritable.toFormatBytes(inV.scale, scratchBuffer);
     assign(outV, i, scratchBuffer, byteIndex, HiveDecimal.SCRATCH_BUFFER_LEN_TO_BYTES - byteIndex);
   }
 }

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/java/org/apache/hadoop/hive/ql/index/IndexPredicateAnalyzer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/index/IndexPredicateAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/index/IndexPredicateAnalyzer.java
index 6a3f3b4..da31f4d 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/index/IndexPredicateAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/index/IndexPredicateAnalyzer.java
@@ -49,6 +49,7 @@ import org.apache.hadoop.hive.ql.udf.generic.GenericUDFToBinary;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFToChar;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFToDate;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFToDecimal;
+import org.apache.hadoop.hive.ql.udf.generic.GenericUDFToString;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFToUnixTimeStamp;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFToUtcTimestamp;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFToVarchar;
@@ -194,6 +195,7 @@ public class IndexPredicateAnalyzer {
     GenericUDF udf = funcDesc.getGenericUDF();
     // check if its a simple cast expression.
     if ((udf instanceof GenericUDFBridge || udf instanceof GenericUDFToBinary
+        || udf instanceof GenericUDFToString
         || udf instanceof GenericUDFToChar || udf instanceof GenericUDFToVarchar
         || udf instanceof GenericUDFToDecimal || udf instanceof GenericUDFToDate
         || udf instanceof GenericUDFToUnixTimeStamp || udf instanceof GenericUDFToUtcTimestamp)

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/RexNodeConverter.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/RexNodeConverter.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/RexNodeConverter.java
index 0a9ab2b..f544f58 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/RexNodeConverter.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/RexNodeConverter.java
@@ -84,6 +84,7 @@ import org.apache.hadoop.hive.ql.udf.generic.GenericUDFToBinary;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFToChar;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFToDate;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFToDecimal;
+import org.apache.hadoop.hive.ql.udf.generic.GenericUDFToString;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFToTimestampLocalTZ;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFToUnixTimeStamp;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFToVarchar;
@@ -376,7 +377,7 @@ public class RexNodeConverter {
           if (udfClassName.equals("UDFToBoolean") || udfClassName.equals("UDFToByte")
               || udfClassName.equals("UDFToDouble") || udfClassName.equals("UDFToInteger")
               || udfClassName.equals("UDFToLong") || udfClassName.equals("UDFToShort")
-              || udfClassName.equals("UDFToFloat") || udfClassName.equals("UDFToString"))
+              || udfClassName.equals("UDFToFloat"))
             castExpr = true;
         }
       }
@@ -392,6 +393,7 @@ public class RexNodeConverter {
     if (childRexNodeLst != null && childRexNodeLst.size() == 1) {
       GenericUDF udf = func.getGenericUDF();
       if ((udf instanceof GenericUDFToChar) || (udf instanceof GenericUDFToVarchar)
+          || (udf instanceof GenericUDFToString)
           || (udf instanceof GenericUDFToDecimal) || (udf instanceof GenericUDFToDate)
           || (udf instanceof GenericUDFTimestamp) || (udf instanceof GenericUDFToTimestampLocalTZ)
           || (udf instanceof GenericUDFToBinary) || castExprUsingUDFBridge(udf)) {

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
index 40bd075..eb5b1a8 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
@@ -206,7 +206,6 @@ import org.apache.hadoop.hive.ql.udf.UDFToFloat;
 import org.apache.hadoop.hive.ql.udf.UDFToInteger;
 import org.apache.hadoop.hive.ql.udf.UDFToLong;
 import org.apache.hadoop.hive.ql.udf.UDFToShort;
-import org.apache.hadoop.hive.ql.udf.UDFToString;
 import org.apache.hadoop.hive.ql.udf.UDFWeekOfYear;
 import org.apache.hadoop.hive.ql.udf.UDFYear;
 import org.apache.hadoop.hive.ql.udf.generic.*;
@@ -488,7 +487,7 @@ public class Vectorizer implements PhysicalPlanResolver {
     supportedGenericUDFs.add(UDFToBoolean.class);
     supportedGenericUDFs.add(UDFToFloat.class);
     supportedGenericUDFs.add(UDFToDouble.class);
-    supportedGenericUDFs.add(UDFToString.class);
+    supportedGenericUDFs.add(GenericUDFToString.class);
     supportedGenericUDFs.add(GenericUDFTimestamp.class);
     supportedGenericUDFs.add(GenericUDFToDecimal.class);
     supportedGenericUDFs.add(GenericUDFToDate.class);

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToString.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToString.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToString.java
deleted file mode 100755
index a16d429..0000000
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToString.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.hadoop.hive.ql.udf;
-
-import org.apache.hadoop.hive.ql.exec.UDF;
-import org.apache.hadoop.hive.serde2.ByteStream;
-import org.apache.hadoop.hive.serde2.io.ByteWritable;
-import org.apache.hadoop.hive.serde2.io.DateWritableV2;
-import org.apache.hadoop.hive.serde2.io.DoubleWritable;
-import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
-import org.apache.hadoop.hive.serde2.io.ShortWritable;
-import org.apache.hadoop.hive.serde2.io.TimestampLocalTZWritable;
-import org.apache.hadoop.hive.serde2.io.TimestampWritableV2;
-import org.apache.hadoop.hive.serde2.lazy.LazyInteger;
-import org.apache.hadoop.hive.serde2.lazy.LazyLong;
-import org.apache.hadoop.io.BooleanWritable;
-import org.apache.hadoop.io.BytesWritable;
-import org.apache.hadoop.io.FloatWritable;
-import org.apache.hadoop.io.IntWritable;
-import org.apache.hadoop.io.LongWritable;
-import org.apache.hadoop.io.NullWritable;
-import org.apache.hadoop.io.Text;
-
-/**
- * UDFToString.
- *
- */
-public class UDFToString extends UDF {
-  private final Text t = new Text();
-  private final ByteStream.Output out = new ByteStream.Output();
-
-  public UDFToString() {
-  }
-
-  public Text evaluate(NullWritable i) {
-    return null;
-  }
-
-  private final byte[] trueBytes = {'T', 'R', 'U', 'E'};
-  private final byte[] falseBytes = {'F', 'A', 'L', 'S', 'E'};
-
-  public Text evaluate(BooleanWritable i) {
-    if (i == null) {
-      return null;
-    } else {
-      t.clear();
-      t.set(i.get() ? trueBytes : falseBytes);
-      return t;
-    }
-  }
-
-  public Text evaluate(ByteWritable i) {
-    if (i == null) {
-      return null;
-    } else {
-      out.reset();
-      LazyInteger.writeUTF8NoException(out, i.get());
-      t.set(out.getData(), 0, out.getLength());
-      return t;
-    }
-  }
-
-  public Text evaluate(ShortWritable i) {
-    if (i == null) {
-      return null;
-    } else {
-      out.reset();
-      LazyInteger.writeUTF8NoException(out, i.get());
-      t.set(out.getData(), 0, out.getLength());
-      return t;
-    }
-  }
-
-  public Text evaluate(IntWritable i) {
-    if (i == null) {
-      return null;
-    } else {
-      out.reset();
-      LazyInteger.writeUTF8NoException(out, i.get());
-      t.set(out.getData(), 0, out.getLength());
-      return t;
-    }
-  }
-
-  public Text evaluate(LongWritable i) {
-    if (i == null) {
-      return null;
-    } else {
-      out.reset();
-      LazyLong.writeUTF8NoException(out, i.get());
-      t.set(out.getData(), 0, out.getLength());
-      return t;
-    }
-  }
-
-  public Text evaluate(FloatWritable i) {
-    if (i == null) {
-      return null;
-    } else {
-      t.set(i.toString());
-      return t;
-    }
-  }
-
-  public Text evaluate(DoubleWritable i) {
-    if (i == null) {
-      return null;
-    } else {
-      t.set(i.toString());
-      return t;
-    }
-  }
-
-  public Text evaluate(Text i) {
-      if (i == null) {
-          return null;
-      }
-      i.set(i.toString());
-      return i;
-  }
-
-  public Text evaluate(DateWritableV2 d) {
-    if (d == null) {
-      return null;
-    } else {
-      t.set(d.toString());
-      return t;
-    }
-  }
-
-  public Text evaluate(TimestampWritableV2 i) {
-    if (i == null) {
-      return null;
-    } else {
-      t.set(i.toString());
-      return t;
-    }
-  }
-
-  public Text evaluate(TimestampLocalTZWritable i) {
-    if (i == null) {
-      return null;
-    } else {
-      t.set(i.toString());
-      return t;
-    }
-  }
-
-  public Text evaluate(HiveDecimalWritable i) {
-    if (i == null) {
-      return null;
-    } else {
-      t.set(i.toString());
-      return t;
-    }
-  }
-
-  public Text evaluate (BytesWritable bw) {
-    if (null == bw) {
-      return null;
-    }
-    t.set(bw.getBytes(),0,bw.getLength());
-    return t;
-  }
-}

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFToString.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFToString.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFToString.java
new file mode 100644
index 0000000..d576441
--- /dev/null
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFToString.java
@@ -0,0 +1,79 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hive.ql.udf.generic;
+
+import org.apache.hadoop.hive.ql.exec.Description;
+import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
+import org.apache.hadoop.hive.ql.metadata.HiveException;
+import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorConverter.TextConverter;
+import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Description(name = "string",
+value = "CAST(<value> as STRING) - Converts the argument to a string value.",
+extended = "Example:\n "
++ "  > SELECT CAST(1234 AS string) FROM src LIMIT 1;\n"
++ "  '1234'")
+public class GenericUDFToString extends GenericUDF {
+  private static final Logger LOG = LoggerFactory.getLogger(GenericUDFToString.class.getName());
+
+  private transient PrimitiveObjectInspector argumentOI;
+  private transient TextConverter converter;
+
+  public GenericUDFToString() {
+  }
+
+  @Override
+  public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {
+    if (arguments.length != 1) {
+      throw new UDFArgumentException("STRING cast requires a value argument");
+    }
+    try {
+      argumentOI = (PrimitiveObjectInspector) arguments[0];
+    } catch (ClassCastException e) {
+      throw new UDFArgumentException(
+          "The function STRING takes only primitive types");
+    }
+
+    converter = new TextConverter(argumentOI);
+    return PrimitiveObjectInspectorFactory.writableStringObjectInspector;
+  }
+
+  @Override
+  public Object evaluate(DeferredObject[] arguments) throws HiveException {
+      Object o0 = arguments[0].get();
+      if (o0 == null) {
+        return null;
+      }
+
+      return converter.convert(o0);
+  }
+
+  @Override
+  public String getDisplayString(String[] children) {
+    assert (children.length == 1);
+    StringBuilder sb = new StringBuilder();
+    sb.append("CAST( ");
+    sb.append(children[0]);
+    sb.append(" AS STRING)");
+    return sb.toString();
+  }
+}

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorTypeCasts.java
----------------------------------------------------------------------
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorTypeCasts.java b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorTypeCasts.java
index 4ed087e..e9be8c1 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorTypeCasts.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorTypeCasts.java
@@ -435,18 +435,18 @@ public class TestVectorTypeCasts {
     BytesColumnVector r = (BytesColumnVector) b.cols[1];
 
     // As of HIVE-8745, these decimal values should be trimmed of trailing zeros.
-    byte[] v = toBytes("1.1");
+    byte[] v = toBytes("1.10");
     assertTrue(((Integer) v.length).toString() + " " + r.length[0], v.length == r.length[0]);
     Assert.assertEquals(0,
         StringExpr.compare(v, 0, v.length,
             r.vector[0], r.start[0], r.length[0]));
 
-    v = toBytes("-2.2");
+    v = toBytes("-2.20");
     Assert.assertEquals(0,
         StringExpr.compare(v, 0, v.length,
             r.vector[1], r.start[1], r.length[1]));
 
-    v = toBytes("9999999999999999");
+    v = toBytes("9999999999999999.00");
     Assert.assertEquals(0,
         StringExpr.compare(v, 0, v.length,
             r.vector[2], r.start[2], r.length[2]));

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/autoColumnStats_6.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/autoColumnStats_6.q.out b/ql/src/test/results/clientpositive/autoColumnStats_6.q.out
index 70788fd..98b5bc0 100644
--- a/ql/src/test/results/clientpositive/autoColumnStats_6.q.out
+++ b/ql/src/test/results/clientpositive/autoColumnStats_6.q.out
@@ -54,7 +54,7 @@ STAGE PLANS:
                     serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
                     name: default.orcfile_merge2a
               Select Operator
-                expressions: _col0 (type: int), _col1 (type: string), '1' (type: string), UDFToString(_col2) (type: string), UDFToString(_col3) (type: string)
+                expressions: _col0 (type: int), _col1 (type: string), '1' (type: string), CAST( _col2 AS STRING) (type: string), CAST( _col3 AS STRING) (type: string)
                 outputColumnNames: key, value, one, two, three
                 Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE
                 Group By Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/bucket_map_join_spark1.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/bucket_map_join_spark1.q.out b/ql/src/test/results/clientpositive/bucket_map_join_spark1.q.out
index 7764706..6da9934 100644
--- a/ql/src/test/results/clientpositive/bucket_map_join_spark1.q.out
+++ b/ql/src/test/results/clientpositive/bucket_map_join_spark1.q.out
@@ -233,7 +233,7 @@ STAGE PLANS:
                   Position of Big Table: 1
                   Statistics: Num rows: 163 Data size: 63932 Basic stats: PARTIAL Column stats: NONE
                   Select Operator
-                    expressions: UDFToString(_col0) (type: string), _col1 (type: string), _col3 (type: string)
+                    expressions: CAST( _col0 AS STRING) (type: string), _col1 (type: string), _col3 (type: string)
                     outputColumnNames: _col0, _col1, _col2
                     Statistics: Num rows: 163 Data size: 63932 Basic stats: PARTIAL Column stats: NONE
                     File Output Operator
@@ -684,7 +684,7 @@ STAGE PLANS:
                   Position of Big Table: 1
                   Statistics: Num rows: 163 Data size: 63932 Basic stats: PARTIAL Column stats: NONE
                   Select Operator
-                    expressions: UDFToString(_col0) (type: string), _col1 (type: string), _col3 (type: string)
+                    expressions: CAST( _col0 AS STRING) (type: string), _col1 (type: string), _col3 (type: string)
                     outputColumnNames: _col0, _col1, _col2
                     Statistics: Num rows: 163 Data size: 63932 Basic stats: PARTIAL Column stats: NONE
                     File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/bucket_map_join_spark2.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/bucket_map_join_spark2.q.out b/ql/src/test/results/clientpositive/bucket_map_join_spark2.q.out
index 090a0db..b086c0e 100644
--- a/ql/src/test/results/clientpositive/bucket_map_join_spark2.q.out
+++ b/ql/src/test/results/clientpositive/bucket_map_join_spark2.q.out
@@ -217,7 +217,7 @@ STAGE PLANS:
                   Position of Big Table: 0
                   Statistics: Num rows: 163 Data size: 63932 Basic stats: PARTIAL Column stats: NONE
                   Select Operator
-                    expressions: UDFToString(_col0) (type: string), _col1 (type: string), _col3 (type: string)
+                    expressions: CAST( _col0 AS STRING) (type: string), _col1 (type: string), _col3 (type: string)
                     outputColumnNames: _col0, _col1, _col2
                     Statistics: Num rows: 163 Data size: 63932 Basic stats: PARTIAL Column stats: NONE
                     File Output Operator
@@ -668,7 +668,7 @@ STAGE PLANS:
                   Position of Big Table: 0
                   Statistics: Num rows: 163 Data size: 63932 Basic stats: PARTIAL Column stats: NONE
                   Select Operator
-                    expressions: UDFToString(_col0) (type: string), _col1 (type: string), _col3 (type: string)
+                    expressions: CAST( _col0 AS STRING) (type: string), _col1 (type: string), _col3 (type: string)
                     outputColumnNames: _col0, _col1, _col2
                     Statistics: Num rows: 163 Data size: 63932 Basic stats: PARTIAL Column stats: NONE
                     File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/bucket_map_join_spark3.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/bucket_map_join_spark3.q.out b/ql/src/test/results/clientpositive/bucket_map_join_spark3.q.out
index 692b8e7..bd91b44 100644
--- a/ql/src/test/results/clientpositive/bucket_map_join_spark3.q.out
+++ b/ql/src/test/results/clientpositive/bucket_map_join_spark3.q.out
@@ -217,7 +217,7 @@ STAGE PLANS:
                   Position of Big Table: 1
                   Statistics: Num rows: 163 Data size: 63932 Basic stats: PARTIAL Column stats: NONE
                   Select Operator
-                    expressions: UDFToString(_col0) (type: string), _col1 (type: string), _col3 (type: string)
+                    expressions: CAST( _col0 AS STRING) (type: string), _col1 (type: string), _col3 (type: string)
                     outputColumnNames: _col0, _col1, _col2
                     Statistics: Num rows: 163 Data size: 63932 Basic stats: PARTIAL Column stats: NONE
                     File Output Operator
@@ -668,7 +668,7 @@ STAGE PLANS:
                   Position of Big Table: 1
                   Statistics: Num rows: 163 Data size: 63932 Basic stats: PARTIAL Column stats: NONE
                   Select Operator
-                    expressions: UDFToString(_col0) (type: string), _col1 (type: string), _col3 (type: string)
+                    expressions: CAST( _col0 AS STRING) (type: string), _col1 (type: string), _col3 (type: string)
                     outputColumnNames: _col0, _col1, _col2
                     Statistics: Num rows: 163 Data size: 63932 Basic stats: PARTIAL Column stats: NONE
                     File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/bucketmapjoin5.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/bucketmapjoin5.q.out b/ql/src/test/results/clientpositive/bucketmapjoin5.q.out
index 79da333..a4d5e4e 100644
--- a/ql/src/test/results/clientpositive/bucketmapjoin5.q.out
+++ b/ql/src/test/results/clientpositive/bucketmapjoin5.q.out
@@ -239,7 +239,7 @@ STAGE PLANS:
                 Statistics: Num rows: 327 Data size: 127864 Basic stats: PARTIAL Column stats: NONE
                 BucketMapJoin: true
                 Select Operator
-                  expressions: UDFToString(_col0) (type: string), _col1 (type: string), _col6 (type: string)
+                  expressions: CAST( _col0 AS STRING) (type: string), _col1 (type: string), _col6 (type: string)
                   outputColumnNames: _col0, _col1, _col2
                   Statistics: Num rows: 327 Data size: 127864 Basic stats: PARTIAL Column stats: NONE
                   File Output Operator
@@ -843,7 +843,7 @@ STAGE PLANS:
                 Statistics: Num rows: 171 Data size: 67364 Basic stats: PARTIAL Column stats: NONE
                 BucketMapJoin: true
                 Select Operator
-                  expressions: UDFToString(_col0) (type: string), _col1 (type: string), _col6 (type: string)
+                  expressions: CAST( _col0 AS STRING) (type: string), _col1 (type: string), _col6 (type: string)
                   outputColumnNames: _col0, _col1, _col2
                   Statistics: Num rows: 171 Data size: 67364 Basic stats: PARTIAL Column stats: NONE
                   File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/bucketmapjoin_negative.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/bucketmapjoin_negative.q.out b/ql/src/test/results/clientpositive/bucketmapjoin_negative.q.out
index 1a53c37..10c91cd 100644
--- a/ql/src/test/results/clientpositive/bucketmapjoin_negative.q.out
+++ b/ql/src/test/results/clientpositive/bucketmapjoin_negative.q.out
@@ -180,7 +180,7 @@ STAGE PLANS:
                 Position of Big Table: 0
                 Statistics: Num rows: 154 Data size: 46200 Basic stats: PARTIAL Column stats: NONE
                 Select Operator
-                  expressions: UDFToString(_col0) (type: string), _col1 (type: string), _col6 (type: string)
+                  expressions: CAST( _col0 AS STRING) (type: string), _col1 (type: string), _col6 (type: string)
                   outputColumnNames: _col0, _col1, _col2
                   Statistics: Num rows: 154 Data size: 46200 Basic stats: PARTIAL Column stats: NONE
                   File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/bucketmapjoin_negative2.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/bucketmapjoin_negative2.q.out b/ql/src/test/results/clientpositive/bucketmapjoin_negative2.q.out
index 426b051..3009c47 100644
--- a/ql/src/test/results/clientpositive/bucketmapjoin_negative2.q.out
+++ b/ql/src/test/results/clientpositive/bucketmapjoin_negative2.q.out
@@ -244,7 +244,7 @@ STAGE PLANS:
                 Statistics: Num rows: 171 Data size: 67364 Basic stats: PARTIAL Column stats: NONE
                 BucketMapJoin: true
                 Select Operator
-                  expressions: UDFToString(_col0) (type: string), _col1 (type: string), _col6 (type: string)
+                  expressions: CAST( _col0 AS STRING) (type: string), _col1 (type: string), _col6 (type: string)
                   outputColumnNames: _col0, _col1, _col2
                   Statistics: Num rows: 171 Data size: 67364 Basic stats: PARTIAL Column stats: NONE
                   File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/bucketsortoptimize_insert_3.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/bucketsortoptimize_insert_3.q.out b/ql/src/test/results/clientpositive/bucketsortoptimize_insert_3.q.out
index b798fa2..6db8bfb 100644
--- a/ql/src/test/results/clientpositive/bucketsortoptimize_insert_3.q.out
+++ b/ql/src/test/results/clientpositive/bucketsortoptimize_insert_3.q.out
@@ -179,7 +179,7 @@ STAGE PLANS:
                 value expressions: _col0 (type: int), _col1 (type: string)
       Reduce Operator Tree:
         Select Operator
-          expressions: UDFToString(VALUE._col0) (type: string), UDFToInteger(VALUE._col1) (type: int)
+          expressions: CAST( VALUE._col0 AS STRING) (type: string), UDFToInteger(VALUE._col1) (type: int)
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE
           File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/char_pad_convert.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/char_pad_convert.q.out b/ql/src/test/results/clientpositive/char_pad_convert.q.out
index b63dc25..df3348f 100644
--- a/ql/src/test/results/clientpositive/char_pad_convert.q.out
+++ b/ql/src/test/results/clientpositive/char_pad_convert.q.out
@@ -134,7 +134,7 @@ POSTHOOK: query: select lpad(f, 4, ' '),
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@over1k_n6
 #### A masked pattern was here ####
-74.7	42	zzzzzTRUE	20	ddd45.4	yard du
+74.7	42	zzzzzTRUE	20	dd45.40	yard du
 26.4	37	zzzzzTRUE	20	dd29.62	history
 96.9	18	zzzzFALSE	20	dd27.32	history
 13.0	34	zzzzFALSE	20	dd23.91	topolog
@@ -180,7 +180,7 @@ POSTHOOK: query: select rpad(f, 4, ' '),
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@over1k_n6
 #### A masked pattern was here ####
-74.7	42	TRUEzzzzz	20	45.4ddd	yard du
+74.7	42	TRUEzzzzz	20	45.40dd	yard du
 26.4	37	TRUEzzzzz	20	29.62dd	history
 96.9	18	FALSEzzzz	20	27.32dd	history
 13.0	34	FALSEzzzz	20	23.91dd	topolog

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/column_pruner_multiple_children.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/column_pruner_multiple_children.q.out b/ql/src/test/results/clientpositive/column_pruner_multiple_children.q.out
index 4b0aaab..cd0c969 100644
--- a/ql/src/test/results/clientpositive/column_pruner_multiple_children.q.out
+++ b/ql/src/test/results/clientpositive/column_pruner_multiple_children.q.out
@@ -56,7 +56,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 1 Data size: 9 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 1 Data size: 9 Basic stats: COMPLETE Column stats: NONE
             File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/decimal_2.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/decimal_2.q.out b/ql/src/test/results/clientpositive/decimal_2.q.out
index 22f4c33..aeebf9e 100644
--- a/ql/src/test/results/clientpositive/decimal_2.q.out
+++ b/ql/src/test/results/clientpositive/decimal_2.q.out
@@ -100,7 +100,7 @@ POSTHOOK: query: select cast(t as string) from decimal_2_n1
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_2_n1
 #### A masked pattern was here ####
-17.29
+17.290000000
 PREHOOK: query: insert overwrite table decimal_2_n1
   select cast('3404045.5044003' as decimal(18,9)) from src tablesample (1 rows)
 PREHOOK: type: QUERY
@@ -183,7 +183,7 @@ POSTHOOK: query: select cast(t as string) from decimal_2_n1
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_2_n1
 #### A masked pattern was here ####
-3404045.5044003
+3404045.504400300
 PREHOOK: query: select cast(3.14 as decimal(4,2)) from decimal_2_n1
 PREHOOK: type: QUERY
 PREHOOK: Input: default@decimal_2_n1

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/groupby12.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby12.q.out b/ql/src/test/results/clientpositive/groupby12.q.out
index 7317c4e..43fdf6a 100644
--- a/ql/src/test/results/clientpositive/groupby12.q.out
+++ b/ql/src/test/results/clientpositive/groupby12.q.out
@@ -45,7 +45,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1, _col2
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col1) (type: int), UDFToString(_col2) (type: string)
+            expressions: UDFToInteger(_col1) (type: int), CAST( _col2 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/groupby5.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby5.q.out b/ql/src/test/results/clientpositive/groupby5.q.out
index b3c2da2..7e9d928 100644
--- a/ql/src/test/results/clientpositive/groupby5.q.out
+++ b/ql/src/test/results/clientpositive/groupby5.q.out
@@ -77,7 +77,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/groupby5_noskew.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby5_noskew.q.out b/ql/src/test/results/clientpositive/groupby5_noskew.q.out
index 5307bc7..8a7b1aa 100644
--- a/ql/src/test/results/clientpositive/groupby5_noskew.q.out
+++ b/ql/src/test/results/clientpositive/groupby5_noskew.q.out
@@ -50,7 +50,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/groupby7_map.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby7_map.q.out b/ql/src/test/results/clientpositive/groupby7_map.q.out
index 5b4b9af..c27f02e 100644
--- a/ql/src/test/results/clientpositive/groupby7_map.q.out
+++ b/ql/src/test/results/clientpositive/groupby7_map.q.out
@@ -81,7 +81,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -176,7 +176,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/groupby7_map_multi_single_reducer.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby7_map_multi_single_reducer.q.out b/ql/src/test/results/clientpositive/groupby7_map_multi_single_reducer.q.out
index 00d26b9..294d2ec 100644
--- a/ql/src/test/results/clientpositive/groupby7_map_multi_single_reducer.q.out
+++ b/ql/src/test/results/clientpositive/groupby7_map_multi_single_reducer.q.out
@@ -61,7 +61,7 @@ STAGE PLANS:
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             Select Operator
-              expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+              expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
               outputColumnNames: _col0, _col1
               Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
               File Output Operator
@@ -94,7 +94,7 @@ STAGE PLANS:
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             Select Operator
-              expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+              expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
               outputColumnNames: _col0, _col1
               Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
               File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/groupby7_map_skew.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby7_map_skew.q.out b/ql/src/test/results/clientpositive/groupby7_map_skew.q.out
index 089a14e..10a3ae4 100644
--- a/ql/src/test/results/clientpositive/groupby7_map_skew.q.out
+++ b/ql/src/test/results/clientpositive/groupby7_map_skew.q.out
@@ -108,7 +108,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -228,7 +228,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/groupby7_noskew.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby7_noskew.q.out b/ql/src/test/results/clientpositive/groupby7_noskew.q.out
index ec83bb6..aaa09b8 100644
--- a/ql/src/test/results/clientpositive/groupby7_noskew.q.out
+++ b/ql/src/test/results/clientpositive/groupby7_noskew.q.out
@@ -70,7 +70,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -160,7 +160,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/groupby7_noskew_multi_single_reducer.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby7_noskew_multi_single_reducer.q.out b/ql/src/test/results/clientpositive/groupby7_noskew_multi_single_reducer.q.out
index c844e51..abe4ff9 100644
--- a/ql/src/test/results/clientpositive/groupby7_noskew_multi_single_reducer.q.out
+++ b/ql/src/test/results/clientpositive/groupby7_noskew_multi_single_reducer.q.out
@@ -101,7 +101,7 @@ STAGE PLANS:
             Number of rows: 10
             Statistics: Num rows: 10 Data size: 100 Basic stats: COMPLETE Column stats: NONE
             Select Operator
-              expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+              expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
               outputColumnNames: _col0, _col1
               Statistics: Num rows: 10 Data size: 100 Basic stats: COMPLETE Column stats: NONE
               File Output Operator
@@ -192,7 +192,7 @@ STAGE PLANS:
             Number of rows: 10
             Statistics: Num rows: 10 Data size: 100 Basic stats: COMPLETE Column stats: NONE
             Select Operator
-              expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+              expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
               outputColumnNames: _col0, _col1
               Statistics: Num rows: 10 Data size: 100 Basic stats: COMPLETE Column stats: NONE
               File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/groupby8.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby8.q.out b/ql/src/test/results/clientpositive/groupby8.q.out
index 2d8ea6f..ceb8a5b 100644
--- a/ql/src/test/results/clientpositive/groupby8.q.out
+++ b/ql/src/test/results/clientpositive/groupby8.q.out
@@ -98,7 +98,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -235,7 +235,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -1049,7 +1049,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -1186,7 +1186,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/groupby8_map.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby8_map.q.out b/ql/src/test/results/clientpositive/groupby8_map.q.out
index cf3ade6..529970c 100644
--- a/ql/src/test/results/clientpositive/groupby8_map.q.out
+++ b/ql/src/test/results/clientpositive/groupby8_map.q.out
@@ -60,7 +60,7 @@ STAGE PLANS:
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             Select Operator
-              expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+              expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
               outputColumnNames: _col0, _col1
               Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
               File Output Operator
@@ -93,7 +93,7 @@ STAGE PLANS:
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             Select Operator
-              expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+              expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
               outputColumnNames: _col0, _col1
               Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
               File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/groupby8_map_skew.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby8_map_skew.q.out b/ql/src/test/results/clientpositive/groupby8_map_skew.q.out
index 86598aa..f5bcc5a 100644
--- a/ql/src/test/results/clientpositive/groupby8_map_skew.q.out
+++ b/ql/src/test/results/clientpositive/groupby8_map_skew.q.out
@@ -107,7 +107,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -226,7 +226,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/groupby8_noskew.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby8_noskew.q.out b/ql/src/test/results/clientpositive/groupby8_noskew.q.out
index a3d3656..ed6c3a5 100644
--- a/ql/src/test/results/clientpositive/groupby8_noskew.q.out
+++ b/ql/src/test/results/clientpositive/groupby8_noskew.q.out
@@ -60,7 +60,7 @@ STAGE PLANS:
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             Select Operator
-              expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+              expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
               outputColumnNames: _col0, _col1
               Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
               File Output Operator
@@ -88,7 +88,7 @@ STAGE PLANS:
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             Select Operator
-              expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+              expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
               outputColumnNames: _col0, _col1
               Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
               File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/groupby9.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby9.q.out b/ql/src/test/results/clientpositive/groupby9.q.out
index 8d97bdf..98d437f 100644
--- a/ql/src/test/results/clientpositive/groupby9.q.out
+++ b/ql/src/test/results/clientpositive/groupby9.q.out
@@ -80,7 +80,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -174,7 +174,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1, _col2
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), _col1 (type: string), UDFToString(_col2) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), _col1 (type: string), CAST( _col2 AS STRING) (type: string)
             outputColumnNames: _col0, _col1, _col2
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -953,7 +953,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -1047,7 +1047,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1, _col2
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col1) (type: int), _col0 (type: string), UDFToString(_col2) (type: string)
+            expressions: UDFToInteger(_col1) (type: int), _col0 (type: string), CAST( _col2 AS STRING) (type: string)
             outputColumnNames: _col0, _col1, _col2
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -1826,7 +1826,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -1920,7 +1920,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1, _col2
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), _col1 (type: string), UDFToString(_col2) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), _col1 (type: string), CAST( _col2 AS STRING) (type: string)
             outputColumnNames: _col0, _col1, _col2
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -2701,7 +2701,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -2796,7 +2796,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1, _col2
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), _col1 (type: string), UDFToString(_col2) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), _col1 (type: string), CAST( _col2 AS STRING) (type: string)
             outputColumnNames: _col0, _col1, _col2
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -3575,7 +3575,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -3669,7 +3669,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1, _col2
           Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col1) (type: int), _col0 (type: string), UDFToString(_col2) (type: string)
+            expressions: UDFToInteger(_col1) (type: int), _col0 (type: string), CAST( _col2 AS STRING) (type: string)
             outputColumnNames: _col0, _col1, _col2
             Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE Column stats: NONE
             File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/groupby_cube_multi_gby.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby_cube_multi_gby.q.out b/ql/src/test/results/clientpositive/groupby_cube_multi_gby.q.out
index 5f08df6..caa031b 100644
--- a/ql/src/test/results/clientpositive/groupby_cube_multi_gby.q.out
+++ b/ql/src/test/results/clientpositive/groupby_cube_multi_gby.q.out
@@ -84,7 +84,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1, _col2
           Statistics: Num rows: 1000 Data size: 10624 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: _col0 (type: string), UDFToString(_col2) (type: string)
+            expressions: _col0 (type: string), CAST( _col2 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 1000 Data size: 10624 Basic stats: COMPLETE Column stats: NONE
             File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/groupby_position.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby_position.q.out b/ql/src/test/results/clientpositive/groupby_position.q.out
index 5678bd5..86a2dcb 100644
--- a/ql/src/test/results/clientpositive/groupby_position.q.out
+++ b/ql/src/test/results/clientpositive/groupby_position.q.out
@@ -78,7 +78,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -172,7 +172,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1, _col2
           Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), _col1 (type: string), UDFToString(_col2) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), _col1 (type: string), CAST( _col2 AS STRING) (type: string)
             outputColumnNames: _col0, _col1, _col2
             Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -357,7 +357,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col0) (type: int), UDFToString(_col1) (type: string)
+            expressions: UDFToInteger(_col0) (type: int), CAST( _col1 AS STRING) (type: string)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -451,7 +451,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1, _col2
           Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(_col1) (type: int), _col0 (type: string), UDFToString(_col2) (type: string)
+            expressions: UDFToInteger(_col1) (type: int), _col0 (type: string), CAST( _col2 AS STRING) (type: string)
             outputColumnNames: _col0, _col1, _col2
             Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE Column stats: NONE
             File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/groupby_sort_1_23.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby_sort_1_23.q.out b/ql/src/test/results/clientpositive/groupby_sort_1_23.q.out
index aaf89ae..033d00b 100644
--- a/ql/src/test/results/clientpositive/groupby_sort_1_23.q.out
+++ b/ql/src/test/results/clientpositive/groupby_sort_1_23.q.out
@@ -3733,7 +3733,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 3 Data size: 12 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToString(_col0) (type: string), _col1 (type: bigint)
+            expressions: CAST( _col0 AS STRING) (type: string), _col1 (type: bigint)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 3 Data size: 12 Basic stats: COMPLETE Column stats: NONE
             File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/groupby_sort_skew_1_23.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby_sort_skew_1_23.q.out b/ql/src/test/results/clientpositive/groupby_sort_skew_1_23.q.out
index e8a1143..1eddcf5 100644
--- a/ql/src/test/results/clientpositive/groupby_sort_skew_1_23.q.out
+++ b/ql/src/test/results/clientpositive/groupby_sort_skew_1_23.q.out
@@ -3149,7 +3149,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 1 Data size: 4 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToInteger(UDFToString(_col0)) (type: int), UDFToInteger(_col1) (type: int)
+            expressions: UDFToInteger(CAST( _col0 AS STRING)) (type: int), UDFToInteger(_col1) (type: int)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 1 Data size: 4 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -4083,7 +4083,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 3 Data size: 12 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: UDFToString(_col0) (type: string), _col1 (type: bigint)
+            expressions: CAST( _col0 AS STRING) (type: string), _col1 (type: bigint)
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 3 Data size: 12 Basic stats: COMPLETE Column stats: NONE
             File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/infer_bucket_sort_dyn_part.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/infer_bucket_sort_dyn_part.q.out b/ql/src/test/results/clientpositive/infer_bucket_sort_dyn_part.q.out
index fd9e553..aceb845 100644
--- a/ql/src/test/results/clientpositive/infer_bucket_sort_dyn_part.q.out
+++ b/ql/src/test/results/clientpositive/infer_bucket_sort_dyn_part.q.out
@@ -454,7 +454,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: _col0 (type: string), UDFToString(_col1) (type: string), if(((UDFToDouble(_col0) % 100.0D) = 0.0D), '11', '12') (type: string)
+            expressions: _col0 (type: string), CAST( _col1 AS STRING) (type: string), if(((UDFToDouble(_col0) % 100.0D) = 0.0D), '11', '12') (type: string)
             outputColumnNames: _col0, _col1, _col2
             Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE
             File Output Operator

http://git-wip-us.apache.org/repos/asf/hive/blob/26f4d8ea/ql/src/test/results/clientpositive/infer_bucket_sort_grouping_operators.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/infer_bucket_sort_grouping_operators.q.out b/ql/src/test/results/clientpositive/infer_bucket_sort_grouping_operators.q.out
index 50cc4dc..cfd190f 100644
--- a/ql/src/test/results/clientpositive/infer_bucket_sort_grouping_operators.q.out
+++ b/ql/src/test/results/clientpositive/infer_bucket_sort_grouping_operators.q.out
@@ -59,7 +59,7 @@ STAGE PLANS:
           Statistics: Num rows: 750 Data size: 7968 Basic stats: COMPLETE Column stats: NONE
           pruneGroupingSetId: true
           Select Operator
-            expressions: _col0 (type: string), _col1 (type: string), UDFToString(_col3) (type: string)
+            expressions: _col0 (type: string), _col1 (type: string), CAST( _col3 AS STRING) (type: string)
             outputColumnNames: _col0, _col1, _col2
             Statistics: Num rows: 750 Data size: 7968 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -1540,7 +1540,7 @@ STAGE PLANS:
           Statistics: Num rows: 1000 Data size: 10624 Basic stats: COMPLETE Column stats: NONE
           pruneGroupingSetId: true
           Select Operator
-            expressions: _col0 (type: string), _col1 (type: string), UDFToString(_col3) (type: string)
+            expressions: _col0 (type: string), _col1 (type: string), CAST( _col3 AS STRING) (type: string)
             outputColumnNames: _col0, _col1, _col2
             Statistics: Num rows: 1000 Data size: 10624 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -1767,7 +1767,7 @@ STAGE PLANS:
           Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE
           pruneGroupingSetId: true
           Select Operator
-            expressions: _col0 (type: string), _col1 (type: string), UDFToString(_col3) (type: string)
+            expressions: _col0 (type: string), _col1 (type: string), CAST( _col3 AS STRING) (type: string)
             outputColumnNames: _col0, _col1, _col2
             Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE
             File Output Operator