HIVE-14329 : fix flapping qtests - because of output string ordering (Zoltan Haindrich via Ashutosh Chauhan)

Signed-off-by: Ashutosh Chauhan <hashutosh@apache.org>
diff --git a/common/src/java/org/apache/hadoop/hive/common/StatsSetupConst.java b/common/src/java/org/apache/hadoop/hive/common/StatsSetupConst.java
index 01e6010..559fffc 100644
--- a/common/src/java/org/apache/hadoop/hive/common/StatsSetupConst.java
+++ b/common/src/java/org/apache/hadoop/hive/common/StatsSetupConst.java
@@ -25,6 +25,7 @@
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.TreeMap;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -142,59 +143,34 @@
     COLUMN_STATS_ACCURATE, NUM_FILES, TOTAL_SIZE,ROW_COUNT, RAW_DATA_SIZE, NUM_PARTITIONS};
 
   public static boolean areBasicStatsUptoDate(Map<String, String> params) {
-    String statsAcc = params.get(COLUMN_STATS_ACCURATE);
-    if (statsAcc == null) {
-      return false;
+    JSONObject stats = parseStatsAcc(params.get(COLUMN_STATS_ACCURATE));
+    if (stats != null && stats.has(BASIC_STATS)) {
+      return true;
     } else {
-      JSONObject jsonObj;
-      try {
-        jsonObj = new JSONObject(statsAcc);
-        if (jsonObj != null && jsonObj.has(BASIC_STATS)) {
-          return true;
-        } else {
-          return false;
-        }
-      } catch (JSONException e) {
-        // For backward compatibility, if previous value can not be parsed to a
-        // json object, it will come here.
-        LOG.debug("In StatsSetupConst, JsonParser can not parse " + BASIC_STATS + ".");
-        // We try to parse it as TRUE or FALSE
-        if (statsAcc.equals(TRUE)) {
-          setBasicStatsState(params, TRUE);
-          return true;
-        } else {
-          setBasicStatsState(params, FALSE);
-          return false;
-        }
-      }
+      return false;
     }
   }
 
   public static boolean areColumnStatsUptoDate(Map<String, String> params, String colName) {
-    String statsAcc = params.get(COLUMN_STATS_ACCURATE);
-    if (statsAcc == null) {
-      return false;
-    } else {
-      JSONObject jsonObj;
-      try {
-        jsonObj = new JSONObject(statsAcc);
-        if (jsonObj == null || !jsonObj.has(COLUMN_STATS)) {
-          return false;
-        } else {
-          JSONObject columns = jsonObj.getJSONObject(COLUMN_STATS);
-          if (columns != null && columns.has(colName)) {
-            return true;
-          } else {
-            return false;
-          }
-        }
-      } catch (JSONException e) {
-        // For backward compatibility, if previous value can not be parsed to a
-        // json object, it will come here.
-        LOG.debug("In StatsSetupConst, JsonParser can not parse COLUMN_STATS.");
+    JSONObject stats = parseStatsAcc(params.get(COLUMN_STATS_ACCURATE));
+    try {
+      if (!stats.has(COLUMN_STATS)) {
         return false;
+      } else {
+        JSONObject columns = stats.getJSONObject(COLUMN_STATS);
+        if (columns != null && columns.has(colName)) {
+          return true;
+        } else {
+          return false;
+        }
       }
+    } catch (JSONException e) {
+      // For backward compatibility, if previous value can not be parsed to a
+      // json object, it will come here.
+      LOG.debug("In StatsSetupConst, JsonParser can not parse COLUMN_STATS.");
+      return false;
     }
+
   }
 
   // It will only throw JSONException when stats.put(BASIC_STATS, TRUE)
@@ -206,94 +182,37 @@
         params.remove(COLUMN_STATS_ACCURATE);
       }
     } else {
-      String statsAcc = params.get(COLUMN_STATS_ACCURATE);
-      if (statsAcc == null) {
-        JSONObject stats = new JSONObject(new LinkedHashMap());
-        // duplicate key is not possible
-        try {
-          stats.put(BASIC_STATS, TRUE);
-        } catch (JSONException e) {
-          // impossible to throw any json exceptions.
-          LOG.trace(e.getMessage());
-        }
-        params.put(COLUMN_STATS_ACCURATE, stats.toString());
-      } else {
-        // statsAcc may not be jason format, which will throw exception
-        JSONObject stats;
-        try {
-          stats = new JSONObject(statsAcc);
-        } catch (JSONException e) {
-          // old format of statsAcc, e.g., TRUE or FALSE
-          LOG.debug("In StatsSetupConst, JsonParser can not parse statsAcc.");
-          stats = new JSONObject(new LinkedHashMap());
-        }
-        if (!stats.has(BASIC_STATS)) {
-          // duplicate key is not possible
-          try {
-            stats.put(BASIC_STATS, TRUE);
-          } catch (JSONException e) {
-            // impossible to throw any json exceptions.
-            LOG.trace(e.getMessage());
-          }
-        }
-        params.put(COLUMN_STATS_ACCURATE, stats.toString());
+      JSONObject stats = parseStatsAcc(params.get(COLUMN_STATS_ACCURATE));
+      
+      try {
+        stats.put(BASIC_STATS, TRUE);
+      } catch (JSONException e) {
+        // impossible to throw any json exceptions.
+        LOG.trace(e.getMessage());
       }
+      params.put(COLUMN_STATS_ACCURATE, stats.toString());
     }
   }
 
   public static void setColumnStatsState(Map<String, String> params, List<String> colNames) {
     try {
-      String statsAcc = params.get(COLUMN_STATS_ACCURATE);
-      JSONObject colStats = new JSONObject(new LinkedHashMap());
-      // duplicate key is not possible
-      for (String colName : colNames) {
-        colStats.put(colName.toLowerCase(), TRUE);
-      }
-      if (statsAcc == null) {
-        JSONObject stats = new JSONObject(new LinkedHashMap());
-        // duplicate key is not possible
-        stats.put(COLUMN_STATS, colStats);
-        params.put(COLUMN_STATS_ACCURATE, stats.toString());
+      JSONObject stats = parseStatsAcc(params.get(COLUMN_STATS_ACCURATE));
+
+      JSONObject colStats;
+      if (stats.has(COLUMN_STATS)) {
+        colStats = stats.getJSONObject(COLUMN_STATS);
       } else {
-        // statsAcc may not be jason format, which will throw exception
-        JSONObject stats;
-        try {
-          stats = new JSONObject(statsAcc);
-        } catch (JSONException e) {
-          // old format of statsAcc, e.g., TRUE or FALSE
-          LOG.debug("In StatsSetupConst, JsonParser can not parse statsAcc.");
-          stats = new JSONObject(new LinkedHashMap());
-          try {
-            if (statsAcc.equals(TRUE)) {
-              stats.put(BASIC_STATS, TRUE);
-            } else {
-              stats.put(BASIC_STATS, FALSE);
-            }
-          } catch (JSONException e1) {
-            // impossible to throw any json exceptions.
-            LOG.trace(e1.getMessage());
-          }
-        }
-        if (!stats.has(COLUMN_STATS)) {
-          // duplicate key is not possible
-          stats.put(COLUMN_STATS, colStats);
-        } else {
-          // getJSONObject(COLUMN_STATS) should be found.
-          JSONObject allColumnStats = stats.getJSONObject(COLUMN_STATS);
-          for (String colName : colNames) {
-            if (!allColumnStats.has(colName)) {
-              // duplicate key is not possible
-              allColumnStats.put(colName, TRUE);
-            }
-          }
-          stats.remove(COLUMN_STATS);
-          // duplicate key is not possible
-          stats.put(COLUMN_STATS, allColumnStats);
-        }
-        params.put(COLUMN_STATS_ACCURATE, stats.toString());
+        colStats = new JSONObject(new TreeMap<String,String>());
       }
+      for (String colName : colNames) {
+        if (!colStats.has(colName)) {
+          colStats.put(colName, TRUE);
+        }
+      }
+      stats.put(COLUMN_STATS, colStats);
+      params.put(COLUMN_STATS_ACCURATE, stats.toString());
     } catch (JSONException e) {
-      //impossible to throw any json exceptions.
+      // impossible to throw any json exceptions.
       LOG.trace(e.getMessage());
     }
   }
@@ -302,24 +221,8 @@
     String statsAcc;
     if (params != null && (statsAcc = params.get(COLUMN_STATS_ACCURATE)) != null) {
       // statsAcc may not be jason format, which will throw exception
-      JSONObject stats;
-      try {
-        stats = new JSONObject(statsAcc);
-      } catch (JSONException e) {
-        // old format of statsAcc, e.g., TRUE or FALSE
-        LOG.debug("In StatsSetupConst, JsonParser can not parse statsAcc.");
-        stats = new JSONObject(new LinkedHashMap());
-        try {
-          if (statsAcc.equals(TRUE)) {
-            stats.put(BASIC_STATS, TRUE);
-          } else {
-            stats.put(BASIC_STATS, FALSE);
-          }
-        } catch (JSONException e1) {
-          // impossible to throw any json exceptions.
-          LOG.trace(e1.getMessage());
-        }
-      }
+      JSONObject stats = parseStatsAcc(statsAcc);
+      
       if (stats.has(COLUMN_STATS)) {
         stats.remove(COLUMN_STATS);
       }
@@ -335,4 +238,35 @@
     }
     setBasicStatsState(params, setting);
   }
+  
+  private static JSONObject parseStatsAcc(String statsAcc) {
+    if (statsAcc == null) {
+      return new JSONObject(new LinkedHashMap<String,Object>());
+    } else {
+      try {
+        return new JSONObject(statsAcc);
+      } catch (JSONException e) {
+        return statsAccUpgrade(statsAcc);
+      }
+    }
+  }
+
+  private static JSONObject statsAccUpgrade(String statsAcc) {
+    JSONObject stats;
+    // old format of statsAcc, e.g., TRUE or FALSE
+    LOG.debug("In StatsSetupConst, JsonParser can not parse statsAcc.");
+    stats = new JSONObject(new LinkedHashMap<String,Object>());
+    try {
+      if (statsAcc.equals(TRUE)) {
+        stats.put(BASIC_STATS, TRUE);
+      } else {
+        stats.put(BASIC_STATS, FALSE);
+      }
+    } catch (JSONException e1) {
+      // impossible to throw any json exceptions.
+      LOG.trace(e1.getMessage());
+    }
+    return stats;
+  }
+
 }
diff --git a/common/src/test/org/apache/hadoop/hive/common/TestStatsSetupConst.java b/common/src/test/org/apache/hadoop/hive/common/TestStatsSetupConst.java
new file mode 100644
index 0000000..7a7ad42
--- /dev/null
+++ b/common/src/test/org/apache/hadoop/hive/common/TestStatsSetupConst.java
@@ -0,0 +1,56 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.common;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Test;
+
+import com.google.common.collect.Lists;
+public class TestStatsSetupConst {
+
+  @Test
+  public void testSetBasicStatsState_missesUpgrade() {
+    Map<String, String> params=new HashMap<>();
+    params.put(StatsSetupConst.COLUMN_STATS_ACCURATE, "FALSE");
+    StatsSetupConst.setBasicStatsState(params, String.valueOf(true));
+    assertEquals("{\"BASIC_STATS\":\"true\"}",params.get(StatsSetupConst.COLUMN_STATS_ACCURATE));
+  }
+
+  @Test
+  public void setColumnStatsState_camelcase() {
+    Map<String, String> params=new HashMap<>();
+    StatsSetupConst.setColumnStatsState(params, Lists.newArrayList("Foo"));
+    String val1 = params.get(StatsSetupConst.COLUMN_STATS_ACCURATE);
+    StatsSetupConst.setColumnStatsState(params, Lists.newArrayList("Foo"));
+    String val2 = params.get(StatsSetupConst.COLUMN_STATS_ACCURATE);
+    assertEquals(val1, val2);
+  }
+
+  @Test
+  public void testSetBasicStatsState_none() {
+    Map<String, String> params=new HashMap<>();
+    StatsSetupConst.setBasicStatsState(params, String.valueOf(true));
+    assertEquals("{\"BASIC_STATS\":\"true\"}",params.get(StatsSetupConst.COLUMN_STATS_ACCURATE));
+  }
+
+}
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/MetaDataFormatUtils.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/MetaDataFormatUtils.java
index 03803bb..ba4f6a7 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/MetaDataFormatUtils.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/MetaDataFormatUtils.java
@@ -19,7 +19,6 @@
 package org.apache.hadoop.hive.ql.metadata.formatting;
 
 import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
@@ -53,12 +52,13 @@
 import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
+import java.util.TreeMap;
 
 
 /**
@@ -393,22 +393,23 @@
     }
 
     if (null != storageDesc.getSkewedInfo()) {
-      List<String> skewedColNames = storageDesc.getSkewedInfo().getSkewedColNames();
+      List<String> skewedColNames = sortedList(storageDesc.getSkewedInfo().getSkewedColNames());
       if ((skewedColNames != null) && (skewedColNames.size() > 0)) {
         formatOutput("Skewed Columns:", skewedColNames.toString(), tableInfo);
       }
 
-      List<List<String>> skewedColValues = storageDesc.getSkewedInfo().getSkewedColValues();
+      List<List<String>> skewedColValues = sortedList(
+          storageDesc.getSkewedInfo().getSkewedColValues(), new VectorComparator<String>());
       if ((skewedColValues != null) && (skewedColValues.size() > 0)) {
         formatOutput("Skewed Values:", skewedColValues.toString(), tableInfo);
       }
 
-      Map<List<String>, String> skewedColMap = storageDesc.getSkewedInfo()
-          .getSkewedColValueLocationMaps();
+      Map<List<String>, String> skewedColMap = new TreeMap<>(new VectorComparator<String>());
+      skewedColMap.putAll(storageDesc.getSkewedInfo().getSkewedColValueLocationMaps());
       if ((skewedColMap!=null) && (skewedColMap.size() > 0)) {
         formatOutput("Skewed Value to Path:", skewedColMap.toString(),
             tableInfo);
-        Map<List<String>, String> truncatedSkewedColMap = new HashMap<List<String>, String>();
+        Map<List<String>, String> truncatedSkewedColMap = new TreeMap<List<String>, String>(new VectorComparator<String>());
         // walk through existing map to truncate path so that test won't mask it
         // then we can verify location is right
         Set<Entry<List<String>, String>> entries = skewedColMap.entrySet();
@@ -487,7 +488,60 @@
   static String getComment(FieldSchema col) {
     return col.getComment() != null ? col.getComment() : "";
   }
+  
+  /**
+   * Compares to lists of object T as vectors
+   * 
+   * @param <T> the base object type. Must be {@link Comparable}
+   */
+  private static class VectorComparator<T extends Comparable<T>>  implements Comparator<List<T>>{
 
+    @Override
+    public int compare(List<T> listA, List<T> listB) {
+      for (int i = 0; i < listA.size() && i < listB.size(); i++) {
+        T valA = listA.get(i);
+        T valB = listB.get(i);
+        if (valA != null) {
+          int ret = valA.compareTo(valB);
+          if (ret != 0) {
+            return ret;
+          }
+        } else {
+          if (valB != null) {
+            return -1;
+          }
+        }
+      }
+      return Integer.compare(listA.size(), listB.size());
+    }
+  }
+  
+  /**
+   * Returns a sorted version of the given list
+   */
+  static <T extends Comparable<T>> List<T> sortedList(List<T> list){
+    if (list == null || list.size() <= 1) {
+      return list;
+    }
+    ArrayList<T> ret = new ArrayList<>();
+    ret.addAll(list);
+    Collections.sort(ret);
+    return ret;
+  }
+
+  /**
+   * Returns a sorted version of the given list, using the provided comparator
+   */
+  static <T> List<T> sortedList(List<T> list, Comparator<T> comp) {
+    if (list == null || list.size() <= 1) {
+      return list;
+    }
+    ArrayList<T> ret = new ArrayList<>();
+    ret.addAll(list);
+    Collections.sort(ret,comp);
+    return ret;
+  }
+  
   private static String formatDate(long timeInSeconds) {
     if (timeInSeconds != 0) {
       Date date = new Date(timeInSeconds * 1000);
diff --git a/ql/src/test/results/clientpositive/columnStatsUpdateForStatsOptimizer_1.q.out b/ql/src/test/results/clientpositive/columnStatsUpdateForStatsOptimizer_1.q.out
index 00f3776..182fdf5 100644
--- a/ql/src/test/results/clientpositive/columnStatsUpdateForStatsOptimizer_1.q.out
+++ b/ql/src/test/results/clientpositive/columnStatsUpdateForStatsOptimizer_1.q.out
@@ -204,7 +204,7 @@
 #### A masked pattern was here ####
 Table Type:         	MANAGED_TABLE       	 
 Table Parameters:	 	 
-	COLUMN_STATS_ACCURATE	{\"BASIC_STATS\":\"true\",\"COLUMN_STATS\":{\"year\":\"true\",\"month\":\"true\"}}
+	COLUMN_STATS_ACCURATE	{\"BASIC_STATS\":\"true\",\"COLUMN_STATS\":{\"month\":\"true\",\"year\":\"true\"}}
 	numFiles            	1                   
 	numRows             	3                   
 	rawDataSize         	21                  
diff --git a/ql/src/test/results/clientpositive/create_alter_list_bucketing_table1.q.out b/ql/src/test/results/clientpositive/create_alter_list_bucketing_table1.q.out
index df4a75b..216d3be 100644
--- a/ql/src/test/results/clientpositive/create_alter_list_bucketing_table1.q.out
+++ b/ql/src/test/results/clientpositive/create_alter_list_bucketing_table1.q.out
@@ -52,7 +52,7 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[col1, col2]        	 
-Skewed Values:      	[[s1, 1], [s3, 3], [s13, 13], [s78, 78]]	 
+Skewed Values:      	[[s1, 1], [s13, 13], [s3, 3], [s78, 78]]	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: -- 2. turn off stored as directories but table is still a skewed table
@@ -100,7 +100,7 @@
 Bucket Columns:     	[]                  	 
 Sort Columns:       	[]                  	 
 Skewed Columns:     	[col1, col2]        	 
-Skewed Values:      	[[s1, 1], [s3, 3], [s13, 13], [s78, 78]]	 
+Skewed Values:      	[[s1, 1], [s13, 13], [s3, 3], [s78, 78]]	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: -- 3. turn off skewed
diff --git a/ql/src/test/results/clientpositive/create_skewed_table1.q.out b/ql/src/test/results/clientpositive/create_skewed_table1.q.out
index fe5ea0f..e4080b0 100644
--- a/ql/src/test/results/clientpositive/create_skewed_table1.q.out
+++ b/ql/src/test/results/clientpositive/create_skewed_table1.q.out
@@ -131,7 +131,7 @@
 Bucket Columns:     	[]                  	 
 Sort Columns:       	[]                  	 
 Skewed Columns:     	[col1, col2]        	 
-Skewed Values:      	[[s1, 1], [s3, 3], [s13, 13], [s78, 78]]	 
+Skewed Values:      	[[s1, 1], [s13, 13], [s3, 3], [s78, 78]]	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: drop table list_bucket_single
diff --git a/ql/src/test/results/clientpositive/extrapolate_part_stats_full.q.out b/ql/src/test/results/clientpositive/extrapolate_part_stats_full.q.out
index 8f40040..ef20f4e 100644
--- a/ql/src/test/results/clientpositive/extrapolate_part_stats_full.q.out
+++ b/ql/src/test/results/clientpositive/extrapolate_part_stats_full.q.out
@@ -104,7 +104,7 @@
             partition values:
               year 2000
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid,zip
               columns.comments 
@@ -147,7 +147,7 @@
             partition values:
               year 2001
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid,zip
               columns.comments 
@@ -217,7 +217,7 @@
             partition values:
               year 2000
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid,zip
               columns.comments 
@@ -260,7 +260,7 @@
             partition values:
               year 2001
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid,zip
               columns.comments 
@@ -400,7 +400,7 @@
               year 2000
               zip 94086
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid
               columns.comments 
@@ -444,7 +444,7 @@
               year 2001
               zip 94086
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid
               columns.comments 
@@ -488,7 +488,7 @@
               year 2000
               zip 94087
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid
               columns.comments 
@@ -532,7 +532,7 @@
               year 2001
               zip 94087
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid
               columns.comments 
@@ -599,7 +599,7 @@
               year 2000
               zip 94086
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid
               columns.comments 
@@ -643,7 +643,7 @@
               year 2001
               zip 94086
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid
               columns.comments 
@@ -687,7 +687,7 @@
               year 2000
               zip 94087
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid
               columns.comments 
@@ -731,7 +731,7 @@
               year 2001
               zip 94087
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid
               columns.comments 
diff --git a/ql/src/test/results/clientpositive/extrapolate_part_stats_partial.q.out b/ql/src/test/results/clientpositive/extrapolate_part_stats_partial.q.out
index 0acfe90..995fdf1 100644
--- a/ql/src/test/results/clientpositive/extrapolate_part_stats_partial.q.out
+++ b/ql/src/test/results/clientpositive/extrapolate_part_stats_partial.q.out
@@ -164,7 +164,7 @@
             partition values:
               year 2001
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid,zip
               columns.comments 
@@ -207,7 +207,7 @@
             partition values:
               year 2002
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid,zip
               columns.comments 
@@ -363,7 +363,7 @@
             partition values:
               year 2001
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid,zip
               columns.comments 
@@ -406,7 +406,7 @@
             partition values:
               year 2002
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid,zip
               columns.comments 
@@ -578,7 +578,7 @@
             partition values:
               year 2001
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid,zip
               columns.comments 
@@ -621,7 +621,7 @@
             partition values:
               year 2002
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid,zip
               columns.comments 
@@ -773,7 +773,7 @@
             partition values:
               year 2001
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid,zip
               columns.comments 
@@ -816,7 +816,7 @@
             partition values:
               year 2002
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid,zip
               columns.comments 
@@ -1176,7 +1176,7 @@
               year 2001
               zip 94086
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid
               columns.comments 
@@ -1396,7 +1396,7 @@
               year 2002
               zip 94087
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid
               columns.comments 
@@ -1683,7 +1683,7 @@
               year 2001
               zip 94086
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid
               columns.comments 
@@ -1903,7 +1903,7 @@
               year 2002
               zip 94087
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid
               columns.comments 
diff --git a/ql/src/test/results/clientpositive/extrapolate_part_stats_partial_ndv.q.out b/ql/src/test/results/clientpositive/extrapolate_part_stats_partial_ndv.q.out
index 70e4db3..96ff748 100644
--- a/ql/src/test/results/clientpositive/extrapolate_part_stats_partial_ndv.q.out
+++ b/ql/src/test/results/clientpositive/extrapolate_part_stats_partial_ndv.q.out
@@ -232,7 +232,7 @@
             partition values:
               year 2001
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true","cnt":"true","zip":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"cnt":"true","locid":"true","state":"true","zip":"true"}}
               bucket_count -1
               columns state,locid,cnt,zip
               columns.comments 
@@ -275,7 +275,7 @@
             partition values:
               year 2002
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true","cnt":"true","zip":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"cnt":"true","locid":"true","state":"true","zip":"true"}}
               bucket_count -1
               columns state,locid,cnt,zip
               columns.comments 
@@ -476,7 +476,7 @@
             partition values:
               year 2000
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true","cnt":"true","zip":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"cnt":"true","locid":"true","state":"true","zip":"true"}}
               bucket_count -1
               columns state,locid,cnt,zip
               columns.comments 
@@ -519,7 +519,7 @@
             partition values:
               year 2001
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true","cnt":"true","zip":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"cnt":"true","locid":"true","state":"true","zip":"true"}}
               bucket_count -1
               columns state,locid,cnt,zip
               columns.comments 
@@ -562,7 +562,7 @@
             partition values:
               year 2002
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true","cnt":"true","zip":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"cnt":"true","locid":"true","state":"true","zip":"true"}}
               bucket_count -1
               columns state,locid,cnt,zip
               columns.comments 
@@ -605,7 +605,7 @@
             partition values:
               year 2003
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true","cnt":"true","zip":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"cnt":"true","locid":"true","state":"true","zip":"true"}}
               bucket_count -1
               columns state,locid,cnt,zip
               columns.comments 
@@ -993,7 +993,7 @@
               year 2001
               zip 94086
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true","cnt":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"cnt":"true","locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid,cnt
               columns.comments 
@@ -1213,7 +1213,7 @@
               year 2002
               zip 94087
             properties:
-              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"state":"true","locid":"true","cnt":"true"}}
+              COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"cnt":"true","locid":"true","state":"true"}}
               bucket_count -1
               columns state,locid,cnt
               columns.comments 
diff --git a/ql/src/test/results/clientpositive/list_bucket_dml_10.q.out b/ql/src/test/results/clientpositive/list_bucket_dml_10.q.out
index d4681b7..02dd93f 100644
--- a/ql/src/test/results/clientpositive/list_bucket_dml_10.q.out
+++ b/ql/src/test/results/clientpositive/list_bucket_dml_10.q.out
@@ -352,8 +352,8 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key]               	 
-Skewed Values:      	[[484], [51], [103]]	 
+Skewed Values:      	[[103], [484], [51]]	 
 #### A masked pattern was here ####
-Skewed Value to Truncated Path:	{[103]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=103, [51]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=51, [484]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=484}	 
+Skewed Value to Truncated Path:	{[103]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=103, [484]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=484, [51]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=51}	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
diff --git a/ql/src/test/results/clientpositive/list_bucket_dml_11.q.out b/ql/src/test/results/clientpositive/list_bucket_dml_11.q.out
index ecf54a8..7d07b16 100644
--- a/ql/src/test/results/clientpositive/list_bucket_dml_11.q.out
+++ b/ql/src/test/results/clientpositive/list_bucket_dml_11.q.out
@@ -226,9 +226,9 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[value]             	 
-Skewed Values:      	[[val_466], [val_287], [val_82]]	 
+Skewed Values:      	[[val_287], [val_466], [val_82]]	 
 #### A masked pattern was here ####
-Skewed Value to Truncated Path:	{[val_287]=/list_bucketing_static_part/ds=2008-04-08/hr=11/value=val_287, [val_82]=/list_bucketing_static_part/ds=2008-04-08/hr=11/value=val_82, [val_466]=/list_bucketing_static_part/ds=2008-04-08/hr=11/value=val_466}	 
+Skewed Value to Truncated Path:	{[val_287]=/list_bucketing_static_part/ds=2008-04-08/hr=11/value=val_287, [val_466]=/list_bucketing_static_part/ds=2008-04-08/hr=11/value=val_466, [val_82]=/list_bucketing_static_part/ds=2008-04-08/hr=11/value=val_82}	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: explain extended
diff --git a/ql/src/test/results/clientpositive/list_bucket_dml_12.q.out b/ql/src/test/results/clientpositive/list_bucket_dml_12.q.out
index 33e12a5..1f66fc3 100644
--- a/ql/src/test/results/clientpositive/list_bucket_dml_12.q.out
+++ b/ql/src/test/results/clientpositive/list_bucket_dml_12.q.out
@@ -230,9 +230,9 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[col2, col4]        	 
-Skewed Values:      	[[466, val_466], [287, val_287], [82, val_82]]	 
+Skewed Values:      	[[287, val_287], [466, val_466], [82, val_82]]	 
 #### A masked pattern was here ####
-Skewed Value to Truncated Path:	{[466, val_466]=/list_bucketing_mul_col/ds=2008-04-08/hr=11/col2=466/col4=val_466, [82, val_82]=/list_bucketing_mul_col/ds=2008-04-08/hr=11/col2=82/col4=val_82, [287, val_287]=/list_bucketing_mul_col/ds=2008-04-08/hr=11/col2=287/col4=val_287}	 
+Skewed Value to Truncated Path:	{[287, val_287]=/list_bucketing_mul_col/ds=2008-04-08/hr=11/col2=287/col4=val_287, [466, val_466]=/list_bucketing_mul_col/ds=2008-04-08/hr=11/col2=466/col4=val_466, [82, val_82]=/list_bucketing_mul_col/ds=2008-04-08/hr=11/col2=82/col4=val_82}	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: explain extended
diff --git a/ql/src/test/results/clientpositive/list_bucket_dml_13.q.out b/ql/src/test/results/clientpositive/list_bucket_dml_13.q.out
index 93ebef0..2a1adb8 100644
--- a/ql/src/test/results/clientpositive/list_bucket_dml_13.q.out
+++ b/ql/src/test/results/clientpositive/list_bucket_dml_13.q.out
@@ -230,9 +230,9 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[col2, col4]        	 
-Skewed Values:      	[[466, val_466], [287, val_287], [82, val_82]]	 
+Skewed Values:      	[[287, val_287], [466, val_466], [82, val_82]]	 
 #### A masked pattern was here ####
-Skewed Value to Truncated Path:	{[466, val_466]=/list_bucketing_mul_col/ds=2008-04-08/hr=2013-01-23+18%3A00%3A99/col2=466/col4=val_466, [287, val_287]=/list_bucketing_mul_col/ds=2008-04-08/hr=2013-01-23+18%3A00%3A99/col2=287/col4=val_287, [82, val_82]=/list_bucketing_mul_col/ds=2008-04-08/hr=2013-01-23+18%3A00%3A99/col2=82/col4=val_82}	 
+Skewed Value to Truncated Path:	{[287, val_287]=/list_bucketing_mul_col/ds=2008-04-08/hr=2013-01-23+18%3A00%3A99/col2=287/col4=val_287, [466, val_466]=/list_bucketing_mul_col/ds=2008-04-08/hr=2013-01-23+18%3A00%3A99/col2=466/col4=val_466, [82, val_82]=/list_bucketing_mul_col/ds=2008-04-08/hr=2013-01-23+18%3A00%3A99/col2=82/col4=val_82}	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: explain extended
diff --git a/ql/src/test/results/clientpositive/list_bucket_dml_2.q.out b/ql/src/test/results/clientpositive/list_bucket_dml_2.q.out
index a29c224..b94e52b 100644
--- a/ql/src/test/results/clientpositive/list_bucket_dml_2.q.out
+++ b/ql/src/test/results/clientpositive/list_bucket_dml_2.q.out
@@ -295,9 +295,9 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key, value]        	 
-Skewed Values:      	[[484, val_484], [51, val_14], [103, val_103]]	 
+Skewed Values:      	[[103, val_103], [484, val_484], [51, val_14]]	 
 #### A masked pattern was here ####
-Skewed Value to Truncated Path:	{[484, val_484]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=484/value=val_484, [103, val_103]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=103/value=val_103}	 
+Skewed Value to Truncated Path:	{[103, val_103]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=103/value=val_103, [484, val_484]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=484/value=val_484}	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: select count(1) from srcpart where ds = '2008-04-08'
diff --git a/ql/src/test/results/clientpositive/list_bucket_dml_4.q.out b/ql/src/test/results/clientpositive/list_bucket_dml_4.q.out
index 5f0406a..27849a0 100644
--- a/ql/src/test/results/clientpositive/list_bucket_dml_4.q.out
+++ b/ql/src/test/results/clientpositive/list_bucket_dml_4.q.out
@@ -303,9 +303,9 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key, value]        	 
-Skewed Values:      	[[484, val_484], [51, val_14], [103, val_103]]	 
+Skewed Values:      	[[103, val_103], [484, val_484], [51, val_14]]	 
 #### A masked pattern was here ####
-Skewed Value to Truncated Path:	{[484, val_484]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=484/value=val_484, [103, val_103]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=103/value=val_103}	 
+Skewed Value to Truncated Path:	{[103, val_103]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=103/value=val_103, [484, val_484]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=484/value=val_484}	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: -- list bucketing DML with merge. use bucketize to generate a few small files.
@@ -671,9 +671,9 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key, value]        	 
-Skewed Values:      	[[484, val_484], [51, val_14], [103, val_103]]	 
+Skewed Values:      	[[103, val_103], [484, val_484], [51, val_14]]	 
 #### A masked pattern was here ####
-Skewed Value to Truncated Path:	{[484, val_484]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=484/value=val_484, [103, val_103]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=103/value=val_103}	 
+Skewed Value to Truncated Path:	{[103, val_103]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=103/value=val_103, [484, val_484]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=484/value=val_484}	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: select count(1) from srcpart where ds = '2008-04-08'
diff --git a/ql/src/test/results/clientpositive/list_bucket_dml_5.q.out b/ql/src/test/results/clientpositive/list_bucket_dml_5.q.out
index 09cb847..95da7c9 100644
--- a/ql/src/test/results/clientpositive/list_bucket_dml_5.q.out
+++ b/ql/src/test/results/clientpositive/list_bucket_dml_5.q.out
@@ -267,9 +267,9 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key, value]        	 
-Skewed Values:      	[[484, val_484], [51, val_14], [103, val_103]]	 
+Skewed Values:      	[[103, val_103], [484, val_484], [51, val_14]]	 
 #### A masked pattern was here ####
-Skewed Value to Truncated Path:	{[484, val_484]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=11/key=484/value=val_484, [103, val_103]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=11/key=103/value=val_103}	 
+Skewed Value to Truncated Path:	{[103, val_103]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=11/key=103/value=val_103, [484, val_484]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=11/key=484/value=val_484}	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: desc formatted list_bucketing_dynamic_part partition (ds='2008-04-08', hr='12')
@@ -312,9 +312,9 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key, value]        	 
-Skewed Values:      	[[484, val_484], [51, val_14], [103, val_103]]	 
+Skewed Values:      	[[103, val_103], [484, val_484], [51, val_14]]	 
 #### A masked pattern was here ####
-Skewed Value to Truncated Path:	{[484, val_484]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=12/key=484/value=val_484, [103, val_103]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=12/key=103/value=val_103}	 
+Skewed Value to Truncated Path:	{[103, val_103]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=12/key=103/value=val_103, [484, val_484]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=12/key=484/value=val_484}	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: select count(1) from srcpart where ds='2008-04-08'
diff --git a/ql/src/test/results/clientpositive/list_bucket_dml_6.q.out b/ql/src/test/results/clientpositive/list_bucket_dml_6.q.out
index e53fee7..655ac35 100644
--- a/ql/src/test/results/clientpositive/list_bucket_dml_6.q.out
+++ b/ql/src/test/results/clientpositive/list_bucket_dml_6.q.out
@@ -353,7 +353,7 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key, value]        	 
-Skewed Values:      	[[484, val_484], [51, val_14], [103, val_103]]	 
+Skewed Values:      	[[103, val_103], [484, val_484], [51, val_14]]	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: desc formatted list_bucketing_dynamic_part partition (ds='2008-04-08', hr='b1')
@@ -396,9 +396,9 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key, value]        	 
-Skewed Values:      	[[484, val_484], [51, val_14], [103, val_103]]	 
+Skewed Values:      	[[103, val_103], [484, val_484], [51, val_14]]	 
 #### A masked pattern was here ####
-Skewed Value to Truncated Path:	{[484, val_484]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=b1/key=484/value=val_484, [103, val_103]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=b1/key=103/value=val_103}	 
+Skewed Value to Truncated Path:	{[103, val_103]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=b1/key=103/value=val_103, [484, val_484]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=b1/key=484/value=val_484}	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: -- list bucketing DML with merge. use bucketize to generate a few small files.
@@ -774,7 +774,7 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key, value]        	 
-Skewed Values:      	[[484, val_484], [51, val_14], [103, val_103]]	 
+Skewed Values:      	[[103, val_103], [484, val_484], [51, val_14]]	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: desc formatted list_bucketing_dynamic_part partition (ds='2008-04-08', hr='b1')
@@ -817,9 +817,9 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key, value]        	 
-Skewed Values:      	[[484, val_484], [51, val_14], [103, val_103]]	 
+Skewed Values:      	[[103, val_103], [484, val_484], [51, val_14]]	 
 #### A masked pattern was here ####
-Skewed Value to Truncated Path:	{[484, val_484]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=b1/key=484/value=val_484, [103, val_103]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=b1/key=103/value=val_103}	 
+Skewed Value to Truncated Path:	{[103, val_103]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=b1/key=103/value=val_103, [484, val_484]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=b1/key=484/value=val_484}	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: select count(1) from srcpart where ds = '2008-04-08'
diff --git a/ql/src/test/results/clientpositive/list_bucket_dml_8.q.out b/ql/src/test/results/clientpositive/list_bucket_dml_8.q.out
index ee36d3f..6c542ed 100644
--- a/ql/src/test/results/clientpositive/list_bucket_dml_8.q.out
+++ b/ql/src/test/results/clientpositive/list_bucket_dml_8.q.out
@@ -355,7 +355,7 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key, value]        	 
-Skewed Values:      	[[484, val_484], [51, val_14], [103, val_103]]	 
+Skewed Values:      	[[103, val_103], [484, val_484], [51, val_14]]	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: desc formatted list_bucketing_dynamic_part partition (ds='2008-04-08', hr='b1')
@@ -398,9 +398,9 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key, value]        	 
-Skewed Values:      	[[484, val_484], [51, val_14], [103, val_103]]	 
+Skewed Values:      	[[103, val_103], [484, val_484], [51, val_14]]	 
 #### A masked pattern was here ####
-Skewed Value to Truncated Path:	{[484, val_484]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=b1/key=484/value=val_484, [103, val_103]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=b1/key=103/value=val_103}	 
+Skewed Value to Truncated Path:	{[103, val_103]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=b1/key=103/value=val_103, [484, val_484]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=b1/key=484/value=val_484}	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: -- concatenate the partition and it will merge files
@@ -452,9 +452,9 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key, value]        	 
-Skewed Values:      	[[484, val_484], [51, val_14], [103, val_103]]	 
+Skewed Values:      	[[103, val_103], [484, val_484], [51, val_14]]	 
 #### A masked pattern was here ####
-Skewed Value to Truncated Path:	{[484, val_484]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=b1/key=484/value=val_484, [103, val_103]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=b1/key=103/value=val_103}	 
+Skewed Value to Truncated Path:	{[103, val_103]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=b1/key=103/value=val_103, [484, val_484]=/list_bucketing_dynamic_part/ds=2008-04-08/hr=b1/key=484/value=val_484}	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: select count(1) from srcpart where ds = '2008-04-08'
diff --git a/ql/src/test/results/clientpositive/list_bucket_dml_9.q.out b/ql/src/test/results/clientpositive/list_bucket_dml_9.q.out
index 81f3af3..cb191540 100644
--- a/ql/src/test/results/clientpositive/list_bucket_dml_9.q.out
+++ b/ql/src/test/results/clientpositive/list_bucket_dml_9.q.out
@@ -303,7 +303,7 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key]               	 
-Skewed Values:      	[[484], [103]]      	 
+Skewed Values:      	[[103], [484]]      	 
 #### A masked pattern was here ####
 Skewed Value to Truncated Path:	{[103]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=103, [484]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=484}	 
 Storage Desc Params:	 	 
@@ -671,7 +671,7 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key]               	 
-Skewed Values:      	[[484], [103]]      	 
+Skewed Values:      	[[103], [484]]      	 
 #### A masked pattern was here ####
 Skewed Value to Truncated Path:	{[103]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=103, [484]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=484}	 
 Storage Desc Params:	 	 
diff --git a/ql/src/test/results/clientpositive/list_bucket_query_multiskew_1.q.out b/ql/src/test/results/clientpositive/list_bucket_query_multiskew_1.q.out
index 492866a..7f99f17 100644
--- a/ql/src/test/results/clientpositive/list_bucket_query_multiskew_1.q.out
+++ b/ql/src/test/results/clientpositive/list_bucket_query_multiskew_1.q.out
@@ -92,9 +92,9 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key, value]        	 
-Skewed Values:      	[[484, val_484], [238, val_238]]	 
+Skewed Values:      	[[238, val_238], [484, val_484]]	 
 #### A masked pattern was here ####
-Skewed Value to Truncated Path:	{[484, val_484]=/fact_daily/ds=1/hr=4/key=484/value=val_484, [238, val_238]=/fact_daily/ds=1/hr=4/key=238/value=val_238}	 
+Skewed Value to Truncated Path:	{[238, val_238]=/fact_daily/ds=1/hr=4/key=238/value=val_238, [484, val_484]=/fact_daily/ds=1/hr=4/key=484/value=val_484}	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: SELECT count(1) FROM fact_daily WHERE ds='1' and hr='4'
diff --git a/ql/src/test/results/clientpositive/list_bucket_query_multiskew_2.q.out b/ql/src/test/results/clientpositive/list_bucket_query_multiskew_2.q.out
index cfb613a..8c08106 100644
--- a/ql/src/test/results/clientpositive/list_bucket_query_multiskew_2.q.out
+++ b/ql/src/test/results/clientpositive/list_bucket_query_multiskew_2.q.out
@@ -92,9 +92,9 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key, value]        	 
-Skewed Values:      	[[484, val_484], [238, val_238]]	 
+Skewed Values:      	[[238, val_238], [484, val_484]]	 
 #### A masked pattern was here ####
-Skewed Value to Truncated Path:	{[484, val_484]=/fact_daily/ds=1/hr=4/key=484/value=val_484, [238, val_238]=/fact_daily/ds=1/hr=4/key=238/value=val_238}	 
+Skewed Value to Truncated Path:	{[238, val_238]=/fact_daily/ds=1/hr=4/key=238/value=val_238, [484, val_484]=/fact_daily/ds=1/hr=4/key=484/value=val_484}	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: SELECT count(1) FROM fact_daily WHERE ds='1' and hr='4'
diff --git a/ql/src/test/results/clientpositive/list_bucket_query_multiskew_3.q.out b/ql/src/test/results/clientpositive/list_bucket_query_multiskew_3.q.out
index 6a5f8f5..6a421f3 100644
--- a/ql/src/test/results/clientpositive/list_bucket_query_multiskew_3.q.out
+++ b/ql/src/test/results/clientpositive/list_bucket_query_multiskew_3.q.out
@@ -154,9 +154,9 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key, value]        	 
-Skewed Values:      	[[484, val_484], [238, val_238]]	 
+Skewed Values:      	[[238, val_238], [484, val_484]]	 
 #### A masked pattern was here ####
-Skewed Value to Truncated Path:	{[484, val_484]=/fact_daily/ds=1/hr=2/key=484/value=val_484, [238, val_238]=/fact_daily/ds=1/hr=2/key=238/value=val_238}	 
+Skewed Value to Truncated Path:	{[238, val_238]=/fact_daily/ds=1/hr=2/key=238/value=val_238, [484, val_484]=/fact_daily/ds=1/hr=2/key=484/value=val_484}	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: -- another partition. skewed value is 327
diff --git a/ql/src/test/results/clientpositive/list_bucket_query_oneskew_3.q.out b/ql/src/test/results/clientpositive/list_bucket_query_oneskew_3.q.out
index 0c6fb63..702bc93 100644
--- a/ql/src/test/results/clientpositive/list_bucket_query_oneskew_3.q.out
+++ b/ql/src/test/results/clientpositive/list_bucket_query_oneskew_3.q.out
@@ -175,7 +175,7 @@
 Bucket Columns:     	[]                  	 
 Sort Columns:       	[]                  	 
 Skewed Columns:     	[x]                 	 
-Skewed Values:      	[[484], [238]]      	 
+Skewed Values:      	[[238], [484]]      	 
 #### A masked pattern was here ####
 Storage Desc Params:	 	 
 	serialization.format	1                   
diff --git a/ql/src/test/results/clientpositive/spark/list_bucket_dml_10.q.out b/ql/src/test/results/clientpositive/spark/list_bucket_dml_10.q.out
index 9eca85a..2e5c8b4 100644
--- a/ql/src/test/results/clientpositive/spark/list_bucket_dml_10.q.out
+++ b/ql/src/test/results/clientpositive/spark/list_bucket_dml_10.q.out
@@ -243,8 +243,8 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key]               	 
-Skewed Values:      	[[484], [51], [103]]	 
+Skewed Values:      	[[103], [484], [51]]	 
 #### A masked pattern was here ####
-Skewed Value to Truncated Path:	{[103]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=103, [51]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=51, [484]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=484}	 
+Skewed Value to Truncated Path:	{[103]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=103, [484]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=484, [51]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=51}	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
diff --git a/ql/src/test/results/clientpositive/spark/list_bucket_dml_2.q.out b/ql/src/test/results/clientpositive/spark/list_bucket_dml_2.q.out
index c83c02e..fd46200 100644
--- a/ql/src/test/results/clientpositive/spark/list_bucket_dml_2.q.out
+++ b/ql/src/test/results/clientpositive/spark/list_bucket_dml_2.q.out
@@ -298,9 +298,9 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[key, value]        	 
-Skewed Values:      	[[484, val_484], [51, val_14], [103, val_103]]	 
+Skewed Values:      	[[103, val_103], [484, val_484], [51, val_14]]	 
 #### A masked pattern was here ####
-Skewed Value to Truncated Path:	{[484, val_484]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=484/value=val_484, [103, val_103]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=103/value=val_103}	 
+Skewed Value to Truncated Path:	{[103, val_103]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=103/value=val_103, [484, val_484]=/list_bucketing_static_part/ds=2008-04-08/hr=11/key=484/value=val_484}	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: select count(1) from srcpart where ds = '2008-04-08'
diff --git a/ql/src/test/results/clientpositive/stats_list_bucket.q.out b/ql/src/test/results/clientpositive/stats_list_bucket.q.out
index c34c414..3bed86b 100644
--- a/ql/src/test/results/clientpositive/stats_list_bucket.q.out
+++ b/ql/src/test/results/clientpositive/stats_list_bucket.q.out
@@ -88,9 +88,9 @@
 Sort Columns:       	[]                  	 
 Stored As SubDirectories:	Yes                 	 
 Skewed Columns:     	[c1, c2]            	 
-Skewed Values:      	[[466, val_466], [287, val_287], [82, val_82]]	 
+Skewed Values:      	[[287, val_287], [466, val_466], [82, val_82]]	 
 #### A masked pattern was here ####
-Skewed Value to Truncated Path:	{[466, val_466]=/stats_list_bucket/ds=2008-04-08/hr=11/c1=466/c2=val_466, [82, val_82]=/stats_list_bucket/ds=2008-04-08/hr=11/c1=82/c2=val_82, [287, val_287]=/stats_list_bucket/ds=2008-04-08/hr=11/c1=287/c2=val_287}	 
+Skewed Value to Truncated Path:	{[287, val_287]=/stats_list_bucket/ds=2008-04-08/hr=11/c1=287/c2=val_287, [466, val_466]=/stats_list_bucket/ds=2008-04-08/hr=11/c1=466/c2=val_466, [82, val_82]=/stats_list_bucket/ds=2008-04-08/hr=11/c1=82/c2=val_82}	 
 Storage Desc Params:	 	 
 	serialization.format	1                   
 PREHOOK: query: -- Also try non-partitioned table with list bucketing.