You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by kg...@apache.org on 2018/01/05 10:49:05 UTC

[16/18] hive git commit: HIVE-18108: in case basic stats are missing; rowcount estimation depends on the selected columns size (Zoltan Haindrich, reviewed by Ashutosh Chauhan)

HIVE-18108: in case basic stats are missing; rowcount estimation depends on the selected columns size (Zoltan Haindrich, reviewed by Ashutosh Chauhan)

Signed-off-by: Zoltan Haindrich <ki...@rxd.hu>


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

Branch: refs/heads/master
Commit: d0fa7d5515bde6819fcdb54648d678b2448b7731
Parents: 8e32172
Author: Zoltan Haindrich <ki...@rxd.hu>
Authored: Fri Jan 5 11:17:24 2018 +0100
Committer: Zoltan Haindrich <ki...@rxd.hu>
Committed: Fri Jan 5 11:17:24 2018 +0100

----------------------------------------------------------------------
 .../apache/hadoop/hive/ql/stats/StatsUtils.java |  48 +-
 .../bucket_mapjoin_mismatch1.q.out              |  36 +-
 .../clientpositive/acid_table_stats.q.out       |  20 +-
 .../analyze_table_null_partition.q.out          |   4 +-
 .../clientpositive/annotate_stats_part.q.out    |  10 +-
 .../clientpositive/annotate_stats_table.q.out   |   4 +-
 .../clientpositive/autoColumnStats_2.q.out      |   4 +-
 .../clientpositive/autoColumnStats_5.q.out      |  18 +-
 .../clientpositive/autoColumnStats_5a.q.out     |  18 +-
 .../clientpositive/auto_sortmerge_join_1.q.out  |  42 +-
 .../clientpositive/auto_sortmerge_join_11.q.out |  60 +--
 .../clientpositive/auto_sortmerge_join_12.q.out | 326 +++++++-------
 .../clientpositive/auto_sortmerge_join_2.q.out  |  36 +-
 .../clientpositive/auto_sortmerge_join_3.q.out  |  42 +-
 .../clientpositive/auto_sortmerge_join_4.q.out  |  42 +-
 .../clientpositive/auto_sortmerge_join_7.q.out  |  42 +-
 .../avro_schema_evolution_native.q.out          |  10 +-
 .../clientpositive/beeline/smb_mapjoin_10.q.out |   4 +-
 .../clientpositive/bucket_map_join_spark1.q.out |  40 +-
 .../clientpositive/bucket_map_join_spark2.q.out |  40 +-
 .../clientpositive/bucket_map_join_spark3.q.out |  40 +-
 .../clientpositive/bucketcontext_1.q.out        |  14 +-
 .../clientpositive/bucketcontext_2.q.out        |  14 +-
 .../clientpositive/bucketcontext_3.q.out        |  14 +-
 .../clientpositive/bucketcontext_4.q.out        |  14 +-
 .../clientpositive/bucketcontext_6.q.out        |  10 +-
 .../clientpositive/bucketcontext_7.q.out        |  14 +-
 .../clientpositive/bucketcontext_8.q.out        |  14 +-
 .../clientpositive/bucketmapjoin10.q.out        |  10 +-
 .../clientpositive/bucketmapjoin11.q.out        |  20 +-
 .../clientpositive/bucketmapjoin12.q.out        |  20 +-
 .../results/clientpositive/bucketmapjoin5.q.out |  24 +-
 .../results/clientpositive/bucketmapjoin8.q.out |  20 +-
 .../results/clientpositive/bucketmapjoin9.q.out |  20 +-
 .../clientpositive/bucketmapjoin_negative.q.out |  12 +-
 .../bucketmapjoin_negative2.q.out               |  12 +-
 .../clientpositive/columnstats_partlvl.q.out    |  56 +--
 .../clientpositive/columnstats_partlvl_dp.q.out |  28 +-
 .../test/results/clientpositive/combine2.q.out  |  12 +-
 .../clientpositive/groupby_sort_11.q.out        |   8 +-
 .../results/clientpositive/groupby_sort_6.q.out |  16 +-
 .../infer_bucket_sort_dyn_part.q.out            |  26 +-
 .../infer_bucket_sort_num_buckets.q.out         |  22 +-
 .../insert1_overwrite_partitions.q.out          |  38 +-
 .../insert2_overwrite_partitions.q.out          |  48 +-
 .../results/clientpositive/insert_into2.q.out   |   4 +-
 .../list_bucket_query_oneskew_1.q.out           |  18 +-
 .../list_bucket_query_oneskew_2.q.out           |  42 +-
 .../list_bucket_query_oneskew_3.q.out           |   6 +-
 .../llap/auto_sortmerge_join_1.q.out            |  42 +-
 .../llap/auto_sortmerge_join_11.q.out           |  56 +--
 .../llap/auto_sortmerge_join_12.q.out           | 102 ++---
 .../llap/auto_sortmerge_join_2.q.out            |  28 +-
 .../llap/auto_sortmerge_join_3.q.out            |  42 +-
 .../llap/auto_sortmerge_join_4.q.out            |  42 +-
 .../llap/auto_sortmerge_join_7.q.out            |  42 +-
 .../llap/auto_sortmerge_join_8.q.out            |  42 +-
 .../clientpositive/llap/bucketmapjoin1.q.out    |  32 +-
 .../clientpositive/llap/bucketmapjoin2.q.out    |  72 +--
 .../clientpositive/llap/bucketmapjoin3.q.out    |  48 +-
 .../clientpositive/llap/bucketmapjoin7.q.out    |  26 +-
 .../llap/column_table_stats.q.out               |  12 +-
 .../llap/dynamic_partition_pruning.q.out        | 132 +++---
 .../llap/dynamic_partition_pruning_2.q.out      |   6 +-
 .../llap/dynamic_semijoin_reduction.q.out       |  38 +-
 .../llap/dynamic_semijoin_user_level.q.out      |   4 +-
 .../llap/dynpart_sort_opt_vectorization.q.out   |   8 +-
 .../clientpositive/llap/explainuser_1.q.out     |  20 +-
 .../clientpositive/llap/insert_into2.q.out      |   4 +-
 .../llap/join_reordering_no_stats.q.out         |  20 +-
 .../clientpositive/llap/llap_partitioned.q.out  |   2 +-
 .../llap/partition_multilevels.q.out            |   8 +-
 .../results/clientpositive/llap/stats11.q.out   |  32 +-
 .../llap/vector_partitioned_date_time.q.out     |  16 +-
 .../vectorized_dynamic_partition_pruning.q.out  | 126 +++---
 .../merge_dynamic_partition.q.out               |  54 +--
 .../merge_dynamic_partition2.q.out              |  18 +-
 .../merge_dynamic_partition3.q.out              |  18 +-
 .../results/clientpositive/nullgroup3.q.out     |   8 +-
 .../results/clientpositive/nullgroup5.q.out     |  12 +-
 .../clientpositive/partition_boolexpr.q.out     |  12 +-
 ql/src/test/results/clientpositive/pcs.q.out    |   6 +-
 .../test/results/clientpositive/regex_col.q.out |  12 +-
 .../test/results/clientpositive/row__id.q.out   |  18 +-
 .../results/clientpositive/smb_mapjoin_10.q.out |   4 +-
 .../spark/auto_sortmerge_join_1.q.out           |  24 +-
 .../spark/auto_sortmerge_join_12.q.out          | 196 ++++----
 .../spark/auto_sortmerge_join_2.q.out           |  16 +-
 .../spark/auto_sortmerge_join_3.q.out           |  24 +-
 .../spark/auto_sortmerge_join_4.q.out           |  24 +-
 .../spark/auto_sortmerge_join_7.q.out           |  24 +-
 .../spark/auto_sortmerge_join_8.q.out           |  24 +-
 .../spark/bucket_map_join_spark1.q.out          |  36 +-
 .../spark/bucket_map_join_spark2.q.out          |  36 +-
 .../spark/bucket_map_join_spark3.q.out          |  36 +-
 .../clientpositive/spark/bucketmapjoin1.q.out   |  28 +-
 .../clientpositive/spark/bucketmapjoin10.q.out  |  10 +-
 .../clientpositive/spark/bucketmapjoin11.q.out  |  20 +-
 .../clientpositive/spark/bucketmapjoin12.q.out  |  20 +-
 .../clientpositive/spark/bucketmapjoin2.q.out   |  66 +--
 .../clientpositive/spark/bucketmapjoin3.q.out   |  44 +-
 .../clientpositive/spark/bucketmapjoin5.q.out   |  20 +-
 .../clientpositive/spark/bucketmapjoin7.q.out   |  20 +-
 .../clientpositive/spark/bucketmapjoin8.q.out   |  20 +-
 .../clientpositive/spark/bucketmapjoin9.q.out   |  20 +-
 .../spark/bucketmapjoin_negative.q.out          |  10 +-
 .../spark/bucketmapjoin_negative2.q.out         |  10 +-
 .../clientpositive/spark/insert_into2.q.out     |   4 +-
 .../clientpositive/spark/smb_mapjoin_10.q.out   |  10 +-
 .../spark/spark_dynamic_partition_pruning.q.out | 450 +++++++++----------
 .../spark_dynamic_partition_pruning_2.q.out     |  20 +-
 .../spark_dynamic_partition_pruning_4.q.out     |  20 +-
 .../spark/spark_explainuser_1.q.out             |  20 +-
 ...k_vectorized_dynamic_partition_pruning.q.out | 444 +++++++++---------
 .../results/clientpositive/spark/stats10.q.out  |   2 +-
 .../results/clientpositive/spark/stats12.q.out  |   2 +-
 .../results/clientpositive/spark/stats13.q.out  |   2 +-
 .../results/clientpositive/spark/stats2.q.out   |   2 +-
 .../results/clientpositive/spark/stats7.q.out   |   2 +-
 .../results/clientpositive/spark/stats8.q.out   |  10 +-
 .../results/clientpositive/spark/stats9.q.out   |   2 +-
 .../clientpositive/spark/stats_noscan_2.q.out   |   4 +-
 .../clientpositive/spark/union_remove_1.q.out   |  16 +-
 .../clientpositive/spark/union_remove_10.q.out  |  24 +-
 .../clientpositive/spark/union_remove_11.q.out  |  24 +-
 .../clientpositive/spark/union_remove_12.q.out  |  18 +-
 .../clientpositive/spark/union_remove_13.q.out  |  24 +-
 .../clientpositive/spark/union_remove_14.q.out  |  18 +-
 .../clientpositive/spark/union_remove_15.q.out  |  20 +-
 .../clientpositive/spark/union_remove_16.q.out  |  20 +-
 .../clientpositive/spark/union_remove_17.q.out  |  16 +-
 .../clientpositive/spark/union_remove_19.q.out  |  52 +--
 .../clientpositive/spark/union_remove_2.q.out   |  24 +-
 .../clientpositive/spark/union_remove_20.q.out  |  20 +-
 .../clientpositive/spark/union_remove_21.q.out  |  16 +-
 .../clientpositive/spark/union_remove_22.q.out  |  40 +-
 .../clientpositive/spark/union_remove_23.q.out  |  38 +-
 .../clientpositive/spark/union_remove_24.q.out  |  20 +-
 .../clientpositive/spark/union_remove_25.q.out  |  16 +-
 .../clientpositive/spark/union_remove_3.q.out   |  24 +-
 .../clientpositive/spark/union_remove_4.q.out   |  16 +-
 .../clientpositive/spark/union_remove_5.q.out   |  24 +-
 .../clientpositive/spark/union_remove_6.q.out   |  20 +-
 .../spark/union_remove_6_subq.q.out             |  20 +-
 .../clientpositive/spark/union_remove_7.q.out   |  16 +-
 .../clientpositive/spark/union_remove_8.q.out   |  24 +-
 .../clientpositive/spark/union_remove_9.q.out   |  28 +-
 .../clientpositive/spark/union_view.q.out       |  40 +-
 .../vectorization_parquet_projection.q.out      |   4 +-
 .../test/results/clientpositive/stats10.q.out   |   2 +-
 .../test/results/clientpositive/stats12.q.out   |   2 +-
 .../test/results/clientpositive/stats13.q.out   |   2 +-
 ql/src/test/results/clientpositive/stats2.q.out |   2 +-
 ql/src/test/results/clientpositive/stats7.q.out |   2 +-
 ql/src/test/results/clientpositive/stats8.q.out |  10 +-
 ql/src/test/results/clientpositive/stats9.q.out |   2 +-
 .../results/clientpositive/stats_noscan_2.q.out |   4 +-
 .../results/clientpositive/stats_ppr_all.q.out  |   2 +-
 .../clientpositive/tez/explainanalyze_5.q.out   |   2 +-
 .../results/clientpositive/union_remove_1.q.out |  24 +-
 .../clientpositive/union_remove_10.q.out        |  24 +-
 .../clientpositive/union_remove_11.q.out        |  30 +-
 .../clientpositive/union_remove_12.q.out        |  18 +-
 .../clientpositive/union_remove_13.q.out        |  24 +-
 .../clientpositive/union_remove_14.q.out        |  18 +-
 .../clientpositive/union_remove_15.q.out        |  28 +-
 .../clientpositive/union_remove_16.q.out        |  28 +-
 .../clientpositive/union_remove_17.q.out        |  20 +-
 .../clientpositive/union_remove_19.q.out        |  76 ++--
 .../results/clientpositive/union_remove_2.q.out |  24 +-
 .../clientpositive/union_remove_20.q.out        |  28 +-
 .../clientpositive/union_remove_21.q.out        |  24 +-
 .../clientpositive/union_remove_22.q.out        |  56 +--
 .../clientpositive/union_remove_23.q.out        |  38 +-
 .../clientpositive/union_remove_24.q.out        |  28 +-
 .../clientpositive/union_remove_25.q.out        |  24 +-
 .../results/clientpositive/union_remove_3.q.out |  30 +-
 .../results/clientpositive/union_remove_4.q.out |  24 +-
 .../results/clientpositive/union_remove_5.q.out |  24 +-
 .../results/clientpositive/union_remove_6.q.out |  32 +-
 .../clientpositive/union_remove_6_subq.q.out    |  32 +-
 .../results/clientpositive/union_remove_7.q.out |  24 +-
 .../results/clientpositive/union_remove_8.q.out |  24 +-
 .../results/clientpositive/union_remove_9.q.out |  32 +-
 .../results/clientpositive/union_view.q.out     |  64 +--
 .../clientpositive/vector_gather_stats.q.out    |   2 +-
 .../vectorization_parquet_projection.q.out      |   4 +-
 187 files changed, 2898 insertions(+), 2886 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/d0fa7d55/ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java b/ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java
index 05c9380..e265863 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java
@@ -189,11 +189,6 @@ public class StatsUtils {
    */
   public static long getNumRows(HiveConf conf, List<ColumnInfo> schema, Table table,
                                 PrunedPartitionList partitionList, AtomicInteger noColsMissingStats) {
-    //for non-partitioned table
-    List<String> neededColumns = new ArrayList<>();
-    for(ColumnInfo ci:schema) {
-      neededColumns.add(ci.getInternalName());
-    }
 
     boolean shouldEstimateStats = HiveConf.getBoolVar(conf, ConfVars.HIVE_STATS_ESTIMATE_STATS);
 
@@ -213,7 +208,7 @@ public class StatsUtils {
       }
       // go ahead with the estimation
       long ds = getDataSize(conf, table);
-      return getNumRows(conf, schema, neededColumns, table, ds);
+      return getNumRows(conf, schema, table, ds);
     }
     else { // partitioned table
       long nr = 0;
@@ -242,9 +237,12 @@ public class StatsUtils {
 
       ds = getSumIgnoreNegatives(dataSizes);
 
+      float deserFactor = HiveConf.getFloatVar(conf, HiveConf.ConfVars.HIVE_STATS_DESERIALIZATION_FACTOR);
+
       if (ds <= 0) {
         dataSizes = getBasicStatForPartitions(
             table, partitionList.getNotDeniedPartns(), StatsSetupConst.TOTAL_SIZE);
+        dataSizes = safeMult(dataSizes, deserFactor);
         ds = getSumIgnoreNegatives(dataSizes);
       }
 
@@ -252,13 +250,11 @@ public class StatsUtils {
       // sizes
       if (ds <= 0 && shouldEstimateStats) {
         dataSizes = getFileSizeForPartitions(conf, partitionList.getNotDeniedPartns());
+        dataSizes = safeMult(dataSizes, deserFactor);
+        ds = getSumIgnoreNegatives(dataSizes);
       }
-      ds = getSumIgnoreNegatives(dataSizes);
-      float deserFactor =
-          HiveConf.getFloatVar(conf, HiveConf.ConfVars.HIVE_STATS_DESERIALIZATION_FACTOR);
-      ds = (long) (ds * deserFactor);
 
-      int avgRowSize = estimateRowSizeFromSchema(conf, schema, neededColumns);
+      int avgRowSize = estimateRowSizeFromSchema(conf, schema);
       if (avgRowSize > 0) {
         setUnknownRcDsToAverage(rowCounts, dataSizes, avgRowSize);
         nr = getSumIgnoreNegatives(rowCounts);
@@ -296,14 +292,13 @@ public class StatsUtils {
     }
   }
 
-  private static long getNumRows(HiveConf conf, List<ColumnInfo> schema, List<String> neededColumns,
-                                 Table table, long ds) {
+  private static long getNumRows(HiveConf conf, List<ColumnInfo> schema, Table table, long ds) {
     long nr = getNumRows(table);
     // number of rows -1 means that statistics from metastore is not reliable
     // and 0 means statistics gathering is disabled
     // estimate only if num rows is -1 since 0 could be actual number of rows
     if (nr < 0) {
-      int avgRowSize = estimateRowSizeFromSchema(conf, schema, neededColumns);
+      int avgRowSize = estimateRowSizeFromSchema(conf, schema);
       if (avgRowSize > 0) {
         if (LOG.isDebugEnabled()) {
           LOG.debug("Estimated average row size: " + avgRowSize);
@@ -341,7 +336,7 @@ public class StatsUtils {
       //getDataSize tries to estimate stats if it doesn't exist using file size
       // we would like to avoid file system calls  if it too expensive
       long ds = shouldEstimateStats? getDataSize(conf, table): getRawDataSize(table);
-      long nr = getNumRows(conf, schema, neededColumns, table, ds);
+      long nr = getNumRows(conf, schema, table, ds);
       List<ColStatistics> colStats = Lists.newArrayList();
       if (fetchColStats) {
         colStats = getTableColumnStats(table, schema, neededColumns, colStatsCache);
@@ -377,6 +372,7 @@ public class StatsUtils {
       ds = getSumIgnoreNegatives(dataSizes);
       if (ds <= 0) {
         dataSizes = getBasicStatForPartitions(table, partList.getNotDeniedPartns(), StatsSetupConst.TOTAL_SIZE);
+        dataSizes = safeMult(dataSizes, deserFactor);
         ds = getSumIgnoreNegatives(dataSizes);
       }
 
@@ -384,11 +380,11 @@ public class StatsUtils {
       // sizes
       if (ds <= 0 && shouldEstimateStats) {
         dataSizes = getFileSizeForPartitions(conf, partList.getNotDeniedPartns());
+        dataSizes = safeMult(dataSizes, deserFactor);
+        ds = getSumIgnoreNegatives(dataSizes);
       }
-      ds = getSumIgnoreNegatives(dataSizes);
-      ds = (long) (ds * deserFactor);
 
-      int avgRowSize = estimateRowSizeFromSchema(conf, schema, neededColumns);
+      int avgRowSize = estimateRowSizeFromSchema(conf, schema);
       if (avgRowSize > 0) {
         setUnknownRcDsToAverage(rowCounts, dataSizes, avgRowSize);
         nr = getSumIgnoreNegatives(rowCounts);
@@ -768,6 +764,14 @@ public class StatsUtils {
     }
   }
 
+  public static int estimateRowSizeFromSchema(HiveConf conf, List<ColumnInfo> schema) {
+    List<String> neededColumns = new ArrayList<>();
+    for (ColumnInfo ci : schema) {
+      neededColumns.add(ci.getInternalName());
+    }
+    return estimateRowSizeFromSchema(conf, schema, neededColumns);
+  }
+
   public static int estimateRowSizeFromSchema(HiveConf conf, List<ColumnInfo> schema,
       List<String> neededColumns) {
     int avgRowSize = 0;
@@ -1937,6 +1941,14 @@ public class StatsUtils {
     }
   }
 
+  public static List<Long> safeMult(List<Long> l, float b) {
+    List<Long> ret = new ArrayList<>();
+    for (Long a : l) {
+      ret.add(safeMult(a, b));
+    }
+    return ret;
+  }
+
   public static boolean hasDiscreteRange(ColStatistics colStat) {
     if (colStat.getRange() != null) {
       TypeInfo colType = TypeInfoUtils.getTypeInfoFromTypeString(colStat.getColumnType());

http://git-wip-us.apache.org/repos/asf/hive/blob/d0fa7d55/ql/src/test/results/clientnegative/bucket_mapjoin_mismatch1.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientnegative/bucket_mapjoin_mismatch1.q.out b/ql/src/test/results/clientnegative/bucket_mapjoin_mismatch1.q.out
index 79f1f93..53bbeae 100644
--- a/ql/src/test/results/clientnegative/bucket_mapjoin_mismatch1.q.out
+++ b/ql/src/test/results/clientnegative/bucket_mapjoin_mismatch1.q.out
@@ -94,35 +94,35 @@ STAGE PLANS:
       Map Operator Tree:
           TableScan
             alias: a
-            Statistics: Num rows: 40 Data size: 4200 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 108 Data size: 42000 Basic stats: COMPLETE Column stats: NONE
             Filter Operator
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 40 Data size: 4200 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 108 Data size: 42000 Basic stats: COMPLETE Column stats: NONE
               Select Operator
                 expressions: key (type: int), value (type: string)
                 outputColumnNames: _col0, _col1
-                Statistics: Num rows: 40 Data size: 4200 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 108 Data size: 42000 Basic stats: COMPLETE Column stats: NONE
                 Reduce Output Operator
                   key expressions: _col0 (type: int)
                   sort order: +
                   Map-reduce partition columns: _col0 (type: int)
-                  Statistics: Num rows: 40 Data size: 4200 Basic stats: COMPLETE Column stats: NONE
+                  Statistics: Num rows: 108 Data size: 42000 Basic stats: COMPLETE Column stats: NONE
                   value expressions: _col1 (type: string)
           TableScan
             alias: b
-            Statistics: Num rows: 29 Data size: 3062 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 78 Data size: 30620 Basic stats: COMPLETE Column stats: NONE
             Filter Operator
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 29 Data size: 3062 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 78 Data size: 30620 Basic stats: COMPLETE Column stats: NONE
               Select Operator
                 expressions: key (type: int), value (type: string)
                 outputColumnNames: _col0, _col1
-                Statistics: Num rows: 29 Data size: 3062 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 78 Data size: 30620 Basic stats: COMPLETE Column stats: NONE
                 Reduce Output Operator
                   key expressions: _col0 (type: int)
                   sort order: +
                   Map-reduce partition columns: _col0 (type: int)
-                  Statistics: Num rows: 29 Data size: 3062 Basic stats: COMPLETE Column stats: NONE
+                  Statistics: Num rows: 78 Data size: 30620 Basic stats: COMPLETE Column stats: NONE
                   value expressions: _col1 (type: string)
       Reduce Operator Tree:
         Join Operator
@@ -132,14 +132,14 @@ STAGE PLANS:
             0 _col0 (type: int)
             1 _col0 (type: int)
           outputColumnNames: _col0, _col1, _col4
-          Statistics: Num rows: 44 Data size: 4620 Basic stats: COMPLETE Column stats: NONE
+          Statistics: Num rows: 118 Data size: 46200 Basic stats: COMPLETE Column stats: NONE
           Select Operator
             expressions: _col0 (type: int), _col1 (type: string), _col4 (type: string)
             outputColumnNames: _col0, _col1, _col2
-            Statistics: Num rows: 44 Data size: 4620 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 118 Data size: 46200 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
               compressed: false
-              Statistics: Num rows: 44 Data size: 4620 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 118 Data size: 46200 Basic stats: COMPLETE Column stats: NONE
               table:
                   input format: org.apache.hadoop.mapred.SequenceFileInputFormat
                   output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
@@ -177,10 +177,10 @@ STAGE PLANS:
         b 
           TableScan
             alias: b
-            Statistics: Num rows: 29 Data size: 3062 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 102 Data size: 30620 Basic stats: COMPLETE Column stats: NONE
             Filter Operator
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 29 Data size: 3062 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 102 Data size: 30620 Basic stats: COMPLETE Column stats: NONE
               HashTable Sink Operator
                 keys:
                   0 key (type: int)
@@ -191,10 +191,10 @@ STAGE PLANS:
       Map Operator Tree:
           TableScan
             alias: a
-            Statistics: Num rows: 40 Data size: 4200 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 140 Data size: 42000 Basic stats: COMPLETE Column stats: NONE
             Filter Operator
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 40 Data size: 4200 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 140 Data size: 42000 Basic stats: COMPLETE Column stats: NONE
               Map Join Operator
                 condition map:
                      Inner Join 0 to 1
@@ -202,14 +202,14 @@ STAGE PLANS:
                   0 key (type: int)
                   1 key (type: int)
                 outputColumnNames: _col0, _col1, _col7
-                Statistics: Num rows: 44 Data size: 4620 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 154 Data size: 46200 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
                   expressions: _col0 (type: int), _col1 (type: string), _col7 (type: string)
                   outputColumnNames: _col0, _col1, _col2
-                  Statistics: Num rows: 44 Data size: 4620 Basic stats: COMPLETE Column stats: NONE
+                  Statistics: Num rows: 154 Data size: 46200 Basic stats: COMPLETE Column stats: NONE
                   File Output Operator
                     compressed: false
-                    Statistics: Num rows: 44 Data size: 4620 Basic stats: COMPLETE Column stats: NONE
+                    Statistics: Num rows: 154 Data size: 46200 Basic stats: COMPLETE Column stats: NONE
                     table:
                         input format: org.apache.hadoop.mapred.SequenceFileInputFormat
                         output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat

http://git-wip-us.apache.org/repos/asf/hive/blob/d0fa7d55/ql/src/test/results/clientpositive/acid_table_stats.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/acid_table_stats.q.out b/ql/src/test/results/clientpositive/acid_table_stats.q.out
index 05a03d2..74d4c44 100644
--- a/ql/src/test/results/clientpositive/acid_table_stats.q.out
+++ b/ql/src/test/results/clientpositive/acid_table_stats.q.out
@@ -133,27 +133,27 @@ STAGE PLANS:
       Map Operator Tree:
           TableScan
             alias: acid
-            Statistics: Num rows: 1 Data size: 39500 Basic stats: PARTIAL Column stats: NONE
+            Statistics: Num rows: 81 Data size: 39500 Basic stats: COMPLETE Column stats: NONE
             Select Operator
-              Statistics: Num rows: 1 Data size: 39500 Basic stats: PARTIAL Column stats: NONE
+              Statistics: Num rows: 81 Data size: 39500 Basic stats: COMPLETE Column stats: NONE
               Group By Operator
                 aggregations: count()
                 mode: hash
                 outputColumnNames: _col0
-                Statistics: Num rows: 1 Data size: 8 Basic stats: PARTIAL Column stats: NONE
+                Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
                 Reduce Output Operator
                   sort order: 
-                  Statistics: Num rows: 1 Data size: 8 Basic stats: PARTIAL Column stats: NONE
+                  Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
                   value expressions: _col0 (type: bigint)
       Reduce Operator Tree:
         Group By Operator
           aggregations: count(VALUE._col0)
           mode: mergepartial
           outputColumnNames: _col0
-          Statistics: Num rows: 1 Data size: 8 Basic stats: PARTIAL Column stats: NONE
+          Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
           File Output Operator
             compressed: false
-            Statistics: Num rows: 1 Data size: 8 Basic stats: PARTIAL Column stats: NONE
+            Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
             table:
                 input format: org.apache.hadoop.mapred.SequenceFileInputFormat
                 output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
@@ -299,9 +299,9 @@ STAGE PLANS:
       Map Operator Tree:
           TableScan
             alias: acid
-            Statistics: Num rows: 1000 Data size: 2080000 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 1000 Data size: 208000 Basic stats: COMPLETE Column stats: NONE
             Select Operator
-              Statistics: Num rows: 1000 Data size: 2080000 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 1000 Data size: 208000 Basic stats: COMPLETE Column stats: NONE
               Group By Operator
                 aggregations: count()
                 mode: hash
@@ -460,9 +460,9 @@ STAGE PLANS:
       Map Operator Tree:
           TableScan
             alias: acid
-            Statistics: Num rows: 2000 Data size: 4160000 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 2000 Data size: 416000 Basic stats: COMPLETE Column stats: NONE
             Select Operator
-              Statistics: Num rows: 2000 Data size: 4160000 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 2000 Data size: 416000 Basic stats: COMPLETE Column stats: NONE
               Group By Operator
                 aggregations: count()
                 mode: hash

http://git-wip-us.apache.org/repos/asf/hive/blob/d0fa7d55/ql/src/test/results/clientpositive/analyze_table_null_partition.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/analyze_table_null_partition.q.out b/ql/src/test/results/clientpositive/analyze_table_null_partition.q.out
index d48df75..e7151b6 100644
--- a/ql/src/test/results/clientpositive/analyze_table_null_partition.q.out
+++ b/ql/src/test/results/clientpositive/analyze_table_null_partition.q.out
@@ -278,12 +278,12 @@ STAGE PLANS:
       Processor Tree:
         TableScan
           alias: test2
-          Statistics: Num rows: 5 Data size: 111 Basic stats: COMPLETE Column stats: NONE
+          Statistics: Num rows: 5 Data size: 299 Basic stats: COMPLETE Column stats: NONE
           GatherStats: false
           Select Operator
             expressions: name (type: string), age (type: int)
             outputColumnNames: _col0, _col1
-            Statistics: Num rows: 5 Data size: 111 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 5 Data size: 299 Basic stats: COMPLETE Column stats: NONE
             ListSink
 
 PREHOOK: query: DROP TABLE test1

http://git-wip-us.apache.org/repos/asf/hive/blob/d0fa7d55/ql/src/test/results/clientpositive/annotate_stats_part.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/annotate_stats_part.q.out b/ql/src/test/results/clientpositive/annotate_stats_part.q.out
index cba89a6..399ddb6 100644
--- a/ql/src/test/results/clientpositive/annotate_stats_part.q.out
+++ b/ql/src/test/results/clientpositive/annotate_stats_part.q.out
@@ -90,11 +90,11 @@ STAGE PLANS:
       Processor Tree:
         TableScan
           alias: loc_orc
-          Statistics: Num rows: 6 Data size: 3060 Basic stats: COMPLETE Column stats: PARTIAL
+          Statistics: Num rows: 18 Data size: 14640 Basic stats: COMPLETE Column stats: PARTIAL
           Select Operator
             expressions: state (type: string), locid (type: int), zip (type: bigint), year (type: string)
             outputColumnNames: _col0, _col1, _col2, _col3
-            Statistics: Num rows: 6 Data size: 2280 Basic stats: COMPLETE Column stats: PARTIAL
+            Statistics: Num rows: 18 Data size: 6840 Basic stats: COMPLETE Column stats: PARTIAL
             ListSink
 
 PREHOOK: query: analyze table loc_orc partition(year='2001') compute statistics
@@ -121,11 +121,11 @@ STAGE PLANS:
       Processor Tree:
         TableScan
           alias: loc_orc
-          Statistics: Num rows: 3 Data size: 936 Basic stats: COMPLETE Column stats: NONE
+          Statistics: Num rows: 8 Data size: 5048 Basic stats: COMPLETE Column stats: NONE
           Select Operator
             expressions: state (type: string), locid (type: int), zip (type: bigint), '__HIVE_DEFAULT_PARTITION__' (type: string)
             outputColumnNames: _col0, _col1, _col2, _col3
-            Statistics: Num rows: 3 Data size: 936 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 8 Data size: 5048 Basic stats: COMPLETE Column stats: NONE
             ListSink
 
 PREHOOK: query: explain select * from loc_orc
@@ -339,7 +339,7 @@ STAGE PLANS:
       Processor Tree:
         TableScan
           alias: loc_orc
-          Statistics: Num rows: 8 Data size: 9212 Basic stats: COMPLETE Column stats: COMPLETE
+          Statistics: Num rows: 8 Data size: 2246 Basic stats: COMPLETE Column stats: COMPLETE
           Select Operator
             expressions: year (type: string)
             outputColumnNames: _col0

http://git-wip-us.apache.org/repos/asf/hive/blob/d0fa7d55/ql/src/test/results/clientpositive/annotate_stats_table.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/annotate_stats_table.q.out b/ql/src/test/results/clientpositive/annotate_stats_table.q.out
index 83d241c..433a06b 100644
--- a/ql/src/test/results/clientpositive/annotate_stats_table.q.out
+++ b/ql/src/test/results/clientpositive/annotate_stats_table.q.out
@@ -81,11 +81,11 @@ STAGE PLANS:
       Processor Tree:
         TableScan
           alias: emp_orc
-          Statistics: Num rows: 37 Data size: 6956 Basic stats: COMPLETE Column stats: NONE
+          Statistics: Num rows: 13 Data size: 2444 Basic stats: COMPLETE Column stats: NONE
           Select Operator
             expressions: lastname (type: string), deptid (type: int)
             outputColumnNames: _col0, _col1
-            Statistics: Num rows: 37 Data size: 6956 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 13 Data size: 2444 Basic stats: COMPLETE Column stats: NONE
             ListSink
 
 PREHOOK: query: analyze table emp_orc compute statistics

http://git-wip-us.apache.org/repos/asf/hive/blob/d0fa7d55/ql/src/test/results/clientpositive/autoColumnStats_2.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/autoColumnStats_2.q.out b/ql/src/test/results/clientpositive/autoColumnStats_2.q.out
index b209ff0..4f63aad 100644
--- a/ql/src/test/results/clientpositive/autoColumnStats_2.q.out
+++ b/ql/src/test/results/clientpositive/autoColumnStats_2.q.out
@@ -783,11 +783,11 @@ STAGE PLANS:
       Processor Tree:
         TableScan
           alias: alter5
-          Statistics: Num rows: 19 Data size: 1653 Basic stats: COMPLETE Column stats: COMPLETE
+          Statistics: Num rows: 49 Data size: 4263 Basic stats: COMPLETE Column stats: COMPLETE
           Select Operator
             expressions: col1 (type: string), 'a' (type: string)
             outputColumnNames: _col0, _col1
-            Statistics: Num rows: 19 Data size: 3268 Basic stats: COMPLETE Column stats: COMPLETE
+            Statistics: Num rows: 49 Data size: 8428 Basic stats: COMPLETE Column stats: COMPLETE
             ListSink
 
 PREHOOK: query: drop table src_stat_part

http://git-wip-us.apache.org/repos/asf/hive/blob/d0fa7d55/ql/src/test/results/clientpositive/autoColumnStats_5.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/autoColumnStats_5.q.out b/ql/src/test/results/clientpositive/autoColumnStats_5.q.out
index 2655bfd..db5dd86 100644
--- a/ql/src/test/results/clientpositive/autoColumnStats_5.q.out
+++ b/ql/src/test/results/clientpositive/autoColumnStats_5.q.out
@@ -27,14 +27,14 @@ STAGE PLANS:
       Map Operator Tree:
           TableScan
             alias: values__tmp__table__1
-            Statistics: Num rows: 2 Data size: 440 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
             Select Operator
               expressions: UDFToInteger(tmp_values_col1) (type: int), tmp_values_col2 (type: string)
               outputColumnNames: _col0, _col1
-              Statistics: Num rows: 2 Data size: 440 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
               File Output Operator
                 compressed: false
-                Statistics: Num rows: 2 Data size: 440 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
                 table:
                     input format: org.apache.hadoop.mapred.TextInputFormat
                     output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
@@ -43,18 +43,18 @@ STAGE PLANS:
               Select Operator
                 expressions: _col0 (type: int), _col1 (type: string), UDFToInteger('1') (type: int)
                 outputColumnNames: a, b, part
-                Statistics: Num rows: 2 Data size: 440 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
                 Group By Operator
                   aggregations: compute_stats(a, 'hll'), compute_stats(b, 'hll')
                   keys: part (type: int)
                   mode: hash
                   outputColumnNames: _col0, _col1, _col2
-                  Statistics: Num rows: 2 Data size: 440 Basic stats: COMPLETE Column stats: NONE
+                  Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
                   Reduce Output Operator
                     key expressions: _col0 (type: int)
                     sort order: +
                     Map-reduce partition columns: _col0 (type: int)
-                    Statistics: Num rows: 2 Data size: 440 Basic stats: COMPLETE Column stats: NONE
+                    Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
                     value expressions: _col1 (type: struct<columntype:string,min:bigint,max:bigint,countnulls:bigint,bitvector:binary>), _col2 (type: struct<columntype:string,maxlength:bigint,sumlength:bigint,count:bigint,countnulls:bigint,bitvector:binary>)
       Reduce Operator Tree:
         Group By Operator
@@ -62,14 +62,14 @@ STAGE PLANS:
           keys: KEY._col0 (type: int)
           mode: mergepartial
           outputColumnNames: _col0, _col1, _col2
-          Statistics: Num rows: 1 Data size: 220 Basic stats: COMPLETE Column stats: NONE
+          Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
           Select Operator
             expressions: _col1 (type: struct<columntype:string,min:bigint,max:bigint,countnulls:bigint,numdistinctvalues:bigint,ndvbitvector:binary>), _col2 (type: struct<columntype:string,maxlength:bigint,avglength:double,countnulls:bigint,numdistinctvalues:bigint,ndvbitvector:binary>), _col0 (type: int)
             outputColumnNames: _col0, _col1, _col2
-            Statistics: Num rows: 1 Data size: 220 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
               compressed: false
-              Statistics: Num rows: 1 Data size: 220 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
               table:
                   input format: org.apache.hadoop.mapred.SequenceFileInputFormat
                   output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat

http://git-wip-us.apache.org/repos/asf/hive/blob/d0fa7d55/ql/src/test/results/clientpositive/autoColumnStats_5a.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/autoColumnStats_5a.q.out b/ql/src/test/results/clientpositive/autoColumnStats_5a.q.out
index d173c98..40548d0 100644
--- a/ql/src/test/results/clientpositive/autoColumnStats_5a.q.out
+++ b/ql/src/test/results/clientpositive/autoColumnStats_5a.q.out
@@ -791,14 +791,14 @@ STAGE PLANS:
       Map Operator Tree:
           TableScan
             alias: values__tmp__table__5
-            Statistics: Num rows: 2 Data size: 440 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
             Select Operator
               expressions: UDFToInteger(tmp_values_col1) (type: int), tmp_values_col2 (type: string)
               outputColumnNames: _col0, _col1
-              Statistics: Num rows: 2 Data size: 440 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
               File Output Operator
                 compressed: false
-                Statistics: Num rows: 2 Data size: 440 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
                 table:
                     input format: org.apache.hadoop.mapred.TextInputFormat
                     output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
@@ -807,18 +807,18 @@ STAGE PLANS:
               Select Operator
                 expressions: _col0 (type: int), _col1 (type: string), UDFToInteger('1') (type: int)
                 outputColumnNames: a, b, part
-                Statistics: Num rows: 2 Data size: 440 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
                 Group By Operator
                   aggregations: compute_stats(a, 'hll'), compute_stats(b, 'hll')
                   keys: part (type: int)
                   mode: hash
                   outputColumnNames: _col0, _col1, _col2
-                  Statistics: Num rows: 2 Data size: 440 Basic stats: COMPLETE Column stats: NONE
+                  Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
                   Reduce Output Operator
                     key expressions: _col0 (type: int)
                     sort order: +
                     Map-reduce partition columns: _col0 (type: int)
-                    Statistics: Num rows: 2 Data size: 440 Basic stats: COMPLETE Column stats: NONE
+                    Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
                     value expressions: _col1 (type: struct<columntype:string,min:bigint,max:bigint,countnulls:bigint,bitvector:binary>), _col2 (type: struct<columntype:string,maxlength:bigint,sumlength:bigint,count:bigint,countnulls:bigint,bitvector:binary>)
       Reduce Operator Tree:
         Group By Operator
@@ -826,14 +826,14 @@ STAGE PLANS:
           keys: KEY._col0 (type: int)
           mode: mergepartial
           outputColumnNames: _col0, _col1, _col2
-          Statistics: Num rows: 1 Data size: 220 Basic stats: COMPLETE Column stats: NONE
+          Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
           Select Operator
             expressions: _col1 (type: struct<columntype:string,min:bigint,max:bigint,countnulls:bigint,numdistinctvalues:bigint,ndvbitvector:binary>), _col2 (type: struct<columntype:string,maxlength:bigint,avglength:double,countnulls:bigint,numdistinctvalues:bigint,ndvbitvector:binary>), _col0 (type: int)
             outputColumnNames: _col0, _col1, _col2
-            Statistics: Num rows: 1 Data size: 220 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
               compressed: false
-              Statistics: Num rows: 1 Data size: 220 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
               table:
                   input format: org.apache.hadoop.mapred.SequenceFileInputFormat
                   output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat

http://git-wip-us.apache.org/repos/asf/hive/blob/d0fa7d55/ql/src/test/results/clientpositive/auto_sortmerge_join_1.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/auto_sortmerge_join_1.q.out b/ql/src/test/results/clientpositive/auto_sortmerge_join_1.q.out
index d847937..097822b 100644
--- a/ql/src/test/results/clientpositive/auto_sortmerge_join_1.q.out
+++ b/ql/src/test/results/clientpositive/auto_sortmerge_join_1.q.out
@@ -113,16 +113,16 @@ STAGE PLANS:
       Map Operator Tree:
           TableScan
             alias: b
-            Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
             GatherStats: false
             Filter Operator
               isSamplingPred: false
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
               Select Operator
                 expressions: key (type: string)
                 outputColumnNames: _col0
-                Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
                 Sorted Merge Bucket Map Join Operator
                   condition map:
                        Inner Join 0 to 1
@@ -310,16 +310,16 @@ STAGE PLANS:
       Map Operator Tree:
           TableScan
             alias: a
-            Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
             GatherStats: false
             Filter Operator
               isSamplingPred: false
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
               Select Operator
                 expressions: key (type: string)
                 outputColumnNames: _col0
-                Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
                 Sorted Merge Bucket Map Join Operator
                   condition map:
                        Inner Join 0 to 1
@@ -568,16 +568,16 @@ STAGE PLANS:
         $hdt$_1:b 
           TableScan
             alias: b
-            Statistics: Num rows: 1 Data size: 114 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 2 Data size: 1140 Basic stats: COMPLETE Column stats: NONE
             GatherStats: false
             Filter Operator
               isSamplingPred: false
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 1 Data size: 114 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 2 Data size: 1140 Basic stats: COMPLETE Column stats: NONE
               Select Operator
                 expressions: key (type: string)
                 outputColumnNames: _col0
-                Statistics: Num rows: 1 Data size: 114 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 2 Data size: 1140 Basic stats: COMPLETE Column stats: NONE
                 HashTable Sink Operator
                   keys:
                     0 _col0 (type: string)
@@ -589,16 +589,16 @@ STAGE PLANS:
       Map Operator Tree:
           TableScan
             alias: a
-            Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
             GatherStats: false
             Filter Operator
               isSamplingPred: false
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
               Select Operator
                 expressions: key (type: string)
                 outputColumnNames: _col0
-                Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
                 Map Join Operator
                   condition map:
                        Inner Join 0 to 1
@@ -905,16 +905,16 @@ STAGE PLANS:
         $hdt$_0:a 
           TableScan
             alias: a
-            Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
             GatherStats: false
             Filter Operator
               isSamplingPred: false
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
               Select Operator
                 expressions: key (type: string)
                 outputColumnNames: _col0
-                Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
                 HashTable Sink Operator
                   keys:
                     0 _col0 (type: string)
@@ -926,16 +926,16 @@ STAGE PLANS:
       Map Operator Tree:
           TableScan
             alias: b
-            Statistics: Num rows: 1 Data size: 114 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 2 Data size: 1140 Basic stats: COMPLETE Column stats: NONE
             GatherStats: false
             Filter Operator
               isSamplingPred: false
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 1 Data size: 114 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 2 Data size: 1140 Basic stats: COMPLETE Column stats: NONE
               Select Operator
                 expressions: key (type: string)
                 outputColumnNames: _col0
-                Statistics: Num rows: 1 Data size: 114 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 2 Data size: 1140 Basic stats: COMPLETE Column stats: NONE
                 Map Join Operator
                   condition map:
                        Inner Join 0 to 1
@@ -1139,16 +1139,16 @@ STAGE PLANS:
       Map Operator Tree:
           TableScan
             alias: a
-            Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
             GatherStats: false
             Filter Operator
               isSamplingPred: false
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
               Select Operator
                 expressions: key (type: string)
                 outputColumnNames: _col0
-                Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
                 Sorted Merge Bucket Map Join Operator
                   condition map:
                        Inner Join 0 to 1

http://git-wip-us.apache.org/repos/asf/hive/blob/d0fa7d55/ql/src/test/results/clientpositive/auto_sortmerge_join_11.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/auto_sortmerge_join_11.q.out b/ql/src/test/results/clientpositive/auto_sortmerge_join_11.q.out
index 25bac39..2bdf3b9 100644
--- a/ql/src/test/results/clientpositive/auto_sortmerge_join_11.q.out
+++ b/ql/src/test/results/clientpositive/auto_sortmerge_join_11.q.out
@@ -222,16 +222,16 @@ STAGE PLANS:
         $hdt$_1:b 
           TableScan
             alias: b
-            Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
             GatherStats: false
             Filter Operator
               isSamplingPred: false
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
               Select Operator
                 expressions: key (type: string)
                 outputColumnNames: _col0
-                Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
                 HashTable Sink Operator
                   keys:
                     0 _col0 (type: string)
@@ -243,16 +243,16 @@ STAGE PLANS:
       Map Operator Tree:
           TableScan
             alias: a
-            Statistics: Num rows: 1 Data size: 114 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 2 Data size: 1140 Basic stats: COMPLETE Column stats: NONE
             GatherStats: false
             Filter Operator
               isSamplingPred: false
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 1 Data size: 114 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 2 Data size: 1140 Basic stats: COMPLETE Column stats: NONE
               Select Operator
                 expressions: key (type: string)
                 outputColumnNames: _col0
-                Statistics: Num rows: 1 Data size: 114 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 2 Data size: 1140 Basic stats: COMPLETE Column stats: NONE
                 Map Join Operator
                   condition map:
                        Inner Join 0 to 1
@@ -260,7 +260,7 @@ STAGE PLANS:
                     0 _col0 (type: string)
                     1 _col0 (type: string)
                   Position of Big Table: 0
-                  Statistics: Num rows: 127 Data size: 12786 Basic stats: COMPLETE Column stats: NONE
+                  Statistics: Num rows: 264 Data size: 127864 Basic stats: COMPLETE Column stats: NONE
                   Group By Operator
                     aggregations: count()
                     mode: hash
@@ -567,16 +567,16 @@ STAGE PLANS:
         $hdt$_0:a 
           TableScan
             alias: a
-            Statistics: Num rows: 1 Data size: 114 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 2 Data size: 1140 Basic stats: COMPLETE Column stats: NONE
             GatherStats: false
             Filter Operator
               isSamplingPred: false
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 1 Data size: 114 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 2 Data size: 1140 Basic stats: COMPLETE Column stats: NONE
               Select Operator
                 expressions: key (type: string)
                 outputColumnNames: _col0
-                Statistics: Num rows: 1 Data size: 114 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 2 Data size: 1140 Basic stats: COMPLETE Column stats: NONE
                 HashTable Sink Operator
                   keys:
                     0 _col0 (type: string)
@@ -588,16 +588,16 @@ STAGE PLANS:
       Map Operator Tree:
           TableScan
             alias: b
-            Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
             GatherStats: false
             Filter Operator
               isSamplingPred: false
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
               Select Operator
                 expressions: key (type: string)
                 outputColumnNames: _col0
-                Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
                 Map Join Operator
                   condition map:
                        Inner Join 0 to 1
@@ -605,7 +605,7 @@ STAGE PLANS:
                     0 _col0 (type: string)
                     1 _col0 (type: string)
                   Position of Big Table: 1
-                  Statistics: Num rows: 127 Data size: 12786 Basic stats: COMPLETE Column stats: NONE
+                  Statistics: Num rows: 264 Data size: 127864 Basic stats: COMPLETE Column stats: NONE
                   Group By Operator
                     aggregations: count()
                     mode: hash
@@ -790,42 +790,42 @@ STAGE PLANS:
       Map Operator Tree:
           TableScan
             alias: a
-            Statistics: Num rows: 1 Data size: 114 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 2 Data size: 1140 Basic stats: COMPLETE Column stats: NONE
             GatherStats: false
             Filter Operator
               isSamplingPred: false
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 1 Data size: 114 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 2 Data size: 1140 Basic stats: COMPLETE Column stats: NONE
               Select Operator
                 expressions: key (type: string)
                 outputColumnNames: _col0
-                Statistics: Num rows: 1 Data size: 114 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 2 Data size: 1140 Basic stats: COMPLETE Column stats: NONE
                 Reduce Output Operator
                   key expressions: _col0 (type: string)
                   null sort order: a
                   sort order: +
                   Map-reduce partition columns: _col0 (type: string)
-                  Statistics: Num rows: 1 Data size: 114 Basic stats: COMPLETE Column stats: NONE
+                  Statistics: Num rows: 2 Data size: 1140 Basic stats: COMPLETE Column stats: NONE
                   tag: 0
                   auto parallelism: false
           TableScan
             alias: b
-            Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
             GatherStats: false
             Filter Operator
               isSamplingPred: false
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
               Select Operator
                 expressions: key (type: string)
                 outputColumnNames: _col0
-                Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
                 Reduce Output Operator
                   key expressions: _col0 (type: string)
                   null sort order: a
                   sort order: +
                   Map-reduce partition columns: _col0 (type: string)
-                  Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+                  Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
                   tag: 1
                   auto parallelism: false
       Path -> Alias:
@@ -990,7 +990,7 @@ STAGE PLANS:
           keys:
             0 _col0 (type: string)
             1 _col0 (type: string)
-          Statistics: Num rows: 127 Data size: 12786 Basic stats: COMPLETE Column stats: NONE
+          Statistics: Num rows: 264 Data size: 127864 Basic stats: COMPLETE Column stats: NONE
           Group By Operator
             aggregations: count()
             mode: hash
@@ -1052,16 +1052,16 @@ STAGE PLANS:
       Map Operator Tree:
           TableScan
             alias: b
-            Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
             GatherStats: false
             Filter Operator
               isSamplingPred: false
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
               Select Operator
                 expressions: key (type: string)
                 outputColumnNames: _col0
-                Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+                Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
                 Sorted Merge Bucket Map Join Operator
                   condition map:
                        Inner Join 0 to 1
@@ -1249,12 +1249,12 @@ STAGE PLANS:
       Map Operator Tree:
           TableScan
             alias: b
-            Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
             GatherStats: false
             Filter Operator
               isSamplingPred: false
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
               Sorted Merge Bucket Map Join Operator
                 condition map:
                      Inner Join 0 to 1
@@ -1442,12 +1442,12 @@ STAGE PLANS:
       Map Operator Tree:
           TableScan
             alias: c
-            Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+            Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
             GatherStats: false
             Filter Operator
               isSamplingPred: false
               predicate: key is not null (type: boolean)
-              Statistics: Num rows: 116 Data size: 11624 Basic stats: COMPLETE Column stats: NONE
+              Statistics: Num rows: 240 Data size: 116240 Basic stats: COMPLETE Column stats: NONE
               Sorted Merge Bucket Map Join Operator
                 condition map:
                      Inner Join 0 to 1