You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jc...@apache.org on 2017/03/07 18:29:10 UTC

hive git commit: HIVE-16102: Grouping sets do not conform to SQL standard (Jesus Camacho Rodriguez, reviewed by Ashutosh Chauhan)

Repository: hive
Updated Branches:
  refs/heads/master 2a0a56af9 -> 19004fe86


HIVE-16102: Grouping sets do not conform to SQL standard (Jesus Camacho Rodriguez, 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/19004fe8
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/19004fe8
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/19004fe8

Branch: refs/heads/master
Commit: 19004fe86a41b2161b79bc892ea88b04138add5c
Parents: 2a0a56a
Author: Jesus Camacho Rodriguez <jc...@apache.org>
Authored: Mon Mar 6 11:19:05 2017 +0000
Committer: Jesus Camacho Rodriguez <jc...@apache.org>
Committed: Tue Mar 7 18:26:45 2017 +0000

----------------------------------------------------------------------
 .../org/apache/hadoop/hive/ql/ErrorMsg.java     |   4 +-
 .../hadoop/hive/ql/exec/GroupByOperator.java    |  21 +-
 .../rules/HiveExpandDistinctAggregatesRule.java |  10 +-
 .../hadoop/hive/ql/parse/CalcitePlanner.java    |  13 +-
 .../hadoop/hive/ql/parse/SemanticAnalyzer.java  |  16 +-
 .../clientpositive/multi_count_distinct.q       |   4 +-
 .../clientpositive/multi_count_distinct_null.q  |   6 +-
 .../clientnegative/groupby_grouping_sets1.q.out |   2 +-
 .../clientnegative/groupby_grouping_sets2.q.out |   2 +-
 ql/src/test/results/clientpositive/cte_1.q.out  |   8 +-
 .../results/clientpositive/groupby_cube1.q.out  |  14 +-
 .../clientpositive/groupby_grouping_id1.q.out   |  84 +--
 .../groupby_grouping_sets_grouping.q.out        |  92 ++-
 .../groupby_grouping_window.q.out               |   2 +-
 .../infer_bucket_sort_grouping_operators.q.out  | 620 +++++++++----------
 .../results/clientpositive/llap/cte_1.q.out     |   8 +-
 .../llap/groupby_grouping_id2.q.out             | 264 ++++----
 .../llap/multi_count_distinct_null.q.out        |  54 +-
 .../llap/vector_grouping_sets.q.out             |  14 +-
 .../clientpositive/spark/groupby_cube1.q.out    |  14 +-
 .../spark/groupby_grouping_id2.q.out            | 264 ++++----
 .../tez/multi_count_distinct.q.out              |  40 +-
 .../clientpositive/vector_grouping_sets.q.out   |  14 +-
 23 files changed, 782 insertions(+), 788 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java b/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java
index 2ffc130..6a43385 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java
@@ -277,8 +277,8 @@ public enum ErrorMsg {
     "Grouping sets aggregations (with rollups or cubes) are not allowed if aggregation function " +
     "parameters overlap with the aggregation functions columns"),
 
-  HIVE_GROUPING_SETS_AGGR_NOFUNC(10211,
-    "Grouping sets aggregations are not allowed if no aggregation function is presented"),
+  HIVE_GROUPING_SETS_EMPTY(10211,
+    "Empty grouping sets not allowed"),
 
   HIVE_UNION_REMOVE_OPTIMIZATION_NEEDS_SUBDIRECTORIES(10212,
     "In order to use hive.optimize.union.remove, the hadoop version that you are using " +

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/java/org/apache/hadoop/hive/ql/exec/GroupByOperator.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/GroupByOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/GroupByOperator.java
index be561ce..6d6c608 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/GroupByOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/GroupByOperator.java
@@ -63,9 +63,10 @@ import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
 import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils;
 import org.apache.hadoop.io.BytesWritable;
 import org.apache.hadoop.io.IntWritable;
-import org.apache.hadoop.io.LongWritable;
 import org.apache.hadoop.io.Text;
 
+import com.google.common.math.IntMath;
+
 import javolution.util.FastBitSet;
 
 /**
@@ -171,14 +172,18 @@ public class GroupByOperator extends Operator<GroupByDesc> {
    */
   protected transient int numEntriesHashTable;
 
-  public static FastBitSet groupingSet2BitSet(int value) {
+  /**
+   * This method returns the big-endian representation of value.
+   * @param value
+   * @param length
+   * @return
+   */
+  public static FastBitSet groupingSet2BitSet(int value, int length) {
     FastBitSet bits = new FastBitSet();
-    int index = 0;
-    while (value != 0) {
+    for (int index = length - 1; index >= 0; index--) {
       if (value % 2 != 0) {
         bits.set(index);
       }
-      ++index;
       value = value >>> 1;
     }
     return bits;
@@ -231,7 +236,7 @@ public class GroupByOperator extends Operator<GroupByDesc> {
       for (Integer groupingSet: groupingSets) {
         // Create the mapping corresponding to the grouping set
         newKeysGroupingSets[pos] = new IntWritable(groupingSet);
-        groupingSetsBitSet[pos] = groupingSet2BitSet(groupingSet);
+        groupingSetsBitSet[pos] = groupingSet2BitSet(groupingSet, groupingSetsPosition);
         pos++;
       }
     }
@@ -770,8 +775,8 @@ public class GroupByOperator extends Operator<GroupByDesc> {
 
           FastBitSet bitset = groupingSetsBitSet[groupingSetPos];
           // Some keys need to be left to null corresponding to that grouping set.
-          for (int keyPos = bitset.nextSetBit(0); keyPos >= 0;
-            keyPos = bitset.nextSetBit(keyPos+1)) {
+          for (int keyPos = bitset.nextClearBit(0); keyPos < groupingSetsPosition;
+                  keyPos = bitset.nextClearBit(keyPos+1)) {
             newKeysArray[keyPos] = cloneNewKeysArray[keyPos];
           }
 

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveExpandDistinctAggregatesRule.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveExpandDistinctAggregatesRule.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveExpandDistinctAggregatesRule.java
index 82624fc..9825e7e 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveExpandDistinctAggregatesRule.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveExpandDistinctAggregatesRule.java
@@ -61,6 +61,7 @@ import org.slf4j.LoggerFactory;
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
+import com.google.common.math.IntMath;
 
 /**
  * Planner rule that expands distinct aggregates
@@ -206,10 +207,11 @@ public final class HiveExpandDistinctAggregatesRule extends RelOptRule {
     return createCount(groupingSets, argList, cleanArgList, map, sourceOfForCountDistinct);
   }
 
-  private long getGroupingIdValue(List<Integer> list, List<Integer> sourceOfForCountDistinct) {
-    long ind = 0;
+  private int getGroupingIdValue(List<Integer> list, List<Integer> sourceOfForCountDistinct,
+          int groupCount) {
+    int ind = IntMath.pow(2, groupCount) - 1;
     for (int i : list) {
-      ind |= 1 << sourceOfForCountDistinct.indexOf(i);
+      ind &= ~(1 << groupCount - sourceOfForCountDistinct.indexOf(i) - 1);
     }
     return ind;
   }
@@ -240,7 +242,7 @@ public final class HiveExpandDistinctAggregatesRule extends RelOptRule {
     for (List<Integer> list : cleanArgList) {
       RexNode condition = rexBuilder.makeCall(SqlStdOperatorTable.EQUALS, originalInputRefs
           .get(originalInputRefs.size() - 1), rexBuilder.makeExactLiteral(new BigDecimal(
-          getGroupingIdValue(list, sourceOfForCountDistinct))));
+          getGroupingIdValue(list, sourceOfForCountDistinct, aggr.getGroupCount()))));
       if (list.size() == 1) {
         int pos = list.get(0);
         RexNode notNull = rexBuilder.makeCall(SqlStdOperatorTable.IS_NOT_NULL,

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
index db8d46e..bf0a11b 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
@@ -2621,7 +2621,7 @@ public class CalcitePlanner extends SemanticAnalyzer {
         Set<ImmutableBitSet> setTransformedGroupSets =
                 new HashSet<ImmutableBitSet>(groupSets.size());
         for(int val: groupSets) {
-          setTransformedGroupSets.add(convert(val));
+          setTransformedGroupSets.add(convert(val, groupSet.cardinality()));
         }
         // Calcite expects the grouping sets sorted and without duplicates
         transformedGroupSets = new ArrayList<ImmutableBitSet>(setTransformedGroupSets);
@@ -2656,16 +2656,19 @@ public class CalcitePlanner extends SemanticAnalyzer {
       return aggregateRel;
     }
 
-    private ImmutableBitSet convert(int value) {
+    /* This method returns the flip big-endian representation of value */
+    private ImmutableBitSet convert(int value, int length) {
       BitSet bits = new BitSet();
-      int index = 0;
-      while (value != 0L) {
+      for (int index = length - 1; index >= 0; index--) {
         if (value % 2 != 0) {
           bits.set(index);
         }
-        ++index;
         value = value >>> 1;
       }
+      // We flip the bits because Calcite considers that '1'
+      // means that the column participates in the GroupBy
+      // and '0' does not, as opposed to grouping_id.
+      bits.flip(0, length);
       return ImmutableBitSet.FROM_BIT_SET.apply(bits);
     }
 

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
index 0872e53..ee9101b 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
@@ -3918,7 +3918,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
         if (child.getType() != HiveParser.TOK_GROUPING_SETS_EXPRESSION) {
           continue;
         }
-        int bitmap = 0;
+        int bitmap = IntMath.pow(2, groupByExpr.size()) - 1;
         for (int j = 0; j < child.getChildCount(); ++j) {
           String treeAsString = child.getChild(j).toStringTree();
           Integer pos = exprPos.get(treeAsString);
@@ -3927,22 +3927,22 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
                 generateErrorMessage((ASTNode) child.getChild(j),
                     ErrorMsg.HIVE_GROUPING_SETS_EXPR_NOT_IN_GROUPBY.getErrorCodedMsg()));
           }
-          bitmap = setBit(bitmap, pos);
+          bitmap = unsetBit(bitmap, groupByExpr.size() - pos - 1);
         }
         result.add(bitmap);
       }
     }
-    if (checkForNoAggr(result)) {
+    if (checkForEmptyGroupingSets(result, IntMath.pow(2, groupByExpr.size()) - 1)) {
       throw new SemanticException(
-          ErrorMsg.HIVE_GROUPING_SETS_AGGR_NOFUNC.getMsg());
+          ErrorMsg.HIVE_GROUPING_SETS_EMPTY.getMsg());
     }
     return result;
   }
 
-  private boolean checkForNoAggr(List<Integer> bitmaps) {
+  private boolean checkForEmptyGroupingSets(List<Integer> bitmaps, int groupingIdAllSet) {
     boolean ret = true;
     for (int mask : bitmaps) {
-      ret &= mask == 0;
+      ret &= mask == groupingIdAllSet;
     }
     return ret;
   }
@@ -3951,6 +3951,10 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
     return bitmap | (1 << bitIdx);
   }
 
+  public static int unsetBit(int bitmap, int bitIdx) {
+    return bitmap & ~(1 << bitIdx);
+  }
+
   /**
    * This function is a wrapper of parseInfo.getGroupByForClause which
    * automatically translates SELECT DISTINCT a,b,c to SELECT a,b,c GROUP BY

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/test/queries/clientpositive/multi_count_distinct.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/multi_count_distinct.q b/ql/src/test/queries/clientpositive/multi_count_distinct.q
index 855cb64..fb0c5fe 100644
--- a/ql/src/test/queries/clientpositive/multi_count_distinct.q
+++ b/ql/src/test/queries/clientpositive/multi_count_distinct.q
@@ -24,8 +24,8 @@ count(distinct education_level, department_id), count(distinct department_id, ed
 select count(distinct gender), count(distinct department_id), count(distinct gender), count(distinct education_level),
 count(distinct education_level, department_id), count(distinct department_id, education_level), count(distinct department_id, education_level, gender) from employee;
 
-select count(case i when 1 then 1 else null end) as c0, count(case i when 2 then 1 else null end) as c1, 
-count(case i when 4 then 1 else null end) as c2 from (select grouping__id as i, department_id, gender, 
+select count(case i when 3 then 1 else null end) as c0, count(case i when 5 then 1 else null end) as c1, 
+count(case i when 6 then 1 else null end) as c2 from (select grouping__id as i, department_id, gender, 
 education_level from employee group by department_id, gender, education_level grouping sets 
 (department_id, gender, education_level))subq;
 

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/test/queries/clientpositive/multi_count_distinct_null.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/multi_count_distinct_null.q b/ql/src/test/queries/clientpositive/multi_count_distinct_null.q
index 442d855..3e16386 100644
--- a/ql/src/test/queries/clientpositive/multi_count_distinct_null.q
+++ b/ql/src/test/queries/clientpositive/multi_count_distinct_null.q
@@ -29,9 +29,9 @@ select count(distinct gender), count(distinct department_id), count(distinct gen
 count(distinct education_level, department_id), count(distinct department_id, education_level), count(distinct department_id, education_level, gender) from employee;
 
 select 
-count(case when i=1 and department_id is not null then 1 else null end) as c0, 
-count(case when i=2 and gender is not null then 1 else null end) as c1, 
-count(case when i=4 and education_level is not null then 1 else null end) as c2 from 
+count(case when i=3 and department_id is not null then 1 else null end) as c0, 
+count(case when i=5 and gender is not null then 1 else null end) as c1, 
+count(case when i=6 and education_level is not null then 1 else null end) as c2 from 
 (select grouping__id as i, department_id, gender, 
 education_level from employee group by department_id, gender, education_level grouping sets 
 (department_id, gender, education_level))subq;

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/test/results/clientnegative/groupby_grouping_sets1.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientnegative/groupby_grouping_sets1.q.out b/ql/src/test/results/clientnegative/groupby_grouping_sets1.q.out
index 8290d4c..12d0614 100644
--- a/ql/src/test/results/clientnegative/groupby_grouping_sets1.q.out
+++ b/ql/src/test/results/clientnegative/groupby_grouping_sets1.q.out
@@ -6,4 +6,4 @@ POSTHOOK: query: CREATE TABLE T1(a STRING, b STRING, c STRING)
 POSTHOOK: type: CREATETABLE
 POSTHOOK: Output: database:default
 POSTHOOK: Output: default@T1
-FAILED: SemanticException [Error 10211]: Grouping sets aggregations are not allowed if no aggregation function is presented
+FAILED: SemanticException [Error 10211]: Empty grouping sets not allowed

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/test/results/clientnegative/groupby_grouping_sets2.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientnegative/groupby_grouping_sets2.q.out b/ql/src/test/results/clientnegative/groupby_grouping_sets2.q.out
index 8290d4c..12d0614 100644
--- a/ql/src/test/results/clientnegative/groupby_grouping_sets2.q.out
+++ b/ql/src/test/results/clientnegative/groupby_grouping_sets2.q.out
@@ -6,4 +6,4 @@ POSTHOOK: query: CREATE TABLE T1(a STRING, b STRING, c STRING)
 POSTHOOK: type: CREATETABLE
 POSTHOOK: Output: database:default
 POSTHOOK: Output: default@T1
-FAILED: SemanticException [Error 10211]: Grouping sets aggregations are not allowed if no aggregation function is presented
+FAILED: SemanticException [Error 10211]: Empty grouping sets not allowed

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/test/results/clientpositive/cte_1.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/cte_1.q.out b/ql/src/test/results/clientpositive/cte_1.q.out
index d13ad42..9374a32 100644
--- a/ql/src/test/results/clientpositive/cte_1.q.out
+++ b/ql/src/test/results/clientpositive/cte_1.q.out
@@ -715,9 +715,9 @@ POSTHOOK: query: with q1 as (select * from alltypesorc)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@alltypesorc
 #### A masked pattern was here ####
-NULL	NULL	810.5504687159363
 NULL	NULL	2735.0
 NULL	NULL	2735.0
+NULL	NULL	810.5504687159363
 NULL	2x14G717LqcPA7Ic5	NULL
 NULL	3Ke6A1U847tV73	NULL
 NULL	45ja5suO	NULL
@@ -6872,8 +6872,8 @@ NULL	y605nF0K3mMoM75j	NULL
 762	BLoMwUJ51ns6pd	NULL
 762	a10E76jX35YwquKCTA	NULL
 762	q5y2Vy1	NULL
-6981	NULL	69.66666666666667
 6981	NULL	NULL
+6981	NULL	69.66666666666667
 6981	1FNNhmiFLGw425NA13g	-75.0
 6981	4KhrrQ0nJ7bMNTvhSCA	NULL
 6981	K630vaVf	NULL
@@ -12961,9 +12961,9 @@ POSTHOOK: query: with q1 as (select * from alltypesorc)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@alltypesorc
 #### A masked pattern was here ####
-NULL	NULL	810.5504687159363
 NULL	NULL	2735.0
 NULL	NULL	2735.0
+NULL	NULL	810.5504687159363
 NULL	2x14G717LqcPA7Ic5	NULL
 NULL	3Ke6A1U847tV73	NULL
 NULL	45ja5suO	NULL
@@ -19118,8 +19118,8 @@ NULL	y605nF0K3mMoM75j	NULL
 762	BLoMwUJ51ns6pd	NULL
 762	a10E76jX35YwquKCTA	NULL
 762	q5y2Vy1	NULL
-6981	NULL	69.66666666666667
 6981	NULL	NULL
+6981	NULL	69.66666666666667
 6981	1FNNhmiFLGw425NA13g	-75.0
 6981	4KhrrQ0nJ7bMNTvhSCA	NULL
 6981	K630vaVf	NULL

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/test/results/clientpositive/groupby_cube1.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby_cube1.q.out b/ql/src/test/results/clientpositive/groupby_cube1.q.out
index 0486b68..fd70a2c 100644
--- a/ql/src/test/results/clientpositive/groupby_cube1.q.out
+++ b/ql/src/test/results/clientpositive/groupby_cube1.q.out
@@ -224,16 +224,16 @@ POSTHOOK: query: SELECT key, val, GROUPING__ID, count(1) FROM T1 GROUP BY key, v
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-1	11	3	1
+1	11	0	1
 1	NULL	1	1
-2	12	3	1
+2	12	0	1
 2	NULL	1	1
-3	13	3	1
+3	13	0	1
 3	NULL	1	1
-7	17	3	1
+7	17	0	1
 7	NULL	1	1
-8	18	3	1
-8	28	3	1
+8	18	0	1
+8	28	0	1
 8	NULL	1	2
 NULL	11	2	1
 NULL	12	2	1
@@ -241,7 +241,7 @@ NULL	13	2	1
 NULL	17	2	1
 NULL	18	2	1
 NULL	28	2	1
-NULL	NULL	0	6
+NULL	NULL	3	6
 PREHOOK: query: EXPLAIN
 SELECT key, count(distinct val) FROM T1 GROUP BY key with cube
 PREHOOK: type: QUERY

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/test/results/clientpositive/groupby_grouping_id1.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby_grouping_id1.q.out b/ql/src/test/results/clientpositive/groupby_grouping_id1.q.out
index 9ef7615..c2a0393 100644
--- a/ql/src/test/results/clientpositive/groupby_grouping_id1.q.out
+++ b/ql/src/test/results/clientpositive/groupby_grouping_id1.q.out
@@ -22,7 +22,7 @@ POSTHOOK: query: SELECT key, val, GROUPING__ID from T1 group by key, val with cu
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-NULL	NULL	0
+NULL	NULL	3
 NULL	11	2
 NULL	12	2
 NULL	13	2
@@ -30,16 +30,16 @@ NULL	17	2
 NULL	18	2
 NULL	28	2
 1	NULL	1
-1	11	3
+1	11	0
 2	NULL	1
-2	12	3
+2	12	0
 3	NULL	1
-3	13	3
+3	13	0
 7	NULL	1
-7	17	3
+7	17	0
 8	NULL	1
-8	18	3
-8	28	3
+8	18	0
+8	28	0
 PREHOOK: query: SELECT key, val, GROUPING__ID from T1 group by cube(key, val)
 PREHOOK: type: QUERY
 PREHOOK: Input: default@t1
@@ -48,7 +48,7 @@ POSTHOOK: query: SELECT key, val, GROUPING__ID from T1 group by cube(key, val)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-NULL	NULL	0
+NULL	NULL	3
 NULL	11	2
 NULL	12	2
 NULL	13	2
@@ -56,16 +56,16 @@ NULL	17	2
 NULL	18	2
 NULL	28	2
 1	NULL	1
-1	11	3
+1	11	0
 2	NULL	1
-2	12	3
+2	12	0
 3	NULL	1
-3	13	3
+3	13	0
 7	NULL	1
-7	17	3
+7	17	0
 8	NULL	1
-8	18	3
-8	28	3
+8	18	0
+8	28	0
 PREHOOK: query: SELECT GROUPING__ID, key, val from T1 group by key, val with rollup
 PREHOOK: type: QUERY
 PREHOOK: Input: default@t1
@@ -74,18 +74,18 @@ POSTHOOK: query: SELECT GROUPING__ID, key, val from T1 group by key, val with ro
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-0	NULL	NULL
+3	NULL	NULL
 1	1	NULL
-3	1	11
+0	1	11
 1	2	NULL
-3	2	12
+0	2	12
 1	3	NULL
-3	3	13
+0	3	13
 1	7	NULL
-3	7	17
+0	7	17
 1	8	NULL
-3	8	18
-3	8	28
+0	8	18
+0	8	28
 PREHOOK: query: SELECT GROUPING__ID, key, val from T1 group by rollup (key, val)
 PREHOOK: type: QUERY
 PREHOOK: Input: default@t1
@@ -94,18 +94,18 @@ POSTHOOK: query: SELECT GROUPING__ID, key, val from T1 group by rollup (key, val
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-0	NULL	NULL
+3	NULL	NULL
 1	1	NULL
-3	1	11
+0	1	11
 1	2	NULL
-3	2	12
+0	2	12
 1	3	NULL
-3	3	13
+0	3	13
 1	7	NULL
-3	7	17
+0	7	17
 1	8	NULL
-3	8	18
-3	8	28
+0	8	18
+0	8	28
 PREHOOK: query: SELECT key, val, GROUPING__ID, CASE WHEN GROUPING__ID == 0 THEN "0" WHEN GROUPING__ID == 1 THEN "1" WHEN GROUPING__ID == 2 THEN "2" WHEN GROUPING__ID == 3 THEN "3" ELSE "nothing" END from T1 group by key, val with cube
 PREHOOK: type: QUERY
 PREHOOK: Input: default@t1
@@ -114,7 +114,7 @@ POSTHOOK: query: SELECT key, val, GROUPING__ID, CASE WHEN GROUPING__ID == 0 THEN
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-NULL	NULL	0	0
+NULL	NULL	3	3
 NULL	11	2	2
 NULL	12	2	2
 NULL	13	2	2
@@ -122,16 +122,16 @@ NULL	17	2	2
 NULL	18	2	2
 NULL	28	2	2
 1	NULL	1	1
-1	11	3	3
+1	11	0	0
 2	NULL	1	1
-2	12	3	3
+2	12	0	0
 3	NULL	1	1
-3	13	3	3
+3	13	0	0
 7	NULL	1	1
-7	17	3	3
+7	17	0	0
 8	NULL	1	1
-8	18	3	3
-8	28	3	3
+8	18	0	0
+8	28	0	0
 PREHOOK: query: SELECT key, val, GROUPING__ID, CASE WHEN GROUPING__ID == 0 THEN "0" WHEN GROUPING__ID == 1 THEN "1" WHEN GROUPING__ID == 2 THEN "2" WHEN GROUPING__ID == 3 THEN "3" ELSE "nothing" END from T1 group by cube(key, val)
 PREHOOK: type: QUERY
 PREHOOK: Input: default@t1
@@ -140,7 +140,7 @@ POSTHOOK: query: SELECT key, val, GROUPING__ID, CASE WHEN GROUPING__ID == 0 THEN
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-NULL	NULL	0	0
+NULL	NULL	3	3
 NULL	11	2	2
 NULL	12	2	2
 NULL	13	2	2
@@ -148,13 +148,13 @@ NULL	17	2	2
 NULL	18	2	2
 NULL	28	2	2
 1	NULL	1	1
-1	11	3	3
+1	11	0	0
 2	NULL	1	1
-2	12	3	3
+2	12	0	0
 3	NULL	1	1
-3	13	3	3
+3	13	0	0
 7	NULL	1	1
-7	17	3	3
+7	17	0	0
 8	NULL	1	1
-8	18	3	3
-8	28	3	3
+8	18	0	0
+8	28	0	0

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/test/results/clientpositive/groupby_grouping_sets_grouping.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby_grouping_sets_grouping.q.out b/ql/src/test/results/clientpositive/groupby_grouping_sets_grouping.q.out
index 6917dba..7faf278 100644
--- a/ql/src/test/results/clientpositive/groupby_grouping_sets_grouping.q.out
+++ b/ql/src/test/results/clientpositive/groupby_grouping_sets_grouping.q.out
@@ -85,17 +85,17 @@ group by rollup(key, value)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-NULL	NULL	0	0	0
+NULL	NULL	3	1	1
+1	NULL	0	0	0
 1	NULL	1	0	1
-1	NULL	3	1	1
-1	1	3	1	1
+1	1	0	0	0
 2	NULL	1	0	1
-2	2	3	1	1
+2	2	0	0	0
+3	NULL	0	0	0
 3	NULL	1	0	1
-3	NULL	3	1	1
-3	3	3	1	1
+3	3	0	0	0
 4	NULL	1	0	1
-4	5	3	1	1
+4	5	0	0	0
 PREHOOK: query: explain
 select key, value, `grouping__id`, grouping(key), grouping(value)
 from T1
@@ -167,22 +167,22 @@ group by cube(key, value)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-NULL	NULL	0	0	0
 NULL	NULL	2	1	0
+NULL	NULL	3	1	1
 NULL	1	2	1	0
 NULL	2	2	1	0
 NULL	3	2	1	0
 NULL	5	2	1	0
+1	NULL	0	0	0
 1	NULL	1	0	1
-1	NULL	3	1	1
-1	1	3	1	1
+1	1	0	0	0
 2	NULL	1	0	1
-2	2	3	1	1
+2	2	0	0	0
+3	NULL	0	0	0
 3	NULL	1	0	1
-3	NULL	3	1	1
-3	3	3	1	1
+3	3	0	0	0
 4	NULL	1	0	1
-4	5	3	1	1
+4	5	0	0	0
 PREHOOK: query: explain
 select key, value
 from T1
@@ -262,16 +262,11 @@ POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
 NULL	NULL
+NULL	NULL
 NULL	1
 NULL	2
 NULL	3
 NULL	5
-1	NULL
-1	1
-2	2
-3	NULL
-3	3
-4	5
 PREHOOK: query: explain
 select key, value, grouping(key)+grouping(value) as x
 from T1
@@ -376,17 +371,12 @@ order by x desc, case when x = 1 then key end
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-4	5	2
-3	3	2
-3	NULL	2
-2	2	2
-1	1	2
-1	NULL	2
-NULL	1	1
-NULL	NULL	1
+NULL	NULL	2
 NULL	5	1
 NULL	3	1
 NULL	2	1
+NULL	1	1
+NULL	NULL	1
 1	NULL	1
 2	NULL	1
 3	NULL	1
@@ -462,17 +452,17 @@ group by rollup(key, value)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-NULL	NULL	0	0	0
+NULL	NULL	3	1	1
+1	NULL	0	0	0
 1	NULL	1	0	1
-1	NULL	3	1	1
-1	1	3	1	1
+1	1	0	0	0
 2	NULL	1	0	1
-2	2	3	1	1
+2	2	0	0	0
+3	NULL	0	0	0
 3	NULL	1	0	1
-3	NULL	3	1	1
-3	3	3	1	1
+3	3	0	0	0
 4	NULL	1	0	1
-4	5	3	1	1
+4	5	0	0	0
 PREHOOK: query: explain
 select key, value, `grouping__id`, grouping(key), grouping(value)
 from T1
@@ -544,22 +534,22 @@ group by cube(key, value)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-NULL	NULL	0	0	0
 NULL	NULL	2	1	0
+NULL	NULL	3	1	1
 NULL	1	2	1	0
 NULL	2	2	1	0
 NULL	3	2	1	0
 NULL	5	2	1	0
+1	NULL	0	0	0
 1	NULL	1	0	1
-1	NULL	3	1	1
-1	1	3	1	1
+1	1	0	0	0
 2	NULL	1	0	1
-2	2	3	1	1
+2	2	0	0	0
+3	NULL	0	0	0
 3	NULL	1	0	1
-3	NULL	3	1	1
-3	3	3	1	1
+3	3	0	0	0
 4	NULL	1	0	1
-4	5	3	1	1
+4	5	0	0	0
 PREHOOK: query: explain
 select key, value
 from T1
@@ -636,16 +626,11 @@ POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
 NULL	NULL
+NULL	NULL
 NULL	1
 NULL	2
 NULL	3
 NULL	5
-1	NULL
-1	1
-2	2
-3	NULL
-3	3
-4	5
 PREHOOK: query: explain
 select key, value, grouping(key)+grouping(value) as x
 from T1
@@ -750,17 +735,12 @@ order by x desc, case when x = 1 then key end
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-4	5	2
-3	3	2
-3	NULL	2
-2	2	2
-1	1	2
-1	NULL	2
-NULL	1	1
-NULL	NULL	1
+NULL	NULL	2
 NULL	5	1
 NULL	3	1
 NULL	2	1
+NULL	1	1
+NULL	NULL	1
 1	NULL	1
 2	NULL	1
 3	NULL	1

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/test/results/clientpositive/groupby_grouping_window.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/groupby_grouping_window.q.out b/ql/src/test/results/clientpositive/groupby_grouping_window.q.out
index 202fad0..4fc36ed 100644
--- a/ql/src/test/results/clientpositive/groupby_grouping_window.q.out
+++ b/ql/src/test/results/clientpositive/groupby_grouping_window.q.out
@@ -168,7 +168,7 @@ POSTHOOK: Input: default@t
 0	NULL
 0	NULL
 0	NULL
-0	NULL
+1	NULL
 PREHOOK: query: SELECT grouping(category), lead(live) over(partition by grouping(category))
 FROM t
 GROUP BY category, live

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/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 d740dea..40bdc52 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
@@ -786,625 +786,625 @@ POSTHOOK: query: SELECT key, value, GROUPING__ID, count(1) FROM src GROUP BY ROL
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@src
 #### A masked pattern was here ####
-NULL	NULL	0	500
+NULL	NULL	3	500
 0	NULL	1	3
-0	val_0	3	3
+0	val_0	0	3
 10	NULL	1	1
-10	val_10	3	1
+10	val_10	0	1
 100	NULL	1	2
-100	val_100	3	2
+100	val_100	0	2
 103	NULL	1	2
-103	val_103	3	2
+103	val_103	0	2
 104	NULL	1	2
-104	val_104	3	2
+104	val_104	0	2
 105	NULL	1	1
-105	val_105	3	1
+105	val_105	0	1
 11	NULL	1	1
-11	val_11	3	1
+11	val_11	0	1
 111	NULL	1	1
-111	val_111	3	1
+111	val_111	0	1
 113	NULL	1	2
-113	val_113	3	2
+113	val_113	0	2
 114	NULL	1	1
-114	val_114	3	1
+114	val_114	0	1
 116	NULL	1	1
-116	val_116	3	1
+116	val_116	0	1
 118	NULL	1	2
-118	val_118	3	2
+118	val_118	0	2
 119	NULL	1	3
-119	val_119	3	3
+119	val_119	0	3
 12	NULL	1	2
-12	val_12	3	2
+12	val_12	0	2
 120	NULL	1	2
-120	val_120	3	2
+120	val_120	0	2
 125	NULL	1	2
-125	val_125	3	2
+125	val_125	0	2
 126	NULL	1	1
-126	val_126	3	1
+126	val_126	0	1
 128	NULL	1	3
-128	val_128	3	3
+128	val_128	0	3
 129	NULL	1	2
-129	val_129	3	2
+129	val_129	0	2
 131	NULL	1	1
-131	val_131	3	1
+131	val_131	0	1
 133	NULL	1	1
-133	val_133	3	1
+133	val_133	0	1
 134	NULL	1	2
-134	val_134	3	2
+134	val_134	0	2
 136	NULL	1	1
-136	val_136	3	1
+136	val_136	0	1
 137	NULL	1	2
-137	val_137	3	2
+137	val_137	0	2
 138	NULL	1	4
-138	val_138	3	4
+138	val_138	0	4
 143	NULL	1	1
-143	val_143	3	1
+143	val_143	0	1
 145	NULL	1	1
-145	val_145	3	1
+145	val_145	0	1
 146	NULL	1	2
-146	val_146	3	2
+146	val_146	0	2
 149	NULL	1	2
-149	val_149	3	2
+149	val_149	0	2
 15	NULL	1	2
-15	val_15	3	2
+15	val_15	0	2
 150	NULL	1	1
-150	val_150	3	1
+150	val_150	0	1
 152	NULL	1	2
-152	val_152	3	2
+152	val_152	0	2
 153	NULL	1	1
-153	val_153	3	1
+153	val_153	0	1
 155	NULL	1	1
-155	val_155	3	1
+155	val_155	0	1
 156	NULL	1	1
-156	val_156	3	1
+156	val_156	0	1
 157	NULL	1	1
-157	val_157	3	1
+157	val_157	0	1
 158	NULL	1	1
-158	val_158	3	1
+158	val_158	0	1
 160	NULL	1	1
-160	val_160	3	1
+160	val_160	0	1
 162	NULL	1	1
-162	val_162	3	1
+162	val_162	0	1
 163	NULL	1	1
-163	val_163	3	1
+163	val_163	0	1
 164	NULL	1	2
-164	val_164	3	2
+164	val_164	0	2
 165	NULL	1	2
-165	val_165	3	2
+165	val_165	0	2
 166	NULL	1	1
-166	val_166	3	1
+166	val_166	0	1
 167	NULL	1	3
-167	val_167	3	3
+167	val_167	0	3
 168	NULL	1	1
-168	val_168	3	1
+168	val_168	0	1
 169	NULL	1	4
-169	val_169	3	4
+169	val_169	0	4
 17	NULL	1	1
-17	val_17	3	1
+17	val_17	0	1
 170	NULL	1	1
-170	val_170	3	1
+170	val_170	0	1
 172	NULL	1	2
-172	val_172	3	2
+172	val_172	0	2
 174	NULL	1	2
-174	val_174	3	2
+174	val_174	0	2
 175	NULL	1	2
-175	val_175	3	2
+175	val_175	0	2
 176	NULL	1	2
-176	val_176	3	2
+176	val_176	0	2
 177	NULL	1	1
-177	val_177	3	1
+177	val_177	0	1
 178	NULL	1	1
-178	val_178	3	1
+178	val_178	0	1
 179	NULL	1	2
-179	val_179	3	2
+179	val_179	0	2
 18	NULL	1	2
-18	val_18	3	2
+18	val_18	0	2
 180	NULL	1	1
-180	val_180	3	1
+180	val_180	0	1
 181	NULL	1	1
-181	val_181	3	1
+181	val_181	0	1
 183	NULL	1	1
-183	val_183	3	1
+183	val_183	0	1
 186	NULL	1	1
-186	val_186	3	1
+186	val_186	0	1
 187	NULL	1	3
-187	val_187	3	3
+187	val_187	0	3
 189	NULL	1	1
-189	val_189	3	1
+189	val_189	0	1
 19	NULL	1	1
-19	val_19	3	1
+19	val_19	0	1
 190	NULL	1	1
-190	val_190	3	1
+190	val_190	0	1
 191	NULL	1	2
-191	val_191	3	2
+191	val_191	0	2
 192	NULL	1	1
-192	val_192	3	1
+192	val_192	0	1
 193	NULL	1	3
-193	val_193	3	3
+193	val_193	0	3
 194	NULL	1	1
-194	val_194	3	1
+194	val_194	0	1
 195	NULL	1	2
-195	val_195	3	2
+195	val_195	0	2
 196	NULL	1	1
-196	val_196	3	1
+196	val_196	0	1
 197	NULL	1	2
-197	val_197	3	2
+197	val_197	0	2
 199	NULL	1	3
-199	val_199	3	3
+199	val_199	0	3
 2	NULL	1	1
-2	val_2	3	1
+2	val_2	0	1
 20	NULL	1	1
-20	val_20	3	1
+20	val_20	0	1
 200	NULL	1	2
-200	val_200	3	2
+200	val_200	0	2
 201	NULL	1	1
-201	val_201	3	1
+201	val_201	0	1
 202	NULL	1	1
-202	val_202	3	1
+202	val_202	0	1
 203	NULL	1	2
-203	val_203	3	2
+203	val_203	0	2
 205	NULL	1	2
-205	val_205	3	2
+205	val_205	0	2
 207	NULL	1	2
-207	val_207	3	2
+207	val_207	0	2
 208	NULL	1	3
-208	val_208	3	3
+208	val_208	0	3
 209	NULL	1	2
-209	val_209	3	2
+209	val_209	0	2
 213	NULL	1	2
-213	val_213	3	2
+213	val_213	0	2
 214	NULL	1	1
-214	val_214	3	1
+214	val_214	0	1
 216	NULL	1	2
-216	val_216	3	2
+216	val_216	0	2
 217	NULL	1	2
-217	val_217	3	2
+217	val_217	0	2
 218	NULL	1	1
-218	val_218	3	1
+218	val_218	0	1
 219	NULL	1	2
-219	val_219	3	2
+219	val_219	0	2
 221	NULL	1	2
-221	val_221	3	2
+221	val_221	0	2
 222	NULL	1	1
-222	val_222	3	1
+222	val_222	0	1
 223	NULL	1	2
-223	val_223	3	2
+223	val_223	0	2
 224	NULL	1	2
-224	val_224	3	2
+224	val_224	0	2
 226	NULL	1	1
-226	val_226	3	1
+226	val_226	0	1
 228	NULL	1	1
-228	val_228	3	1
+228	val_228	0	1
 229	NULL	1	2
-229	val_229	3	2
+229	val_229	0	2
 230	NULL	1	5
-230	val_230	3	5
+230	val_230	0	5
 233	NULL	1	2
-233	val_233	3	2
+233	val_233	0	2
 235	NULL	1	1
-235	val_235	3	1
+235	val_235	0	1
 237	NULL	1	2
-237	val_237	3	2
+237	val_237	0	2
 238	NULL	1	2
-238	val_238	3	2
+238	val_238	0	2
 239	NULL	1	2
-239	val_239	3	2
+239	val_239	0	2
 24	NULL	1	2
-24	val_24	3	2
+24	val_24	0	2
 241	NULL	1	1
-241	val_241	3	1
+241	val_241	0	1
 242	NULL	1	2
-242	val_242	3	2
+242	val_242	0	2
 244	NULL	1	1
-244	val_244	3	1
+244	val_244	0	1
 247	NULL	1	1
-247	val_247	3	1
+247	val_247	0	1
 248	NULL	1	1
-248	val_248	3	1
+248	val_248	0	1
 249	NULL	1	1
-249	val_249	3	1
+249	val_249	0	1
 252	NULL	1	1
-252	val_252	3	1
+252	val_252	0	1
 255	NULL	1	2
-255	val_255	3	2
+255	val_255	0	2
 256	NULL	1	2
-256	val_256	3	2
+256	val_256	0	2
 257	NULL	1	1
-257	val_257	3	1
+257	val_257	0	1
 258	NULL	1	1
-258	val_258	3	1
+258	val_258	0	1
 26	NULL	1	2
-26	val_26	3	2
+26	val_26	0	2
 260	NULL	1	1
-260	val_260	3	1
+260	val_260	0	1
 262	NULL	1	1
-262	val_262	3	1
+262	val_262	0	1
 263	NULL	1	1
-263	val_263	3	1
+263	val_263	0	1
 265	NULL	1	2
-265	val_265	3	2
+265	val_265	0	2
 266	NULL	1	1
-266	val_266	3	1
+266	val_266	0	1
 27	NULL	1	1
-27	val_27	3	1
+27	val_27	0	1
 272	NULL	1	2
-272	val_272	3	2
+272	val_272	0	2
 273	NULL	1	3
-273	val_273	3	3
+273	val_273	0	3
 274	NULL	1	1
-274	val_274	3	1
+274	val_274	0	1
 275	NULL	1	1
-275	val_275	3	1
+275	val_275	0	1
 277	NULL	1	4
-277	val_277	3	4
+277	val_277	0	4
 278	NULL	1	2
-278	val_278	3	2
+278	val_278	0	2
 28	NULL	1	1
-28	val_28	3	1
+28	val_28	0	1
 280	NULL	1	2
-280	val_280	3	2
+280	val_280	0	2
 281	NULL	1	2
-281	val_281	3	2
+281	val_281	0	2
 282	NULL	1	2
-282	val_282	3	2
+282	val_282	0	2
 283	NULL	1	1
-283	val_283	3	1
+283	val_283	0	1
 284	NULL	1	1
-284	val_284	3	1
+284	val_284	0	1
 285	NULL	1	1
-285	val_285	3	1
+285	val_285	0	1
 286	NULL	1	1
-286	val_286	3	1
+286	val_286	0	1
 287	NULL	1	1
-287	val_287	3	1
+287	val_287	0	1
 288	NULL	1	2
-288	val_288	3	2
+288	val_288	0	2
 289	NULL	1	1
-289	val_289	3	1
+289	val_289	0	1
 291	NULL	1	1
-291	val_291	3	1
+291	val_291	0	1
 292	NULL	1	1
-292	val_292	3	1
+292	val_292	0	1
 296	NULL	1	1
-296	val_296	3	1
+296	val_296	0	1
 298	NULL	1	3
-298	val_298	3	3
+298	val_298	0	3
 30	NULL	1	1
-30	val_30	3	1
+30	val_30	0	1
 302	NULL	1	1
-302	val_302	3	1
+302	val_302	0	1
 305	NULL	1	1
-305	val_305	3	1
+305	val_305	0	1
 306	NULL	1	1
-306	val_306	3	1
+306	val_306	0	1
 307	NULL	1	2
-307	val_307	3	2
+307	val_307	0	2
 308	NULL	1	1
-308	val_308	3	1
+308	val_308	0	1
 309	NULL	1	2
-309	val_309	3	2
+309	val_309	0	2
 310	NULL	1	1
-310	val_310	3	1
+310	val_310	0	1
 311	NULL	1	3
-311	val_311	3	3
+311	val_311	0	3
 315	NULL	1	1
-315	val_315	3	1
+315	val_315	0	1
 316	NULL	1	3
-316	val_316	3	3
+316	val_316	0	3
 317	NULL	1	2
-317	val_317	3	2
+317	val_317	0	2
 318	NULL	1	3
-318	val_318	3	3
+318	val_318	0	3
 321	NULL	1	2
-321	val_321	3	2
+321	val_321	0	2
 322	NULL	1	2
-322	val_322	3	2
+322	val_322	0	2
 323	NULL	1	1
-323	val_323	3	1
+323	val_323	0	1
 325	NULL	1	2
-325	val_325	3	2
+325	val_325	0	2
 327	NULL	1	3
-327	val_327	3	3
+327	val_327	0	3
 33	NULL	1	1
-33	val_33	3	1
+33	val_33	0	1
 331	NULL	1	2
-331	val_331	3	2
+331	val_331	0	2
 332	NULL	1	1
-332	val_332	3	1
+332	val_332	0	1
 333	NULL	1	2
-333	val_333	3	2
+333	val_333	0	2
 335	NULL	1	1
-335	val_335	3	1
+335	val_335	0	1
 336	NULL	1	1
-336	val_336	3	1
+336	val_336	0	1
 338	NULL	1	1
-338	val_338	3	1
+338	val_338	0	1
 339	NULL	1	1
-339	val_339	3	1
+339	val_339	0	1
 34	NULL	1	1
-34	val_34	3	1
+34	val_34	0	1
 341	NULL	1	1
-341	val_341	3	1
+341	val_341	0	1
 342	NULL	1	2
-342	val_342	3	2
+342	val_342	0	2
 344	NULL	1	2
-344	val_344	3	2
+344	val_344	0	2
 345	NULL	1	1
-345	val_345	3	1
+345	val_345	0	1
 348	NULL	1	5
-348	val_348	3	5
+348	val_348	0	5
 35	NULL	1	3
-35	val_35	3	3
+35	val_35	0	3
 351	NULL	1	1
-351	val_351	3	1
+351	val_351	0	1
 353	NULL	1	2
-353	val_353	3	2
+353	val_353	0	2
 356	NULL	1	1
-356	val_356	3	1
+356	val_356	0	1
 360	NULL	1	1
-360	val_360	3	1
+360	val_360	0	1
 362	NULL	1	1
-362	val_362	3	1
+362	val_362	0	1
 364	NULL	1	1
-364	val_364	3	1
+364	val_364	0	1
 365	NULL	1	1
-365	val_365	3	1
+365	val_365	0	1
 366	NULL	1	1
-366	val_366	3	1
+366	val_366	0	1
 367	NULL	1	2
-367	val_367	3	2
+367	val_367	0	2
 368	NULL	1	1
-368	val_368	3	1
+368	val_368	0	1
 369	NULL	1	3
-369	val_369	3	3
+369	val_369	0	3
 37	NULL	1	2
-37	val_37	3	2
+37	val_37	0	2
 373	NULL	1	1
-373	val_373	3	1
+373	val_373	0	1
 374	NULL	1	1
-374	val_374	3	1
+374	val_374	0	1
 375	NULL	1	1
-375	val_375	3	1
+375	val_375	0	1
 377	NULL	1	1
-377	val_377	3	1
+377	val_377	0	1
 378	NULL	1	1
-378	val_378	3	1
+378	val_378	0	1
 379	NULL	1	1
-379	val_379	3	1
+379	val_379	0	1
 382	NULL	1	2
-382	val_382	3	2
+382	val_382	0	2
 384	NULL	1	3
-384	val_384	3	3
+384	val_384	0	3
 386	NULL	1	1
-386	val_386	3	1
+386	val_386	0	1
 389	NULL	1	1
-389	val_389	3	1
+389	val_389	0	1
 392	NULL	1	1
-392	val_392	3	1
+392	val_392	0	1
 393	NULL	1	1
-393	val_393	3	1
+393	val_393	0	1
 394	NULL	1	1
-394	val_394	3	1
+394	val_394	0	1
 395	NULL	1	2
-395	val_395	3	2
+395	val_395	0	2
 396	NULL	1	3
-396	val_396	3	3
+396	val_396	0	3
 397	NULL	1	2
-397	val_397	3	2
+397	val_397	0	2
 399	NULL	1	2
-399	val_399	3	2
+399	val_399	0	2
 4	NULL	1	1
-4	val_4	3	1
+4	val_4	0	1
 400	NULL	1	1
-400	val_400	3	1
+400	val_400	0	1
 401	NULL	1	5
-401	val_401	3	5
+401	val_401	0	5
 402	NULL	1	1
-402	val_402	3	1
+402	val_402	0	1
 403	NULL	1	3
-403	val_403	3	3
+403	val_403	0	3
 404	NULL	1	2
-404	val_404	3	2
+404	val_404	0	2
 406	NULL	1	4
-406	val_406	3	4
+406	val_406	0	4
 407	NULL	1	1
-407	val_407	3	1
+407	val_407	0	1
 409	NULL	1	3
-409	val_409	3	3
+409	val_409	0	3
 41	NULL	1	1
-41	val_41	3	1
+41	val_41	0	1
 411	NULL	1	1
-411	val_411	3	1
+411	val_411	0	1
 413	NULL	1	2
-413	val_413	3	2
+413	val_413	0	2
 414	NULL	1	2
-414	val_414	3	2
+414	val_414	0	2
 417	NULL	1	3
-417	val_417	3	3
+417	val_417	0	3
 418	NULL	1	1
-418	val_418	3	1
+418	val_418	0	1
 419	NULL	1	1
-419	val_419	3	1
+419	val_419	0	1
 42	NULL	1	2
-42	val_42	3	2
+42	val_42	0	2
 421	NULL	1	1
-421	val_421	3	1
+421	val_421	0	1
 424	NULL	1	2
-424	val_424	3	2
+424	val_424	0	2
 427	NULL	1	1
-427	val_427	3	1
+427	val_427	0	1
 429	NULL	1	2
-429	val_429	3	2
+429	val_429	0	2
 43	NULL	1	1
-43	val_43	3	1
+43	val_43	0	1
 430	NULL	1	3
-430	val_430	3	3
+430	val_430	0	3
 431	NULL	1	3
-431	val_431	3	3
+431	val_431	0	3
 432	NULL	1	1
-432	val_432	3	1
+432	val_432	0	1
 435	NULL	1	1
-435	val_435	3	1
+435	val_435	0	1
 436	NULL	1	1
-436	val_436	3	1
+436	val_436	0	1
 437	NULL	1	1
-437	val_437	3	1
+437	val_437	0	1
 438	NULL	1	3
-438	val_438	3	3
+438	val_438	0	3
 439	NULL	1	2
-439	val_439	3	2
+439	val_439	0	2
 44	NULL	1	1
-44	val_44	3	1
+44	val_44	0	1
 443	NULL	1	1
-443	val_443	3	1
+443	val_443	0	1
 444	NULL	1	1
-444	val_444	3	1
+444	val_444	0	1
 446	NULL	1	1
-446	val_446	3	1
+446	val_446	0	1
 448	NULL	1	1
-448	val_448	3	1
+448	val_448	0	1
 449	NULL	1	1
-449	val_449	3	1
+449	val_449	0	1
 452	NULL	1	1
-452	val_452	3	1
+452	val_452	0	1
 453	NULL	1	1
-453	val_453	3	1
+453	val_453	0	1
 454	NULL	1	3
-454	val_454	3	3
+454	val_454	0	3
 455	NULL	1	1
-455	val_455	3	1
+455	val_455	0	1
 457	NULL	1	1
-457	val_457	3	1
+457	val_457	0	1
 458	NULL	1	2
-458	val_458	3	2
+458	val_458	0	2
 459	NULL	1	2
-459	val_459	3	2
+459	val_459	0	2
 460	NULL	1	1
-460	val_460	3	1
+460	val_460	0	1
 462	NULL	1	2
-462	val_462	3	2
+462	val_462	0	2
 463	NULL	1	2
-463	val_463	3	2
+463	val_463	0	2
 466	NULL	1	3
-466	val_466	3	3
+466	val_466	0	3
 467	NULL	1	1
-467	val_467	3	1
+467	val_467	0	1
 468	NULL	1	4
-468	val_468	3	4
+468	val_468	0	4
 469	NULL	1	5
-469	val_469	3	5
+469	val_469	0	5
 47	NULL	1	1
-47	val_47	3	1
+47	val_47	0	1
 470	NULL	1	1
-470	val_470	3	1
+470	val_470	0	1
 472	NULL	1	1
-472	val_472	3	1
+472	val_472	0	1
 475	NULL	1	1
-475	val_475	3	1
+475	val_475	0	1
 477	NULL	1	1
-477	val_477	3	1
+477	val_477	0	1
 478	NULL	1	2
-478	val_478	3	2
+478	val_478	0	2
 479	NULL	1	1
-479	val_479	3	1
+479	val_479	0	1
 480	NULL	1	3
-480	val_480	3	3
+480	val_480	0	3
 481	NULL	1	1
-481	val_481	3	1
+481	val_481	0	1
 482	NULL	1	1
-482	val_482	3	1
+482	val_482	0	1
 483	NULL	1	1
-483	val_483	3	1
+483	val_483	0	1
 484	NULL	1	1
-484	val_484	3	1
+484	val_484	0	1
 485	NULL	1	1
-485	val_485	3	1
+485	val_485	0	1
 487	NULL	1	1
-487	val_487	3	1
+487	val_487	0	1
 489	NULL	1	4
-489	val_489	3	4
+489	val_489	0	4
 490	NULL	1	1
-490	val_490	3	1
+490	val_490	0	1
 491	NULL	1	1
-491	val_491	3	1
+491	val_491	0	1
 492	NULL	1	2
-492	val_492	3	2
+492	val_492	0	2
 493	NULL	1	1
-493	val_493	3	1
+493	val_493	0	1
 494	NULL	1	1
-494	val_494	3	1
+494	val_494	0	1
 495	NULL	1	1
-495	val_495	3	1
+495	val_495	0	1
 496	NULL	1	1
-496	val_496	3	1
+496	val_496	0	1
 497	NULL	1	1
-497	val_497	3	1
+497	val_497	0	1
 498	NULL	1	3
-498	val_498	3	3
+498	val_498	0	3
 5	NULL	1	3
-5	val_5	3	3
+5	val_5	0	3
 51	NULL	1	2
-51	val_51	3	2
+51	val_51	0	2
 53	NULL	1	1
-53	val_53	3	1
+53	val_53	0	1
 54	NULL	1	1
-54	val_54	3	1
+54	val_54	0	1
 57	NULL	1	1
-57	val_57	3	1
+57	val_57	0	1
 58	NULL	1	2
-58	val_58	3	2
+58	val_58	0	2
 64	NULL	1	1
-64	val_64	3	1
+64	val_64	0	1
 65	NULL	1	1
-65	val_65	3	1
+65	val_65	0	1
 66	NULL	1	1
-66	val_66	3	1
+66	val_66	0	1
 67	NULL	1	2
-67	val_67	3	2
+67	val_67	0	2
 69	NULL	1	1
-69	val_69	3	1
+69	val_69	0	1
 70	NULL	1	3
-70	val_70	3	3
+70	val_70	0	3
 72	NULL	1	2
-72	val_72	3	2
+72	val_72	0	2
 74	NULL	1	1
-74	val_74	3	1
+74	val_74	0	1
 76	NULL	1	2
-76	val_76	3	2
+76	val_76	0	2
 77	NULL	1	1
-77	val_77	3	1
+77	val_77	0	1
 78	NULL	1	1
-78	val_78	3	1
+78	val_78	0	1
 8	NULL	1	1
-8	val_8	3	1
+8	val_8	0	1
 80	NULL	1	1
-80	val_80	3	1
+80	val_80	0	1
 82	NULL	1	1
-82	val_82	3	1
+82	val_82	0	1
 83	NULL	1	2
-83	val_83	3	2
+83	val_83	0	2
 84	NULL	1	2
-84	val_84	3	2
+84	val_84	0	2
 85	NULL	1	1
-85	val_85	3	1
+85	val_85	0	1
 86	NULL	1	1
-86	val_86	3	1
+86	val_86	0	1
 87	NULL	1	1
-87	val_87	3	1
+87	val_87	0	1
 9	NULL	1	1
-9	val_9	3	1
+9	val_9	0	1
 90	NULL	1	3
-90	val_90	3	3
+90	val_90	0	3
 92	NULL	1	1
-92	val_92	3	1
+92	val_92	0	1
 95	NULL	1	2
-95	val_95	3	2
+95	val_95	0	2
 96	NULL	1	1
-96	val_96	3	1
+96	val_96	0	1
 97	NULL	1	2
-97	val_97	3	2
+97	val_97	0	2
 98	NULL	1	2
-98	val_98	3	2
+98	val_98	0	2
 PREHOOK: query: DESCRIBE FORMATTED test_table_out_2 PARTITION (part = '1')
 PREHOOK: type: DESCTABLE
 PREHOOK: Input: default@test_table_out_2

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/test/results/clientpositive/llap/cte_1.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/cte_1.q.out b/ql/src/test/results/clientpositive/llap/cte_1.q.out
index 1e6a438..dbc9c91 100644
--- a/ql/src/test/results/clientpositive/llap/cte_1.q.out
+++ b/ql/src/test/results/clientpositive/llap/cte_1.q.out
@@ -670,9 +670,9 @@ POSTHOOK: query: with q1 as (select * from alltypesorc)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@alltypesorc
 #### A masked pattern was here ####
-NULL	NULL	810.5504687159363
 NULL	NULL	2735.0
 NULL	NULL	2735.0
+NULL	NULL	810.5504687159363
 NULL	2x14G717LqcPA7Ic5	NULL
 NULL	3Ke6A1U847tV73	NULL
 NULL	45ja5suO	NULL
@@ -6827,8 +6827,8 @@ NULL	y605nF0K3mMoM75j	NULL
 762	BLoMwUJ51ns6pd	NULL
 762	a10E76jX35YwquKCTA	NULL
 762	q5y2Vy1	NULL
-6981	NULL	69.66666666666667
 6981	NULL	NULL
+6981	NULL	69.66666666666667
 6981	1FNNhmiFLGw425NA13g	-75.0
 6981	4KhrrQ0nJ7bMNTvhSCA	NULL
 6981	K630vaVf	NULL
@@ -12916,9 +12916,9 @@ POSTHOOK: query: with q1 as (select * from alltypesorc)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@alltypesorc
 #### A masked pattern was here ####
-NULL	NULL	810.5504687159363
 NULL	NULL	2735.0
 NULL	NULL	2735.0
+NULL	NULL	810.5504687159363
 NULL	2x14G717LqcPA7Ic5	NULL
 NULL	3Ke6A1U847tV73	NULL
 NULL	45ja5suO	NULL
@@ -19073,8 +19073,8 @@ NULL	y605nF0K3mMoM75j	NULL
 762	BLoMwUJ51ns6pd	NULL
 762	a10E76jX35YwquKCTA	NULL
 762	q5y2Vy1	NULL
-6981	NULL	69.66666666666667
 6981	NULL	NULL
+6981	NULL	69.66666666666667
 6981	1FNNhmiFLGw425NA13g	-75.0
 6981	4KhrrQ0nJ7bMNTvhSCA	NULL
 6981	K630vaVf	NULL

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/test/results/clientpositive/llap/groupby_grouping_id2.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/groupby_grouping_id2.q.out b/ql/src/test/results/clientpositive/llap/groupby_grouping_id2.q.out
index 9c85852..be5db9c 100644
--- a/ql/src/test/results/clientpositive/llap/groupby_grouping_id2.q.out
+++ b/ql/src/test/results/clientpositive/llap/groupby_grouping_id2.q.out
@@ -22,17 +22,17 @@ POSTHOOK: query: SELECT key, value, GROUPING__ID, count(*) from T1 GROUP BY key,
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-1	1	3	1
+1	1	0	1
+1	NULL	0	1
 1	NULL	1	2
-1	NULL	3	1
-2	2	3	1
+2	2	0	1
 2	NULL	1	1
-3	3	3	1
+3	3	0	1
+3	NULL	0	1
 3	NULL	1	2
-3	NULL	3	1
-4	5	3	1
+4	5	0	1
 4	NULL	1	1
-NULL	NULL	0	6
+NULL	NULL	3	6
 PREHOOK: query: SELECT key, value, GROUPING__ID, count(*) from T1 GROUP BY ROLLUP (key, value)
 PREHOOK: type: QUERY
 PREHOOK: Input: default@t1
@@ -41,17 +41,17 @@ POSTHOOK: query: SELECT key, value, GROUPING__ID, count(*) from T1 GROUP BY ROLL
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-1	1	3	1
+1	1	0	1
+1	NULL	0	1
 1	NULL	1	2
-1	NULL	3	1
-2	2	3	1
+2	2	0	1
 2	NULL	1	1
-3	3	3	1
+3	3	0	1
+3	NULL	0	1
 3	NULL	1	2
-3	NULL	3	1
-4	5	3	1
+4	5	0	1
 4	NULL	1	1
-NULL	NULL	0	6
+NULL	NULL	3	6
 PREHOOK: query: SELECT GROUPING__ID, count(*)
 FROM
 (
@@ -70,9 +70,9 @@ GROUP BY GROUPING__ID
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-0	1
+0	6
 1	4
-3	6
+3	1
 PREHOOK: query: SELECT GROUPING__ID, count(*)
 FROM
 (
@@ -91,9 +91,9 @@ GROUP BY GROUPING__ID
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-0	1
+0	6
 1	4
-3	6
+3	1
 PREHOOK: query: SELECT t1.GROUPING__ID, t2.GROUPING__ID FROM (SELECT GROUPING__ID FROM T1  GROUP BY key,value WITH ROLLUP) t1
 JOIN 
 (SELECT GROUPING__ID FROM T1 GROUP BY key, value WITH ROLLUP) t2
@@ -109,6 +109,41 @@ POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
 0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
 1	1
 1	1
 1	1
@@ -126,41 +161,6 @@ POSTHOOK: Input: default@t1
 1	1
 1	1
 3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
 PREHOOK: query: SELECT t1.GROUPING__ID, t2.GROUPING__ID FROM (SELECT GROUPING__ID FROM T1  GROUP BY ROLLUP(key,value)) t1
 JOIN
 (SELECT GROUPING__ID FROM T1 GROUP BY ROLLUP(key, value)) t2
@@ -176,6 +176,41 @@ POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
 0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
 1	1
 1	1
 1	1
@@ -193,41 +228,6 @@ POSTHOOK: Input: default@t1
 1	1
 1	1
 3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
 PREHOOK: query: SELECT key, value, GROUPING__ID, count(*) from T1 GROUP BY key, value WITH ROLLUP
 PREHOOK: type: QUERY
 PREHOOK: Input: default@t1
@@ -236,17 +236,17 @@ POSTHOOK: query: SELECT key, value, GROUPING__ID, count(*) from T1 GROUP BY key,
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-1	1	3	1
+1	1	0	1
+1	NULL	0	1
 1	NULL	1	2
-1	NULL	3	1
-2	2	3	1
+2	2	0	1
 2	NULL	1	1
-3	3	3	1
+3	3	0	1
+3	NULL	0	1
 3	NULL	1	2
-3	NULL	3	1
-4	5	3	1
+4	5	0	1
 4	NULL	1	1
-NULL	NULL	0	6
+NULL	NULL	3	6
 PREHOOK: query: SELECT GROUPING__ID, count(*)
 FROM
 (
@@ -265,9 +265,9 @@ GROUP BY GROUPING__ID
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-0	1
+0	6
 1	4
-3	6
+3	1
 PREHOOK: query: SELECT t1.GROUPING__ID, t2.GROUPING__ID FROM (SELECT GROUPING__ID FROM T1  GROUP BY key,value WITH ROLLUP) t1
 JOIN 
 (SELECT GROUPING__ID FROM T1 GROUP BY key, value WITH ROLLUP) t2
@@ -283,6 +283,41 @@ POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
 0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
 1	1
 1	1
 1	1
@@ -300,38 +335,3 @@ POSTHOOK: Input: default@t1
 1	1
 1	1
 3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/test/results/clientpositive/llap/multi_count_distinct_null.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/multi_count_distinct_null.q.out b/ql/src/test/results/clientpositive/llap/multi_count_distinct_null.q.out
index 0cbb9de..ad74867 100644
--- a/ql/src/test/results/clientpositive/llap/multi_count_distinct_null.q.out
+++ b/ql/src/test/results/clientpositive/llap/multi_count_distinct_null.q.out
@@ -66,7 +66,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2, _col3
                 Statistics: Num rows: 18 Data size: 99 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: CASE WHEN (((_col3 = 1) and _col0 is not null)) THEN (1) ELSE (null) END (type: int), CASE WHEN (((_col3 = 2) and _col1 is not null)) THEN (1) ELSE (null) END (type: int), CASE WHEN (((_col3 = 4) and _col2 is not null)) THEN (1) ELSE (null) END (type: int)
+                  expressions: CASE WHEN (((_col3 = 3) and _col0 is not null)) THEN (1) ELSE (null) END (type: int), CASE WHEN (((_col3 = 5) and _col1 is not null)) THEN (1) ELSE (null) END (type: int), CASE WHEN (((_col3 = 6) and _col2 is not null)) THEN (1) ELSE (null) END (type: int)
                   outputColumnNames: _col0, _col1, _col2
                   Statistics: Num rows: 18 Data size: 99 Basic stats: COMPLETE Column stats: NONE
                   Group By Operator
@@ -207,7 +207,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2, _col3
                 Statistics: Num rows: 30 Data size: 165 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: CASE WHEN (((_col3 = 1) and _col0 is not null)) THEN (1) ELSE (null) END (type: int), CASE WHEN (((_col3 = 2) and _col1 is not null)) THEN (1) ELSE (null) END (type: int), CASE WHEN (((_col3 = 4) and _col2 is not null)) THEN (1) ELSE (null) END (type: int), CASE WHEN ((_col3 = 6)) THEN (1) ELSE (null) END (type: int), CASE WHEN ((_col3 = 7)) THEN (1) ELSE (null) END (type: int)
+                  expressions: CASE WHEN (((_col3 = 3) and _col0 is not null)) THEN (1) ELSE (null) END (type: int), CASE WHEN (((_col3 = 5) and _col1 is not null)) THEN (1) ELSE (null) END (type: int), CASE WHEN (((_col3 = 6) and _col2 is not null)) THEN (1) ELSE (null) END (type: int), CASE WHEN ((_col3 = 4)) THEN (1) ELSE (null) END (type: int), CASE WHEN ((_col3 = 0)) THEN (1) ELSE (null) END (type: int)
                   outputColumnNames: _col0, _col1, _col2, _col3, _col4
                   Statistics: Num rows: 30 Data size: 165 Basic stats: COMPLETE Column stats: NONE
                   Group By Operator
@@ -257,9 +257,9 @@ POSTHOOK: Input: default@employee
 #### A masked pattern was here ####
 2	4	2	3	9	9	10
 PREHOOK: query: select 
-count(case when i=1 and department_id is not null then 1 else null end) as c0, 
-count(case when i=2 and gender is not null then 1 else null end) as c1, 
-count(case when i=4 and education_level is not null then 1 else null end) as c2 from 
+count(case when i=3 and department_id is not null then 1 else null end) as c0, 
+count(case when i=5 and gender is not null then 1 else null end) as c1, 
+count(case when i=6 and education_level is not null then 1 else null end) as c2 from 
 (select grouping__id as i, department_id, gender, 
 education_level from employee group by department_id, gender, education_level grouping sets 
 (department_id, gender, education_level))subq
@@ -267,9 +267,9 @@ PREHOOK: type: QUERY
 PREHOOK: Input: default@employee
 #### A masked pattern was here ####
 POSTHOOK: query: select 
-count(case when i=1 and department_id is not null then 1 else null end) as c0, 
-count(case when i=2 and gender is not null then 1 else null end) as c1, 
-count(case when i=4 and education_level is not null then 1 else null end) as c2 from 
+count(case when i=3 and department_id is not null then 1 else null end) as c0, 
+count(case when i=5 and gender is not null then 1 else null end) as c1, 
+count(case when i=6 and education_level is not null then 1 else null end) as c2 from 
 (select grouping__id as i, department_id, gender, 
 education_level from employee group by department_id, gender, education_level grouping sets 
 (department_id, gender, education_level))subq
@@ -289,24 +289,24 @@ group by department_id, gender, education_level grouping sets
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@employee
 #### A masked pattern was here ####
-1	NULL	NULL	NULL
 2	NULL	NULL	NULL
-4	NULL	NULL	NULL
+3	NULL	NULL	NULL
 5	NULL	NULL	NULL
-4	NULL	NULL	1
-5	NULL	NULL	1
-4	NULL	NULL	2
-4	NULL	NULL	3
-2	NULL	F	NULL
-2	NULL	M	NULL
-1	1	NULL	NULL
-5	1	NULL	1
-5	1	NULL	2
-5	1	NULL	3
-1	2	NULL	NULL
-5	2	NULL	1
-5	2	NULL	3
-1	3	NULL	NULL
-5	3	NULL	2
-1	4	NULL	NULL
-5	4	NULL	1
+6	NULL	NULL	NULL
+2	NULL	NULL	1
+6	NULL	NULL	1
+6	NULL	NULL	2
+6	NULL	NULL	3
+5	NULL	F	NULL
+5	NULL	M	NULL
+3	1	NULL	NULL
+2	1	NULL	1
+2	1	NULL	2
+2	1	NULL	3
+3	2	NULL	NULL
+2	2	NULL	1
+2	2	NULL	3
+3	3	NULL	NULL
+2	3	NULL	2
+3	4	NULL	NULL
+2	4	NULL	1

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/test/results/clientpositive/llap/vector_grouping_sets.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/vector_grouping_sets.q.out b/ql/src/test/results/clientpositive/llap/vector_grouping_sets.q.out
index 2176917..b15b61c 100644
--- a/ql/src/test/results/clientpositive/llap/vector_grouping_sets.q.out
+++ b/ql/src/test/results/clientpositive/llap/vector_grouping_sets.q.out
@@ -334,13 +334,13 @@ POSTHOOK: query: select s_store_id, GROUPING__ID
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@store
 #### A masked pattern was here ####
-NULL	0
-AAAAAAAABAAAAAAA	1
-AAAAAAAACAAAAAAA	1
-AAAAAAAAEAAAAAAA	1
-AAAAAAAAHAAAAAAA	1
-AAAAAAAAIAAAAAAA	1
-AAAAAAAAKAAAAAAA	1
+NULL	1
+AAAAAAAABAAAAAAA	0
+AAAAAAAACAAAAAAA	0
+AAAAAAAAEAAAAAAA	0
+AAAAAAAAHAAAAAAA	0
+AAAAAAAAIAAAAAAA	0
+AAAAAAAAKAAAAAAA	0
 PREHOOK: query: explain
 select s_store_id, GROUPING__ID
  from store

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/test/results/clientpositive/spark/groupby_cube1.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/groupby_cube1.q.out b/ql/src/test/results/clientpositive/spark/groupby_cube1.q.out
index 56b8c2f..cace096 100644
--- a/ql/src/test/results/clientpositive/spark/groupby_cube1.q.out
+++ b/ql/src/test/results/clientpositive/spark/groupby_cube1.q.out
@@ -242,16 +242,16 @@ POSTHOOK: query: SELECT key, val, GROUPING__ID, count(1) FROM T1 GROUP BY key, v
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-1	11	3	1
+1	11	0	1
 1	NULL	1	1
-2	12	3	1
+2	12	0	1
 2	NULL	1	1
-3	13	3	1
+3	13	0	1
 3	NULL	1	1
-7	17	3	1
+7	17	0	1
 7	NULL	1	1
-8	18	3	1
-8	28	3	1
+8	18	0	1
+8	28	0	1
 8	NULL	1	2
 NULL	11	2	1
 NULL	12	2	1
@@ -259,7 +259,7 @@ NULL	13	2	1
 NULL	17	2	1
 NULL	18	2	1
 NULL	28	2	1
-NULL	NULL	0	6
+NULL	NULL	3	6
 PREHOOK: query: EXPLAIN
 SELECT key, count(distinct val) FROM T1 GROUP BY key with cube
 PREHOOK: type: QUERY

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/test/results/clientpositive/spark/groupby_grouping_id2.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/groupby_grouping_id2.q.out b/ql/src/test/results/clientpositive/spark/groupby_grouping_id2.q.out
index 9c85852..be5db9c 100644
--- a/ql/src/test/results/clientpositive/spark/groupby_grouping_id2.q.out
+++ b/ql/src/test/results/clientpositive/spark/groupby_grouping_id2.q.out
@@ -22,17 +22,17 @@ POSTHOOK: query: SELECT key, value, GROUPING__ID, count(*) from T1 GROUP BY key,
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-1	1	3	1
+1	1	0	1
+1	NULL	0	1
 1	NULL	1	2
-1	NULL	3	1
-2	2	3	1
+2	2	0	1
 2	NULL	1	1
-3	3	3	1
+3	3	0	1
+3	NULL	0	1
 3	NULL	1	2
-3	NULL	3	1
-4	5	3	1
+4	5	0	1
 4	NULL	1	1
-NULL	NULL	0	6
+NULL	NULL	3	6
 PREHOOK: query: SELECT key, value, GROUPING__ID, count(*) from T1 GROUP BY ROLLUP (key, value)
 PREHOOK: type: QUERY
 PREHOOK: Input: default@t1
@@ -41,17 +41,17 @@ POSTHOOK: query: SELECT key, value, GROUPING__ID, count(*) from T1 GROUP BY ROLL
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-1	1	3	1
+1	1	0	1
+1	NULL	0	1
 1	NULL	1	2
-1	NULL	3	1
-2	2	3	1
+2	2	0	1
 2	NULL	1	1
-3	3	3	1
+3	3	0	1
+3	NULL	0	1
 3	NULL	1	2
-3	NULL	3	1
-4	5	3	1
+4	5	0	1
 4	NULL	1	1
-NULL	NULL	0	6
+NULL	NULL	3	6
 PREHOOK: query: SELECT GROUPING__ID, count(*)
 FROM
 (
@@ -70,9 +70,9 @@ GROUP BY GROUPING__ID
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-0	1
+0	6
 1	4
-3	6
+3	1
 PREHOOK: query: SELECT GROUPING__ID, count(*)
 FROM
 (
@@ -91,9 +91,9 @@ GROUP BY GROUPING__ID
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-0	1
+0	6
 1	4
-3	6
+3	1
 PREHOOK: query: SELECT t1.GROUPING__ID, t2.GROUPING__ID FROM (SELECT GROUPING__ID FROM T1  GROUP BY key,value WITH ROLLUP) t1
 JOIN 
 (SELECT GROUPING__ID FROM T1 GROUP BY key, value WITH ROLLUP) t2
@@ -109,6 +109,41 @@ POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
 0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
 1	1
 1	1
 1	1
@@ -126,41 +161,6 @@ POSTHOOK: Input: default@t1
 1	1
 1	1
 3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
 PREHOOK: query: SELECT t1.GROUPING__ID, t2.GROUPING__ID FROM (SELECT GROUPING__ID FROM T1  GROUP BY ROLLUP(key,value)) t1
 JOIN
 (SELECT GROUPING__ID FROM T1 GROUP BY ROLLUP(key, value)) t2
@@ -176,6 +176,41 @@ POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
 0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
 1	1
 1	1
 1	1
@@ -193,41 +228,6 @@ POSTHOOK: Input: default@t1
 1	1
 1	1
 3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
 PREHOOK: query: SELECT key, value, GROUPING__ID, count(*) from T1 GROUP BY key, value WITH ROLLUP
 PREHOOK: type: QUERY
 PREHOOK: Input: default@t1
@@ -236,17 +236,17 @@ POSTHOOK: query: SELECT key, value, GROUPING__ID, count(*) from T1 GROUP BY key,
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-1	1	3	1
+1	1	0	1
+1	NULL	0	1
 1	NULL	1	2
-1	NULL	3	1
-2	2	3	1
+2	2	0	1
 2	NULL	1	1
-3	3	3	1
+3	3	0	1
+3	NULL	0	1
 3	NULL	1	2
-3	NULL	3	1
-4	5	3	1
+4	5	0	1
 4	NULL	1	1
-NULL	NULL	0	6
+NULL	NULL	3	6
 PREHOOK: query: SELECT GROUPING__ID, count(*)
 FROM
 (
@@ -265,9 +265,9 @@ GROUP BY GROUPING__ID
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
-0	1
+0	6
 1	4
-3	6
+3	1
 PREHOOK: query: SELECT t1.GROUPING__ID, t2.GROUPING__ID FROM (SELECT GROUPING__ID FROM T1  GROUP BY key,value WITH ROLLUP) t1
 JOIN 
 (SELECT GROUPING__ID FROM T1 GROUP BY key, value WITH ROLLUP) t2
@@ -283,6 +283,41 @@ POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1
 #### A masked pattern was here ####
 0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
+0	0
 1	1
 1	1
 1	1
@@ -300,38 +335,3 @@ POSTHOOK: Input: default@t1
 1	1
 1	1
 3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3
-3	3

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/test/results/clientpositive/tez/multi_count_distinct.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/tez/multi_count_distinct.q.out b/ql/src/test/results/clientpositive/tez/multi_count_distinct.q.out
index ef3fcab..82c09fa 100644
--- a/ql/src/test/results/clientpositive/tez/multi_count_distinct.q.out
+++ b/ql/src/test/results/clientpositive/tez/multi_count_distinct.q.out
@@ -146,15 +146,15 @@ POSTHOOK: type: QUERY
 POSTHOOK: Input: default@employee
 #### A masked pattern was here ####
 2	4	2	3	7	7	7
-PREHOOK: query: select count(case i when 1 then 1 else null end) as c0, count(case i when 2 then 1 else null end) as c1, 
-count(case i when 4 then 1 else null end) as c2 from (select grouping__id as i, department_id, gender, 
+PREHOOK: query: select count(case i when 3 then 1 else null end) as c0, count(case i when 5 then 1 else null end) as c1, 
+count(case i when 6 then 1 else null end) as c2 from (select grouping__id as i, department_id, gender, 
 education_level from employee group by department_id, gender, education_level grouping sets 
 (department_id, gender, education_level))subq
 PREHOOK: type: QUERY
 PREHOOK: Input: default@employee
 #### A masked pattern was here ####
-POSTHOOK: query: select count(case i when 1 then 1 else null end) as c0, count(case i when 2 then 1 else null end) as c1, 
-count(case i when 4 then 1 else null end) as c2 from (select grouping__id as i, department_id, gender, 
+POSTHOOK: query: select count(case i when 3 then 1 else null end) as c0, count(case i when 5 then 1 else null end) as c1, 
+count(case i when 6 then 1 else null end) as c2 from (select grouping__id as i, department_id, gender, 
 education_level from employee group by department_id, gender, education_level grouping sets 
 (department_id, gender, education_level))subq
 POSTHOOK: type: QUERY
@@ -173,19 +173,19 @@ group by department_id, gender, education_level grouping sets
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@employee
 #### A masked pattern was here ####
-4	NULL	NULL	1
-4	NULL	NULL	2
-4	NULL	NULL	3
-2	NULL	F	NULL
-2	NULL	M	NULL
-1	1	NULL	NULL
-5	1	NULL	1
-5	1	NULL	2
-5	1	NULL	3
-1	2	NULL	NULL
-5	2	NULL	1
-5	2	NULL	3
-1	3	NULL	NULL
-5	3	NULL	2
-1	4	NULL	NULL
-5	4	NULL	1
+6	NULL	NULL	1
+6	NULL	NULL	2
+6	NULL	NULL	3
+5	NULL	F	NULL
+5	NULL	M	NULL
+3	1	NULL	NULL
+2	1	NULL	1
+2	1	NULL	2
+2	1	NULL	3
+3	2	NULL	NULL
+2	2	NULL	1
+2	2	NULL	3
+3	3	NULL	NULL
+2	3	NULL	2
+3	4	NULL	NULL
+2	4	NULL	1

http://git-wip-us.apache.org/repos/asf/hive/blob/19004fe8/ql/src/test/results/clientpositive/vector_grouping_sets.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/vector_grouping_sets.q.out b/ql/src/test/results/clientpositive/vector_grouping_sets.q.out
index df4631e..bd95aa4 100644
--- a/ql/src/test/results/clientpositive/vector_grouping_sets.q.out
+++ b/ql/src/test/results/clientpositive/vector_grouping_sets.q.out
@@ -305,13 +305,13 @@ POSTHOOK: query: select s_store_id, GROUPING__ID
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@store
 #### A masked pattern was here ####
-NULL	0
-AAAAAAAABAAAAAAA	1
-AAAAAAAACAAAAAAA	1
-AAAAAAAAEAAAAAAA	1
-AAAAAAAAHAAAAAAA	1
-AAAAAAAAIAAAAAAA	1
-AAAAAAAAKAAAAAAA	1
+NULL	1
+AAAAAAAABAAAAAAA	0
+AAAAAAAACAAAAAAA	0
+AAAAAAAAEAAAAAAA	0
+AAAAAAAAHAAAAAAA	0
+AAAAAAAAIAAAAAAA	0
+AAAAAAAAKAAAAAAA	0
 PREHOOK: query: explain
 select s_store_id, GROUPING__ID
  from store