hive-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From pxi...@apache.org
Subject [4/4] hive git commit: HIVE-12763: Use bit vector to track NDV (Pengcheng Xiong, reviewed by Laljo John Pullokkaran and Alan Gates)
Date Fri, 29 Jan 2016 05:25:57 GMT
HIVE-12763: Use bit vector to track NDV (Pengcheng Xiong, reviewed by Laljo John Pullokkaran and Alan Gates)


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

Branch: refs/heads/master
Commit: 7b2f6703f172a71d595159c4f395f942583d66b9
Parents: 0c7f2d6
Author: Pengcheng Xiong <pxiong@apache.org>
Authored: Thu Jan 28 21:25:33 2016 -0800
Committer: Pengcheng Xiong <pxiong@apache.org>
Committed: Thu Jan 28 21:25:33 2016 -0800

----------------------------------------------------------------------
 .../hadoop/hive/common/HiveStatsUtils.java      |  59 ++
 .../metastore/hbase/TestHBaseSchemaTool.java    |  12 +-
 .../test/resources/testconfiguration.properties |   1 +
 metastore/if/hive_metastore.thrift              |  21 +-
 metastore/pom.xml                               |   5 +
 .../metastore/hbase/HbaseMetastoreProto.java    | 411 ++++++++----
 .../gen/thrift/gen-cpp/hive_metastore_types.cpp | 163 +++++
 .../gen/thrift/gen-cpp/hive_metastore_types.h   |  93 ++-
 .../metastore/api/BinaryColumnStatsData.java    | 112 +++-
 .../metastore/api/BooleanColumnStatsData.java   | 112 +++-
 .../hive/metastore/api/DateColumnStatsData.java | 114 +++-
 .../metastore/api/DecimalColumnStatsData.java   | 114 +++-
 .../metastore/api/DoubleColumnStatsData.java    | 114 +++-
 .../hive/metastore/api/LongColumnStatsData.java | 114 +++-
 .../metastore/api/StringColumnStatsData.java    | 112 +++-
 .../src/gen/thrift/gen-php/metastore/Types.php  | 161 +++++
 .../gen/thrift/gen-py/hive_metastore/ttypes.py  | 105 ++-
 .../gen/thrift/gen-rb/hive_metastore_types.rb   |  28 +-
 .../metastore/NumDistinctValueEstimator.java    | 367 +++++++++++
 .../hadoop/hive/metastore/hbase/HBaseUtils.java | 152 ++---
 .../hadoop/hive/metastore/hbase/StatsCache.java |   7 +-
 .../stats/BinaryColumnStatsAggregator.java      |   2 +-
 .../stats/BooleanColumnStatsAggregator.java     |   2 +-
 .../hbase/stats/ColumnStatsAggregator.java      |   6 +-
 .../stats/ColumnStatsAggregatorFactory.java     |  26 +-
 .../stats/DecimalColumnStatsAggregator.java     |  24 +-
 .../stats/DoubleColumnStatsAggregator.java      |  12 +-
 .../hbase/stats/LongColumnStatsAggregator.java  |  12 +-
 .../stats/StringColumnStatsAggregator.java      |  12 +-
 .../metastore/hbase/hbase_metastore_proto.proto |   1 +
 ...stHBaseAggregateStatsCacheWithBitVector.java | 187 ++++++
 .../hbase/TestHBaseStoreBitVector.java          | 634 +++++++++++++++++++
 ql/pom.xml                                      |   5 -
 .../hadoop/hive/ql/exec/ColumnStatsTask.java    |  20 +
 .../ql/parse/ColumnStatsSemanticAnalyzer.java   |  63 +-
 .../apache/hadoop/hive/ql/stats/StatsUtils.java |  55 ++
 .../ql/udf/generic/GenericUDAFComputeStats.java |  19 +-
 .../clientpositive/char_udf1.q.java1.7.out      |   2 +-
 .../clientpositive/columnstats_partlvl.q.out    |  16 +-
 .../clientpositive/columnstats_partlvl_dp.q.out |   8 +-
 .../clientpositive/columnstats_tbllvl.q.out     |   4 +-
 .../clientpositive/compute_stats_date.q.out     |   2 +-
 .../clientpositive/compute_stats_decimal.q.out  |   2 +-
 .../clientpositive/compute_stats_double.q.out   |   2 +-
 .../compute_stats_empty_table.q.out             |   6 +-
 .../clientpositive/compute_stats_long.q.out     |   2 +-
 .../clientpositive/compute_stats_string.q.out   |   2 +-
 .../display_colstats_tbllvl.q.out               |   2 +-
 .../temp_table_display_colstats_tbllvl.q.out    |   2 +-
 .../clientpositive/varchar_udf1.q.java1.7.out   |   2 +-
 50 files changed, 3131 insertions(+), 378 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/7b2f6703/common/src/java/org/apache/hadoop/hive/common/HiveStatsUtils.java
----------------------------------------------------------------------
diff --git a/common/src/java/org/apache/hadoop/hive/common/HiveStatsUtils.java b/common/src/java/org/apache/hadoop/hive/common/HiveStatsUtils.java
index 9193f80..7c9d72f 100644
--- a/common/src/java/org/apache/hadoop/hive/common/HiveStatsUtils.java
+++ b/common/src/java/org/apache/hadoop/hive/common/HiveStatsUtils.java
@@ -21,9 +21,13 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hive.conf.HiveConf;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * HiveStatsUtils.
@@ -32,6 +36,7 @@ import org.apache.hadoop.fs.Path;
  */
 
 public class HiveStatsUtils {
+  private static final Logger LOG = LoggerFactory.getLogger(HiveStatsUtils.class);
 
   /**
    * Get all file status from a root path and recursively go deep into certain levels.
@@ -73,4 +78,58 @@ public class HiveStatsUtils {
     return fs.globStatus(pathPattern, FileUtils.HIDDEN_FILES_PATH_FILTER);
   }
 
+  public static int getNumBitVectorsForNDVEstimation(Configuration conf) throws Exception {
+    int numBitVectors;
+    float percentageError = HiveConf.getFloatVar(conf, HiveConf.ConfVars.HIVE_STATS_NDV_ERROR);
+
+    if (percentageError < 0.0) {
+      throw new Exception("hive.stats.ndv.error can't be negative");
+    } else if (percentageError <= 2.4) {
+      numBitVectors = 1024;
+      LOG.info("Lowest error achievable is 2.4% but error requested is " + percentageError + "%");
+      LOG.info("Choosing 1024 bit vectors..");
+    } else if (percentageError <= 3.4 ) {
+      numBitVectors = 1024;
+      LOG.info("Error requested is " + percentageError + "%");
+      LOG.info("Choosing 1024 bit vectors..");
+    } else if (percentageError <= 4.8) {
+      numBitVectors = 512;
+      LOG.info("Error requested is " + percentageError + "%");
+      LOG.info("Choosing 512 bit vectors..");
+     } else if (percentageError <= 6.8) {
+      numBitVectors = 256;
+      LOG.info("Error requested is " + percentageError + "%");
+      LOG.info("Choosing 256 bit vectors..");
+    } else if (percentageError <= 9.7) {
+      numBitVectors = 128;
+      LOG.info("Error requested is " + percentageError + "%");
+      LOG.info("Choosing 128 bit vectors..");
+    } else if (percentageError <= 13.8) {
+      numBitVectors = 64;
+      LOG.info("Error requested is " + percentageError + "%");
+      LOG.info("Choosing 64 bit vectors..");
+    } else if (percentageError <= 19.6) {
+      numBitVectors = 32;
+      LOG.info("Error requested is " + percentageError + "%");
+      LOG.info("Choosing 32 bit vectors..");
+    } else if (percentageError <= 28.2) {
+      numBitVectors = 16;
+      LOG.info("Error requested is " + percentageError + "%");
+      LOG.info("Choosing 16 bit vectors..");
+    } else if (percentageError <= 40.9) {
+      numBitVectors = 8;
+      LOG.info("Error requested is " + percentageError + "%");
+      LOG.info("Choosing 8 bit vectors..");
+    } else if (percentageError <= 61.0) {
+      numBitVectors = 4;
+      LOG.info("Error requested is " + percentageError + "%");
+      LOG.info("Choosing 4 bit vectors..");
+    } else {
+      numBitVectors = 2;
+      LOG.info("Error requested is " + percentageError + "%");
+      LOG.info("Choosing 2 bit vectors..");
+    }
+    return numBitVectors;
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/hive/blob/7b2f6703/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/TestHBaseSchemaTool.java
----------------------------------------------------------------------
diff --git a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/TestHBaseSchemaTool.java b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/TestHBaseSchemaTool.java
index 9fbbf90..79c9e08 100644
--- a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/TestHBaseSchemaTool.java
+++ b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/TestHBaseSchemaTool.java
@@ -468,9 +468,9 @@ public class TestHBaseSchemaTool extends HBaseIntegrationTests {
             "\"tableType\":\"\"} sdHash: qQTgZAi5VzgpozzFGmIVTQ stats: column " +
             "col1: {\"colName\":\"col1\",\"colType\":\"int\"," +
             "\"statsData\":{\"longStats\":{\"lowValue\":-95,\"highValue\":95,\"numNulls\":1," +
-            "\"numDVs\":2}}} column col2: {\"colName\":\"col2\",\"colType\":\"varchar(32)\"," +
+            "\"numDVs\":2,\"bitVectors\":\"\"}}} column col2: {\"colName\":\"col2\",\"colType\":\"varchar(32)\"," +
             "\"statsData\":{\"stringStats\":{\"maxColLen\":97,\"avgColLen\":18.78," +
-        "\"numNulls\":29,\"numDVs\":397}}}" + lsep +
+        "\"numNulls\":29,\"numDVs\":397,\"bitVectors\":\"\"}}}" + lsep +
         "{\"tableName\":\"tab1\",\"dbName\":\"db0\",\"owner\":\"me\",\"createTime\":0," +
         "\"lastAccessTime\":0,\"retention\":0,\"partitionKeys\":[{\"name\":\"pcol1\"," +
             "\"type\":\"string\",\"comment\":\"\"},{\"name\":\"pcol2\",\"type\":\"string\"," +
@@ -519,9 +519,9 @@ public class TestHBaseSchemaTool extends HBaseIntegrationTests {
         "\"createTime\":0,\"lastAccessTime\":0,\"parameters\":{\"COLUMN_STATS_ACCURATE\":\"{\\\"COLUMN_STATS\\\":{\\\"col1\\\":\\\"true\\\",\\\"col2\\\":\\\"true\\\"}}\"}} sdHash: qQTgZAi5VzgpozzFGmIVTQ " +
         "stats: column col1: {\"colName\":\"col1\",\"colType\":\"int\"," +
         "\"statsData\":{\"longStats\":{\"lowValue\":-95,\"highValue\":95,\"numNulls\":1," +
-        "\"numDVs\":2}}} column col2: {\"colName\":\"col2\",\"colType\":\"varchar(32)\"," +
+        "\"numDVs\":2,\"bitVectors\":\"\"}}} column col2: {\"colName\":\"col2\",\"colType\":\"varchar(32)\"," +
         "\"statsData\":{\"stringStats\":{\"maxColLen\":97,\"avgColLen\":18.78,\"numNulls\":29," +
-        "\"numDVs\":397}}}" + lsep,  outStr.toString());
+        "\"numDVs\":397,\"bitVectors\":\"\"}}}" + lsep,  outStr.toString());
 
     outStr = new ByteArrayOutputStream();
     out = new PrintStream(outStr);
@@ -533,9 +533,9 @@ public class TestHBaseSchemaTool extends HBaseIntegrationTests {
         "\"lastAccessTime\":0,\"parameters\":{\"COLUMN_STATS_ACCURATE\":\"{\\\"COLUMN_STATS\\\":{\\\"col1\\\":\\\"true\\\",\\\"col2\\\":\\\"true\\\"}}\"}} sdHash: qQTgZAi5VzgpozzFGmIVTQ stats: column " +
         "col1: {\"colName\":\"col1\",\"colType\":\"int\"," +
         "\"statsData\":{\"longStats\":{\"lowValue\":-95,\"highValue\":95,\"numNulls\":1," +
-        "\"numDVs\":2}}} column col2: {\"colName\":\"col2\",\"colType\":\"varchar(32)\"," +
+        "\"numDVs\":2,\"bitVectors\":\"\"}}} column col2: {\"colName\":\"col2\",\"colType\":\"varchar(32)\"," +
         "\"statsData\":{\"stringStats\":{\"maxColLen\":97,\"avgColLen\":18.78,\"numNulls\":29," +
-        "\"numDVs\":397}}}" + lsep, outStr.toString());
+        "\"numDVs\":397,\"bitVectors\":\"\"}}}" + lsep, outStr.toString());
 
     outStr = new ByteArrayOutputStream();
     out = new PrintStream(outStr);

http://git-wip-us.apache.org/repos/asf/hive/blob/7b2f6703/itests/src/test/resources/testconfiguration.properties
----------------------------------------------------------------------
diff --git a/itests/src/test/resources/testconfiguration.properties b/itests/src/test/resources/testconfiguration.properties
index ec6a2c7..f8aa146 100644
--- a/itests/src/test/resources/testconfiguration.properties
+++ b/itests/src/test/resources/testconfiguration.properties
@@ -393,6 +393,7 @@ minitez.query.files=bucket_map_join_tez1.q,\
   orc_ppd_basic.q,\
   orc_merge_diff_fs.q,\
   stats_filemetadata.q,\
+  tez_aggr_part_stats.q,\
   tez_bmj_schema_evolution.q,\
   tez_dml.q,\
   tez_fsstat.q,\

http://git-wip-us.apache.org/repos/asf/hive/blob/7b2f6703/metastore/if/hive_metastore.thrift
----------------------------------------------------------------------
diff --git a/metastore/if/hive_metastore.thrift b/metastore/if/hive_metastore.thrift
index 81837e6..9d8c092 100755
--- a/metastore/if/hive_metastore.thrift
+++ b/metastore/if/hive_metastore.thrift
@@ -325,34 +325,39 @@ struct Index {
 struct BooleanColumnStatsData {
 1: required i64 numTrues,
 2: required i64 numFalses,
-3: required i64 numNulls
+3: required i64 numNulls,
+4: optional string bitVectors
 }
 
 struct DoubleColumnStatsData {
 1: optional double lowValue,
 2: optional double highValue,
 3: required i64 numNulls,
-4: required i64 numDVs
+4: required i64 numDVs,
+5: optional string bitVectors
 }
 
 struct LongColumnStatsData {
 1: optional i64 lowValue,
 2: optional i64 highValue,
 3: required i64 numNulls,
-4: required i64 numDVs
+4: required i64 numDVs,
+5: optional string bitVectors
 }
 
 struct StringColumnStatsData {
 1: required i64 maxColLen,
 2: required double avgColLen,
 3: required i64 numNulls,
-4: required i64 numDVs
+4: required i64 numDVs,
+5: optional string bitVectors
 }
 
 struct BinaryColumnStatsData {
 1: required i64 maxColLen,
 2: required double avgColLen,
-3: required i64 numNulls
+3: required i64 numNulls,
+4: optional string bitVectors
 }
 
 
@@ -365,7 +370,8 @@ struct DecimalColumnStatsData {
 1: optional Decimal lowValue,
 2: optional Decimal highValue,
 3: required i64 numNulls,
-4: required i64 numDVs
+4: required i64 numDVs,
+5: optional string bitVectors
 }
 
 struct Date {
@@ -376,7 +382,8 @@ struct DateColumnStatsData {
 1: optional Date lowValue,
 2: optional Date highValue,
 3: required i64 numNulls,
-4: required i64 numDVs
+4: required i64 numDVs,
+5: optional string bitVectors
 }
 
 union ColumnStatisticsData {

http://git-wip-us.apache.org/repos/asf/hive/blob/7b2f6703/metastore/pom.xml
----------------------------------------------------------------------
diff --git a/metastore/pom.xml b/metastore/pom.xml
index a8e84a1..18c1f9c 100644
--- a/metastore/pom.xml
+++ b/metastore/pom.xml
@@ -44,6 +44,11 @@
       <artifactId>hive-shims</artifactId>
       <version>${project.version}</version>
     </dependency>
+	<dependency>
+		<groupId>javolution</groupId>
+		<artifactId>javolution</artifactId>
+		<version>${javolution.version}</version>
+	</dependency>
     <!-- inter-project -->
     <dependency>
       <groupId>com.google.guava</groupId>

http://git-wip-us.apache.org/repos/asf/hive/blob/7b2f6703/metastore/src/gen/protobuf/gen-java/org/apache/hadoop/hive/metastore/hbase/HbaseMetastoreProto.java
----------------------------------------------------------------------
diff --git a/metastore/src/gen/protobuf/gen-java/org/apache/hadoop/hive/metastore/hbase/HbaseMetastoreProto.java b/metastore/src/gen/protobuf/gen-java/org/apache/hadoop/hive/metastore/hbase/HbaseMetastoreProto.java
index 39a7278..3b2d7b5 100644
--- a/metastore/src/gen/protobuf/gen-java/org/apache/hadoop/hive/metastore/hbase/HbaseMetastoreProto.java
+++ b/metastore/src/gen/protobuf/gen-java/org/apache/hadoop/hive/metastore/hbase/HbaseMetastoreProto.java
@@ -3918,6 +3918,21 @@ public final class HbaseMetastoreProto {
      */
     com.google.protobuf.ByteString
         getColumnNameBytes();
+
+    // optional string bit_vectors = 12;
+    /**
+     * <code>optional string bit_vectors = 12;</code>
+     */
+    boolean hasBitVectors();
+    /**
+     * <code>optional string bit_vectors = 12;</code>
+     */
+    java.lang.String getBitVectors();
+    /**
+     * <code>optional string bit_vectors = 12;</code>
+     */
+    com.google.protobuf.ByteString
+        getBitVectorsBytes();
   }
   /**
    * Protobuf type {@code org.apache.hadoop.hive.metastore.hbase.ColumnStats}
@@ -4073,6 +4088,11 @@ public final class HbaseMetastoreProto {
               columnName_ = input.readBytes();
               break;
             }
+            case 98: {
+              bitField0_ |= 0x00000800;
+              bitVectors_ = input.readBytes();
+              break;
+            }
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
@@ -7506,6 +7526,49 @@ public final class HbaseMetastoreProto {
       }
     }
 
+    // optional string bit_vectors = 12;
+    public static final int BIT_VECTORS_FIELD_NUMBER = 12;
+    private java.lang.Object bitVectors_;
+    /**
+     * <code>optional string bit_vectors = 12;</code>
+     */
+    public boolean hasBitVectors() {
+      return ((bitField0_ & 0x00000800) == 0x00000800);
+    }
+    /**
+     * <code>optional string bit_vectors = 12;</code>
+     */
+    public java.lang.String getBitVectors() {
+      java.lang.Object ref = bitVectors_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          bitVectors_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string bit_vectors = 12;</code>
+     */
+    public com.google.protobuf.ByteString
+        getBitVectorsBytes() {
+      java.lang.Object ref = bitVectors_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        bitVectors_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
     private void initFields() {
       lastAnalyzed_ = 0L;
       columnType_ = "";
@@ -7518,6 +7581,7 @@ public final class HbaseMetastoreProto {
       binaryStats_ = org.apache.hadoop.hive.metastore.hbase.HbaseMetastoreProto.ColumnStats.StringStats.getDefaultInstance();
       decimalStats_ = org.apache.hadoop.hive.metastore.hbase.HbaseMetastoreProto.ColumnStats.DecimalStats.getDefaultInstance();
       columnName_ = "";
+      bitVectors_ = "";
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -7574,6 +7638,9 @@ public final class HbaseMetastoreProto {
       if (((bitField0_ & 0x00000400) == 0x00000400)) {
         output.writeBytes(11, getColumnNameBytes());
       }
+      if (((bitField0_ & 0x00000800) == 0x00000800)) {
+        output.writeBytes(12, getBitVectorsBytes());
+      }
       getUnknownFields().writeTo(output);
     }
 
@@ -7627,6 +7694,10 @@ public final class HbaseMetastoreProto {
         size += com.google.protobuf.CodedOutputStream
           .computeBytesSize(11, getColumnNameBytes());
       }
+      if (((bitField0_ & 0x00000800) == 0x00000800)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(12, getBitVectorsBytes());
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -7795,6 +7866,8 @@ public final class HbaseMetastoreProto {
         bitField0_ = (bitField0_ & ~0x00000200);
         columnName_ = "";
         bitField0_ = (bitField0_ & ~0x00000400);
+        bitVectors_ = "";
+        bitField0_ = (bitField0_ & ~0x00000800);
         return this;
       }
 
@@ -7891,6 +7964,10 @@ public final class HbaseMetastoreProto {
           to_bitField0_ |= 0x00000400;
         }
         result.columnName_ = columnName_;
+        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
+          to_bitField0_ |= 0x00000800;
+        }
+        result.bitVectors_ = bitVectors_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
@@ -7944,6 +8021,11 @@ public final class HbaseMetastoreProto {
           columnName_ = other.columnName_;
           onChanged();
         }
+        if (other.hasBitVectors()) {
+          bitField0_ |= 0x00000800;
+          bitVectors_ = other.bitVectors_;
+          onChanged();
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -8930,6 +9012,80 @@ public final class HbaseMetastoreProto {
         return this;
       }
 
+      // optional string bit_vectors = 12;
+      private java.lang.Object bitVectors_ = "";
+      /**
+       * <code>optional string bit_vectors = 12;</code>
+       */
+      public boolean hasBitVectors() {
+        return ((bitField0_ & 0x00000800) == 0x00000800);
+      }
+      /**
+       * <code>optional string bit_vectors = 12;</code>
+       */
+      public java.lang.String getBitVectors() {
+        java.lang.Object ref = bitVectors_;
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
+          bitVectors_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string bit_vectors = 12;</code>
+       */
+      public com.google.protobuf.ByteString
+          getBitVectorsBytes() {
+        java.lang.Object ref = bitVectors_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          bitVectors_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string bit_vectors = 12;</code>
+       */
+      public Builder setBitVectors(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000800;
+        bitVectors_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional string bit_vectors = 12;</code>
+       */
+      public Builder clearBitVectors() {
+        bitField0_ = (bitField0_ & ~0x00000800);
+        bitVectors_ = getDefaultInstance().getBitVectors();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional string bit_vectors = 12;</code>
+       */
+      public Builder setBitVectorsBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000800;
+        bitVectors_ = value;
+        onChanged();
+        return this;
+      }
+
       // @@protoc_insertion_point(builder_scope:org.apache.hadoop.hive.metastore.hbase.ColumnStats)
     }
 
@@ -34506,7 +34662,7 @@ public final class HbaseMetastoreProto {
       "grStatsInvalidatorFilter.Entry\022\021\n\trun_ev" +
       "ery\030\002 \002(\003\022\034\n\024max_cache_entry_life\030\003 \002(\003\032" +
       "?\n\005Entry\022\017\n\007db_name\030\001 \002(\014\022\022\n\ntable_name\030" +
-      "\002 \002(\014\022\021\n\tpart_name\030\003 \002(\014\"\335\010\n\013ColumnStats" +
+      "\002 \002(\014\022\021\n\tpart_name\030\003 \002(\014\"\362\010\n\013ColumnStats" +
       "\022\025\n\rlast_analyzed\030\001 \001(\003\022\023\n\013column_type\030\002" +
       " \002(\t\022\021\n\tnum_nulls\030\003 \001(\003\022\033\n\023num_distinct_" +
       "values\030\004 \001(\003\022T\n\nbool_stats\030\005 \001(\0132@.org.a",
@@ -34522,132 +34678,133 @@ public final class HbaseMetastoreProto {
       "ve.metastore.hbase.ColumnStats.StringSta",
       "ts\022W\n\rdecimal_stats\030\n \001(\0132@.org.apache.h" +
       "adoop.hive.metastore.hbase.ColumnStats.D" +
-      "ecimalStats\022\023\n\013column_name\030\013 \001(\t\0325\n\014Bool" +
-      "eanStats\022\021\n\tnum_trues\030\001 \001(\003\022\022\n\nnum_false" +
-      "s\030\002 \001(\003\0322\n\tLongStats\022\021\n\tlow_value\030\001 \001(\022\022" +
-      "\022\n\nhigh_value\030\002 \001(\022\0324\n\013DoubleStats\022\021\n\tlo" +
-      "w_value\030\001 \001(\001\022\022\n\nhigh_value\030\002 \001(\001\032=\n\013Str" +
-      "ingStats\022\026\n\016max_col_length\030\001 \001(\003\022\026\n\016avg_" +
-      "col_length\030\002 \001(\001\032\365\001\n\014DecimalStats\022[\n\tlow" +
-      "_value\030\001 \001(\0132H.org.apache.hadoop.hive.me",
-      "tastore.hbase.ColumnStats.DecimalStats.D" +
-      "ecimal\022\\\n\nhigh_value\030\002 \001(\0132H.org.apache." +
-      "hadoop.hive.metastore.hbase.ColumnStats." +
-      "DecimalStats.Decimal\032*\n\007Decimal\022\020\n\010unsca" +
-      "led\030\001 \002(\014\022\r\n\005scale\030\002 \002(\005\"\246\002\n\010Database\022\023\n" +
-      "\013description\030\001 \001(\t\022\013\n\003uri\030\002 \001(\t\022F\n\nparam" +
-      "eters\030\003 \001(\01322.org.apache.hadoop.hive.met" +
-      "astore.hbase.Parameters\022Q\n\nprivileges\030\004 " +
-      "\001(\0132=.org.apache.hadoop.hive.metastore.h" +
-      "base.PrincipalPrivilegeSet\022\022\n\nowner_name",
-      "\030\005 \001(\t\022I\n\nowner_type\030\006 \001(\01625.org.apache." +
-      "hadoop.hive.metastore.hbase.PrincipalTyp" +
-      "e\"$\n\017DelegationToken\022\021\n\ttoken_str\030\001 \002(\t\"" +
-      ":\n\013FieldSchema\022\014\n\004name\030\001 \002(\t\022\014\n\004type\030\002 \002" +
-      "(\t\022\017\n\007comment\030\003 \001(\t\"\206\004\n\010Function\022\022\n\nclas" +
-      "s_name\030\001 \001(\t\022\022\n\nowner_name\030\002 \001(\t\022I\n\nowne" +
-      "r_type\030\003 \001(\01625.org.apache.hadoop.hive.me" +
-      "tastore.hbase.PrincipalType\022\023\n\013create_ti" +
-      "me\030\004 \001(\022\022T\n\rfunction_type\030\005 \001(\0162=.org.ap" +
-      "ache.hadoop.hive.metastore.hbase.Functio",
-      "n.FunctionType\022S\n\rresource_uris\030\006 \003(\0132<." +
-      "org.apache.hadoop.hive.metastore.hbase.F" +
-      "unction.ResourceUri\032\254\001\n\013ResourceUri\022`\n\rr" +
-      "esource_type\030\001 \002(\0162I.org.apache.hadoop.h" +
+      "ecimalStats\022\023\n\013column_name\030\013 \001(\t\022\023\n\013bit_" +
+      "vectors\030\014 \001(\t\0325\n\014BooleanStats\022\021\n\tnum_tru" +
+      "es\030\001 \001(\003\022\022\n\nnum_falses\030\002 \001(\003\0322\n\tLongStat" +
+      "s\022\021\n\tlow_value\030\001 \001(\022\022\022\n\nhigh_value\030\002 \001(\022" +
+      "\0324\n\013DoubleStats\022\021\n\tlow_value\030\001 \001(\001\022\022\n\nhi" +
+      "gh_value\030\002 \001(\001\032=\n\013StringStats\022\026\n\016max_col" +
+      "_length\030\001 \001(\003\022\026\n\016avg_col_length\030\002 \001(\001\032\365\001" +
+      "\n\014DecimalStats\022[\n\tlow_value\030\001 \001(\0132H.org.",
+      "apache.hadoop.hive.metastore.hbase.Colum" +
+      "nStats.DecimalStats.Decimal\022\\\n\nhigh_valu" +
+      "e\030\002 \001(\0132H.org.apache.hadoop.hive.metasto" +
+      "re.hbase.ColumnStats.DecimalStats.Decima" +
+      "l\032*\n\007Decimal\022\020\n\010unscaled\030\001 \002(\014\022\r\n\005scale\030" +
+      "\002 \002(\005\"\246\002\n\010Database\022\023\n\013description\030\001 \001(\t\022" +
+      "\013\n\003uri\030\002 \001(\t\022F\n\nparameters\030\003 \001(\01322.org.a" +
+      "pache.hadoop.hive.metastore.hbase.Parame" +
+      "ters\022Q\n\nprivileges\030\004 \001(\0132=.org.apache.ha" +
+      "doop.hive.metastore.hbase.PrincipalPrivi",
+      "legeSet\022\022\n\nowner_name\030\005 \001(\t\022I\n\nowner_typ" +
+      "e\030\006 \001(\01625.org.apache.hadoop.hive.metasto" +
+      "re.hbase.PrincipalType\"$\n\017DelegationToke" +
+      "n\022\021\n\ttoken_str\030\001 \002(\t\":\n\013FieldSchema\022\014\n\004n" +
+      "ame\030\001 \002(\t\022\014\n\004type\030\002 \002(\t\022\017\n\007comment\030\003 \001(\t" +
+      "\"\206\004\n\010Function\022\022\n\nclass_name\030\001 \001(\t\022\022\n\nown" +
+      "er_name\030\002 \001(\t\022I\n\nowner_type\030\003 \001(\01625.org." +
+      "apache.hadoop.hive.metastore.hbase.Princ" +
+      "ipalType\022\023\n\013create_time\030\004 \001(\022\022T\n\rfunctio" +
+      "n_type\030\005 \001(\0162=.org.apache.hadoop.hive.me",
+      "tastore.hbase.Function.FunctionType\022S\n\rr" +
+      "esource_uris\030\006 \003(\0132<.org.apache.hadoop.h" +
       "ive.metastore.hbase.Function.ResourceUri" +
-      ".ResourceType\022\013\n\003uri\030\002 \002(\t\".\n\014ResourceTy" +
-      "pe\022\007\n\003JAR\020\001\022\010\n\004FILE\020\002\022\013\n\007ARCHIVE\020\003\"\030\n\014Fu" +
-      "nctionType\022\010\n\004JAVA\020\001\"\037\n\tMasterKey\022\022\n\nmas" +
-      "ter_key\030\001 \002(\t\",\n\016ParameterEntry\022\013\n\003key\030\001" +
-      " \002(\t\022\r\n\005value\030\002 \002(\t\"W\n\nParameters\022I\n\tpar",
-      "ameter\030\001 \003(\01326.org.apache.hadoop.hive.me" +
-      "tastore.hbase.ParameterEntry\"\360\001\n\tPartiti" +
-      "on\022\023\n\013create_time\030\001 \001(\003\022\030\n\020last_access_t" +
-      "ime\030\002 \001(\003\022\020\n\010location\030\003 \001(\t\022I\n\rsd_parame" +
-      "ters\030\004 \001(\01322.org.apache.hadoop.hive.meta" +
-      "store.hbase.Parameters\022\017\n\007sd_hash\030\005 \002(\014\022" +
-      "F\n\nparameters\030\006 \001(\01322.org.apache.hadoop." +
-      "hive.metastore.hbase.Parameters\"\204\001\n\032Prin" +
-      "cipalPrivilegeSetEntry\022\026\n\016principal_name" +
-      "\030\001 \002(\t\022N\n\nprivileges\030\002 \003(\0132:.org.apache.",
-      "hadoop.hive.metastore.hbase.PrivilegeGra" +
-      "ntInfo\"\275\001\n\025PrincipalPrivilegeSet\022Q\n\005user" +
-      "s\030\001 \003(\0132B.org.apache.hadoop.hive.metasto" +
-      "re.hbase.PrincipalPrivilegeSetEntry\022Q\n\005r" +
-      "oles\030\002 \003(\0132B.org.apache.hadoop.hive.meta" +
-      "store.hbase.PrincipalPrivilegeSetEntry\"\260" +
-      "\001\n\022PrivilegeGrantInfo\022\021\n\tprivilege\030\001 \001(\t" +
-      "\022\023\n\013create_time\030\002 \001(\003\022\017\n\007grantor\030\003 \001(\t\022K" +
-      "\n\014grantor_type\030\004 \001(\01625.org.apache.hadoop" +
-      ".hive.metastore.hbase.PrincipalType\022\024\n\014g",
-      "rant_option\030\005 \001(\010\"\374\001\n\rRoleGrantInfo\022\026\n\016p" +
-      "rincipal_name\030\001 \002(\t\022M\n\016principal_type\030\002 " +
-      "\002(\01625.org.apache.hadoop.hive.metastore.h" +
-      "base.PrincipalType\022\020\n\010add_time\030\003 \001(\003\022\017\n\007" +
-      "grantor\030\004 \001(\t\022K\n\014grantor_type\030\005 \001(\01625.or" +
-      "g.apache.hadoop.hive.metastore.hbase.Pri" +
-      "ncipalType\022\024\n\014grant_option\030\006 \001(\010\"^\n\021Role" +
-      "GrantInfoList\022I\n\ngrant_info\030\001 \003(\01325.org." +
-      "apache.hadoop.hive.metastore.hbase.RoleG" +
-      "rantInfo\"\030\n\010RoleList\022\014\n\004role\030\001 \003(\t\"/\n\004Ro",
-      "le\022\023\n\013create_time\030\001 \001(\003\022\022\n\nowner_name\030\002 " +
-      "\001(\t\"\254\010\n\021StorageDescriptor\022A\n\004cols\030\001 \003(\0132" +
-      "3.org.apache.hadoop.hive.metastore.hbase" +
-      ".FieldSchema\022\024\n\014input_format\030\002 \001(\t\022\025\n\rou" +
-      "tput_format\030\003 \001(\t\022\025\n\ris_compressed\030\004 \001(\010" +
-      "\022\023\n\013num_buckets\030\005 \001(\021\022W\n\nserde_info\030\006 \001(" +
-      "\0132C.org.apache.hadoop.hive.metastore.hba" +
-      "se.StorageDescriptor.SerDeInfo\022\023\n\013bucket" +
-      "_cols\030\007 \003(\t\022R\n\tsort_cols\030\010 \003(\0132?.org.apa" +
-      "che.hadoop.hive.metastore.hbase.StorageD",
-      "escriptor.Order\022Y\n\013skewed_info\030\t \001(\0132D.o" +
-      "rg.apache.hadoop.hive.metastore.hbase.St" +
-      "orageDescriptor.SkewedInfo\022!\n\031stored_as_" +
-      "sub_directories\030\n \001(\010\032.\n\005Order\022\023\n\013column" +
-      "_name\030\001 \002(\t\022\020\n\005order\030\002 \001(\021:\0011\032|\n\tSerDeIn" +
-      "fo\022\014\n\004name\030\001 \001(\t\022\031\n\021serialization_lib\030\002 " +
-      "\001(\t\022F\n\nparameters\030\003 \001(\01322.org.apache.had" +
-      "oop.hive.metastore.hbase.Parameters\032\214\003\n\n" +
-      "SkewedInfo\022\030\n\020skewed_col_names\030\001 \003(\t\022r\n\021" +
-      "skewed_col_values\030\002 \003(\0132W.org.apache.had",
-      "oop.hive.metastore.hbase.StorageDescript" +
-      "or.SkewedInfo.SkewedColValueList\022\206\001\n\036ske" +
-      "wed_col_value_location_maps\030\003 \003(\0132^.org." +
-      "apache.hadoop.hive.metastore.hbase.Stora" +
-      "geDescriptor.SkewedInfo.SkewedColValueLo" +
-      "cationMap\032.\n\022SkewedColValueList\022\030\n\020skewe" +
-      "d_col_value\030\001 \003(\t\0327\n\031SkewedColValueLocat" +
-      "ionMap\022\013\n\003key\030\001 \003(\t\022\r\n\005value\030\002 \002(\t\"\220\004\n\005T" +
-      "able\022\r\n\005owner\030\001 \001(\t\022\023\n\013create_time\030\002 \001(\003" +
-      "\022\030\n\020last_access_time\030\003 \001(\003\022\021\n\tretention\030",
-      "\004 \001(\003\022\020\n\010location\030\005 \001(\t\022I\n\rsd_parameters" +
-      "\030\006 \001(\01322.org.apache.hadoop.hive.metastor" +
-      "e.hbase.Parameters\022\017\n\007sd_hash\030\007 \002(\014\022K\n\016p" +
-      "artition_keys\030\010 \003(\01323.org.apache.hadoop." +
-      "hive.metastore.hbase.FieldSchema\022F\n\npara" +
-      "meters\030\t \001(\01322.org.apache.hadoop.hive.me" +
-      "tastore.hbase.Parameters\022\032\n\022view_origina" +
-      "l_text\030\n \001(\t\022\032\n\022view_expanded_text\030\013 \001(\t" +
-      "\022\022\n\ntable_type\030\014 \001(\t\022Q\n\nprivileges\030\r \001(\013" +
-      "2=.org.apache.hadoop.hive.metastore.hbas",
-      "e.PrincipalPrivilegeSet\022\024\n\014is_temporary\030" +
-      "\016 \001(\010\"\353\004\n\026PartitionKeyComparator\022\r\n\005name" +
-      "s\030\001 \002(\t\022\r\n\005types\030\002 \002(\t\022S\n\002op\030\003 \003(\0132G.org" +
-      ".apache.hadoop.hive.metastore.hbase.Part" +
-      "itionKeyComparator.Operator\022S\n\005range\030\004 \003" +
-      "(\0132D.org.apache.hadoop.hive.metastore.hb" +
-      "ase.PartitionKeyComparator.Range\032(\n\004Mark" +
-      "\022\r\n\005value\030\001 \002(\t\022\021\n\tinclusive\030\002 \002(\010\032\272\001\n\005R" +
-      "ange\022\013\n\003key\030\001 \002(\t\022R\n\005start\030\002 \001(\0132C.org.a" +
-      "pache.hadoop.hive.metastore.hbase.Partit",
-      "ionKeyComparator.Mark\022P\n\003end\030\003 \001(\0132C.org" +
-      ".apache.hadoop.hive.metastore.hbase.Part" +
-      "itionKeyComparator.Mark\032\241\001\n\010Operator\022Z\n\004" +
-      "type\030\001 \002(\0162L.org.apache.hadoop.hive.meta" +
-      "store.hbase.PartitionKeyComparator.Opera" +
-      "tor.Type\022\013\n\003key\030\002 \002(\t\022\013\n\003val\030\003 \002(\t\"\037\n\004Ty" +
-      "pe\022\010\n\004LIKE\020\000\022\r\n\tNOTEQUALS\020\001*#\n\rPrincipal" +
-      "Type\022\010\n\004USER\020\000\022\010\n\004ROLE\020\001"
+      "\032\254\001\n\013ResourceUri\022`\n\rresource_type\030\001 \002(\0162" +
+      "I.org.apache.hadoop.hive.metastore.hbase" +
+      ".Function.ResourceUri.ResourceType\022\013\n\003ur" +
+      "i\030\002 \002(\t\".\n\014ResourceType\022\007\n\003JAR\020\001\022\010\n\004FILE" +
+      "\020\002\022\013\n\007ARCHIVE\020\003\"\030\n\014FunctionType\022\010\n\004JAVA\020" +
+      "\001\"\037\n\tMasterKey\022\022\n\nmaster_key\030\001 \002(\t\",\n\016Pa" +
+      "rameterEntry\022\013\n\003key\030\001 \002(\t\022\r\n\005value\030\002 \002(\t",
+      "\"W\n\nParameters\022I\n\tparameter\030\001 \003(\01326.org." +
+      "apache.hadoop.hive.metastore.hbase.Param" +
+      "eterEntry\"\360\001\n\tPartition\022\023\n\013create_time\030\001" +
+      " \001(\003\022\030\n\020last_access_time\030\002 \001(\003\022\020\n\010locati" +
+      "on\030\003 \001(\t\022I\n\rsd_parameters\030\004 \001(\01322.org.ap" +
+      "ache.hadoop.hive.metastore.hbase.Paramet" +
+      "ers\022\017\n\007sd_hash\030\005 \002(\014\022F\n\nparameters\030\006 \001(\013" +
+      "22.org.apache.hadoop.hive.metastore.hbas" +
+      "e.Parameters\"\204\001\n\032PrincipalPrivilegeSetEn" +
+      "try\022\026\n\016principal_name\030\001 \002(\t\022N\n\nprivilege",
+      "s\030\002 \003(\0132:.org.apache.hadoop.hive.metasto" +
+      "re.hbase.PrivilegeGrantInfo\"\275\001\n\025Principa" +
+      "lPrivilegeSet\022Q\n\005users\030\001 \003(\0132B.org.apach" +
+      "e.hadoop.hive.metastore.hbase.PrincipalP" +
+      "rivilegeSetEntry\022Q\n\005roles\030\002 \003(\0132B.org.ap" +
+      "ache.hadoop.hive.metastore.hbase.Princip" +
+      "alPrivilegeSetEntry\"\260\001\n\022PrivilegeGrantIn" +
+      "fo\022\021\n\tprivilege\030\001 \001(\t\022\023\n\013create_time\030\002 \001" +
+      "(\003\022\017\n\007grantor\030\003 \001(\t\022K\n\014grantor_type\030\004 \001(" +
+      "\01625.org.apache.hadoop.hive.metastore.hba",
+      "se.PrincipalType\022\024\n\014grant_option\030\005 \001(\010\"\374" +
+      "\001\n\rRoleGrantInfo\022\026\n\016principal_name\030\001 \002(\t" +
+      "\022M\n\016principal_type\030\002 \002(\01625.org.apache.ha" +
+      "doop.hive.metastore.hbase.PrincipalType\022" +
+      "\020\n\010add_time\030\003 \001(\003\022\017\n\007grantor\030\004 \001(\t\022K\n\014gr" +
+      "antor_type\030\005 \001(\01625.org.apache.hadoop.hiv" +
+      "e.metastore.hbase.PrincipalType\022\024\n\014grant" +
+      "_option\030\006 \001(\010\"^\n\021RoleGrantInfoList\022I\n\ngr" +
+      "ant_info\030\001 \003(\01325.org.apache.hadoop.hive." +
+      "metastore.hbase.RoleGrantInfo\"\030\n\010RoleLis",
+      "t\022\014\n\004role\030\001 \003(\t\"/\n\004Role\022\023\n\013create_time\030\001" +
+      " \001(\003\022\022\n\nowner_name\030\002 \001(\t\"\254\010\n\021StorageDesc" +
+      "riptor\022A\n\004cols\030\001 \003(\01323.org.apache.hadoop" +
+      ".hive.metastore.hbase.FieldSchema\022\024\n\014inp" +
+      "ut_format\030\002 \001(\t\022\025\n\routput_format\030\003 \001(\t\022\025" +
+      "\n\ris_compressed\030\004 \001(\010\022\023\n\013num_buckets\030\005 \001" +
+      "(\021\022W\n\nserde_info\030\006 \001(\0132C.org.apache.hado" +
+      "op.hive.metastore.hbase.StorageDescripto" +
+      "r.SerDeInfo\022\023\n\013bucket_cols\030\007 \003(\t\022R\n\tsort" +
+      "_cols\030\010 \003(\0132?.org.apache.hadoop.hive.met",
+      "astore.hbase.StorageDescriptor.Order\022Y\n\013" +
+      "skewed_info\030\t \001(\0132D.org.apache.hadoop.hi" +
+      "ve.metastore.hbase.StorageDescriptor.Ske" +
+      "wedInfo\022!\n\031stored_as_sub_directories\030\n \001" +
+      "(\010\032.\n\005Order\022\023\n\013column_name\030\001 \002(\t\022\020\n\005orde" +
+      "r\030\002 \001(\021:\0011\032|\n\tSerDeInfo\022\014\n\004name\030\001 \001(\t\022\031\n" +
+      "\021serialization_lib\030\002 \001(\t\022F\n\nparameters\030\003" +
+      " \001(\01322.org.apache.hadoop.hive.metastore." +
+      "hbase.Parameters\032\214\003\n\nSkewedInfo\022\030\n\020skewe" +
+      "d_col_names\030\001 \003(\t\022r\n\021skewed_col_values\030\002",
+      " \003(\0132W.org.apache.hadoop.hive.metastore." +
+      "hbase.StorageDescriptor.SkewedInfo.Skewe" +
+      "dColValueList\022\206\001\n\036skewed_col_value_locat" +
+      "ion_maps\030\003 \003(\0132^.org.apache.hadoop.hive." +
+      "metastore.hbase.StorageDescriptor.Skewed" +
+      "Info.SkewedColValueLocationMap\032.\n\022Skewed" +
+      "ColValueList\022\030\n\020skewed_col_value\030\001 \003(\t\0327" +
+      "\n\031SkewedColValueLocationMap\022\013\n\003key\030\001 \003(\t" +
+      "\022\r\n\005value\030\002 \002(\t\"\220\004\n\005Table\022\r\n\005owner\030\001 \001(\t" +
+      "\022\023\n\013create_time\030\002 \001(\003\022\030\n\020last_access_tim",
+      "e\030\003 \001(\003\022\021\n\tretention\030\004 \001(\003\022\020\n\010location\030\005" +
+      " \001(\t\022I\n\rsd_parameters\030\006 \001(\01322.org.apache" +
+      ".hadoop.hive.metastore.hbase.Parameters\022" +
+      "\017\n\007sd_hash\030\007 \002(\014\022K\n\016partition_keys\030\010 \003(\013" +
+      "23.org.apache.hadoop.hive.metastore.hbas" +
+      "e.FieldSchema\022F\n\nparameters\030\t \001(\01322.org." +
+      "apache.hadoop.hive.metastore.hbase.Param" +
+      "eters\022\032\n\022view_original_text\030\n \001(\t\022\032\n\022vie" +
+      "w_expanded_text\030\013 \001(\t\022\022\n\ntable_type\030\014 \001(" +
+      "\t\022Q\n\nprivileges\030\r \001(\0132=.org.apache.hadoo",
+      "p.hive.metastore.hbase.PrincipalPrivileg" +
+      "eSet\022\024\n\014is_temporary\030\016 \001(\010\"\353\004\n\026Partition" +
+      "KeyComparator\022\r\n\005names\030\001 \002(\t\022\r\n\005types\030\002 " +
+      "\002(\t\022S\n\002op\030\003 \003(\0132G.org.apache.hadoop.hive" +
+      ".metastore.hbase.PartitionKeyComparator." +
+      "Operator\022S\n\005range\030\004 \003(\0132D.org.apache.had" +
+      "oop.hive.metastore.hbase.PartitionKeyCom" +
+      "parator.Range\032(\n\004Mark\022\r\n\005value\030\001 \002(\t\022\021\n\t" +
+      "inclusive\030\002 \002(\010\032\272\001\n\005Range\022\013\n\003key\030\001 \002(\t\022R" +
+      "\n\005start\030\002 \001(\0132C.org.apache.hadoop.hive.m",
+      "etastore.hbase.PartitionKeyComparator.Ma" +
+      "rk\022P\n\003end\030\003 \001(\0132C.org.apache.hadoop.hive" +
+      ".metastore.hbase.PartitionKeyComparator." +
+      "Mark\032\241\001\n\010Operator\022Z\n\004type\030\001 \002(\0162L.org.ap" +
+      "ache.hadoop.hive.metastore.hbase.Partiti" +
+      "onKeyComparator.Operator.Type\022\013\n\003key\030\002 \002" +
+      "(\t\022\013\n\003val\030\003 \002(\t\"\037\n\004Type\022\010\n\004LIKE\020\000\022\r\n\tNOT" +
+      "EQUALS\020\001*#\n\rPrincipalType\022\010\n\004USER\020\000\022\010\n\004R" +
+      "OLE\020\001"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
       new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -34689,7 +34846,7 @@ public final class HbaseMetastoreProto {
           internal_static_org_apache_hadoop_hive_metastore_hbase_ColumnStats_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_org_apache_hadoop_hive_metastore_hbase_ColumnStats_descriptor,
-              new java.lang.String[] { "LastAnalyzed", "ColumnType", "NumNulls", "NumDistinctValues", "BoolStats", "LongStats", "DoubleStats", "StringStats", "BinaryStats", "DecimalStats", "ColumnName", });
+              new java.lang.String[] { "LastAnalyzed", "ColumnType", "NumNulls", "NumDistinctValues", "BoolStats", "LongStats", "DoubleStats", "StringStats", "BinaryStats", "DecimalStats", "ColumnName", "BitVectors", });
           internal_static_org_apache_hadoop_hive_metastore_hbase_ColumnStats_BooleanStats_descriptor =
             internal_static_org_apache_hadoop_hive_metastore_hbase_ColumnStats_descriptor.getNestedTypes().get(0);
           internal_static_org_apache_hadoop_hive_metastore_hbase_ColumnStats_BooleanStats_fieldAccessorTable = new

http://git-wip-us.apache.org/repos/asf/hive/blob/7b2f6703/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.cpp
----------------------------------------------------------------------
diff --git a/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.cpp b/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.cpp
index 0203b06..81577b6 100644
--- a/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.cpp
+++ b/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.cpp
@@ -5425,6 +5425,11 @@ void BooleanColumnStatsData::__set_numNulls(const int64_t val) {
   this->numNulls = val;
 }
 
+void BooleanColumnStatsData::__set_bitVectors(const std::string& val) {
+  this->bitVectors = val;
+__isset.bitVectors = true;
+}
+
 uint32_t BooleanColumnStatsData::read(::apache::thrift::protocol::TProtocol* iprot) {
 
   apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
@@ -5473,6 +5478,14 @@ uint32_t BooleanColumnStatsData::read(::apache::thrift::protocol::TProtocol* ipr
           xfer += iprot->skip(ftype);
         }
         break;
+      case 4:
+        if (ftype == ::apache::thrift::protocol::T_STRING) {
+          xfer += iprot->readString(this->bitVectors);
+          this->__isset.bitVectors = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -5508,6 +5521,11 @@ uint32_t BooleanColumnStatsData::write(::apache::thrift::protocol::TProtocol* op
   xfer += oprot->writeI64(this->numNulls);
   xfer += oprot->writeFieldEnd();
 
+  if (this->__isset.bitVectors) {
+    xfer += oprot->writeFieldBegin("bitVectors", ::apache::thrift::protocol::T_STRING, 4);
+    xfer += oprot->writeString(this->bitVectors);
+    xfer += oprot->writeFieldEnd();
+  }
   xfer += oprot->writeFieldStop();
   xfer += oprot->writeStructEnd();
   return xfer;
@@ -5518,17 +5536,23 @@ void swap(BooleanColumnStatsData &a, BooleanColumnStatsData &b) {
   swap(a.numTrues, b.numTrues);
   swap(a.numFalses, b.numFalses);
   swap(a.numNulls, b.numNulls);
+  swap(a.bitVectors, b.bitVectors);
+  swap(a.__isset, b.__isset);
 }
 
 BooleanColumnStatsData::BooleanColumnStatsData(const BooleanColumnStatsData& other279) {
   numTrues = other279.numTrues;
   numFalses = other279.numFalses;
   numNulls = other279.numNulls;
+  bitVectors = other279.bitVectors;
+  __isset = other279.__isset;
 }
 BooleanColumnStatsData& BooleanColumnStatsData::operator=(const BooleanColumnStatsData& other280) {
   numTrues = other280.numTrues;
   numFalses = other280.numFalses;
   numNulls = other280.numNulls;
+  bitVectors = other280.bitVectors;
+  __isset = other280.__isset;
   return *this;
 }
 void BooleanColumnStatsData::printTo(std::ostream& out) const {
@@ -5537,6 +5561,7 @@ void BooleanColumnStatsData::printTo(std::ostream& out) const {
   out << "numTrues=" << to_string(numTrues);
   out << ", " << "numFalses=" << to_string(numFalses);
   out << ", " << "numNulls=" << to_string(numNulls);
+  out << ", " << "bitVectors="; (__isset.bitVectors ? (out << to_string(bitVectors)) : (out << "<null>"));
   out << ")";
 }
 
@@ -5563,6 +5588,11 @@ void DoubleColumnStatsData::__set_numDVs(const int64_t val) {
   this->numDVs = val;
 }
 
+void DoubleColumnStatsData::__set_bitVectors(const std::string& val) {
+  this->bitVectors = val;
+__isset.bitVectors = true;
+}
+
 uint32_t DoubleColumnStatsData::read(::apache::thrift::protocol::TProtocol* iprot) {
 
   apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
@@ -5618,6 +5648,14 @@ uint32_t DoubleColumnStatsData::read(::apache::thrift::protocol::TProtocol* ipro
           xfer += iprot->skip(ftype);
         }
         break;
+      case 5:
+        if (ftype == ::apache::thrift::protocol::T_STRING) {
+          xfer += iprot->readString(this->bitVectors);
+          this->__isset.bitVectors = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -5657,6 +5695,11 @@ uint32_t DoubleColumnStatsData::write(::apache::thrift::protocol::TProtocol* opr
   xfer += oprot->writeI64(this->numDVs);
   xfer += oprot->writeFieldEnd();
 
+  if (this->__isset.bitVectors) {
+    xfer += oprot->writeFieldBegin("bitVectors", ::apache::thrift::protocol::T_STRING, 5);
+    xfer += oprot->writeString(this->bitVectors);
+    xfer += oprot->writeFieldEnd();
+  }
   xfer += oprot->writeFieldStop();
   xfer += oprot->writeStructEnd();
   return xfer;
@@ -5668,6 +5711,7 @@ void swap(DoubleColumnStatsData &a, DoubleColumnStatsData &b) {
   swap(a.highValue, b.highValue);
   swap(a.numNulls, b.numNulls);
   swap(a.numDVs, b.numDVs);
+  swap(a.bitVectors, b.bitVectors);
   swap(a.__isset, b.__isset);
 }
 
@@ -5676,6 +5720,7 @@ DoubleColumnStatsData::DoubleColumnStatsData(const DoubleColumnStatsData& other2
   highValue = other281.highValue;
   numNulls = other281.numNulls;
   numDVs = other281.numDVs;
+  bitVectors = other281.bitVectors;
   __isset = other281.__isset;
 }
 DoubleColumnStatsData& DoubleColumnStatsData::operator=(const DoubleColumnStatsData& other282) {
@@ -5683,6 +5728,7 @@ DoubleColumnStatsData& DoubleColumnStatsData::operator=(const DoubleColumnStatsD
   highValue = other282.highValue;
   numNulls = other282.numNulls;
   numDVs = other282.numDVs;
+  bitVectors = other282.bitVectors;
   __isset = other282.__isset;
   return *this;
 }
@@ -5693,6 +5739,7 @@ void DoubleColumnStatsData::printTo(std::ostream& out) const {
   out << ", " << "highValue="; (__isset.highValue ? (out << to_string(highValue)) : (out << "<null>"));
   out << ", " << "numNulls=" << to_string(numNulls);
   out << ", " << "numDVs=" << to_string(numDVs);
+  out << ", " << "bitVectors="; (__isset.bitVectors ? (out << to_string(bitVectors)) : (out << "<null>"));
   out << ")";
 }
 
@@ -5719,6 +5766,11 @@ void LongColumnStatsData::__set_numDVs(const int64_t val) {
   this->numDVs = val;
 }
 
+void LongColumnStatsData::__set_bitVectors(const std::string& val) {
+  this->bitVectors = val;
+__isset.bitVectors = true;
+}
+
 uint32_t LongColumnStatsData::read(::apache::thrift::protocol::TProtocol* iprot) {
 
   apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
@@ -5774,6 +5826,14 @@ uint32_t LongColumnStatsData::read(::apache::thrift::protocol::TProtocol* iprot)
           xfer += iprot->skip(ftype);
         }
         break;
+      case 5:
+        if (ftype == ::apache::thrift::protocol::T_STRING) {
+          xfer += iprot->readString(this->bitVectors);
+          this->__isset.bitVectors = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -5813,6 +5873,11 @@ uint32_t LongColumnStatsData::write(::apache::thrift::protocol::TProtocol* oprot
   xfer += oprot->writeI64(this->numDVs);
   xfer += oprot->writeFieldEnd();
 
+  if (this->__isset.bitVectors) {
+    xfer += oprot->writeFieldBegin("bitVectors", ::apache::thrift::protocol::T_STRING, 5);
+    xfer += oprot->writeString(this->bitVectors);
+    xfer += oprot->writeFieldEnd();
+  }
   xfer += oprot->writeFieldStop();
   xfer += oprot->writeStructEnd();
   return xfer;
@@ -5824,6 +5889,7 @@ void swap(LongColumnStatsData &a, LongColumnStatsData &b) {
   swap(a.highValue, b.highValue);
   swap(a.numNulls, b.numNulls);
   swap(a.numDVs, b.numDVs);
+  swap(a.bitVectors, b.bitVectors);
   swap(a.__isset, b.__isset);
 }
 
@@ -5832,6 +5898,7 @@ LongColumnStatsData::LongColumnStatsData(const LongColumnStatsData& other283) {
   highValue = other283.highValue;
   numNulls = other283.numNulls;
   numDVs = other283.numDVs;
+  bitVectors = other283.bitVectors;
   __isset = other283.__isset;
 }
 LongColumnStatsData& LongColumnStatsData::operator=(const LongColumnStatsData& other284) {
@@ -5839,6 +5906,7 @@ LongColumnStatsData& LongColumnStatsData::operator=(const LongColumnStatsData& o
   highValue = other284.highValue;
   numNulls = other284.numNulls;
   numDVs = other284.numDVs;
+  bitVectors = other284.bitVectors;
   __isset = other284.__isset;
   return *this;
 }
@@ -5849,6 +5917,7 @@ void LongColumnStatsData::printTo(std::ostream& out) const {
   out << ", " << "highValue="; (__isset.highValue ? (out << to_string(highValue)) : (out << "<null>"));
   out << ", " << "numNulls=" << to_string(numNulls);
   out << ", " << "numDVs=" << to_string(numDVs);
+  out << ", " << "bitVectors="; (__isset.bitVectors ? (out << to_string(bitVectors)) : (out << "<null>"));
   out << ")";
 }
 
@@ -5873,6 +5942,11 @@ void StringColumnStatsData::__set_numDVs(const int64_t val) {
   this->numDVs = val;
 }
 
+void StringColumnStatsData::__set_bitVectors(const std::string& val) {
+  this->bitVectors = val;
+__isset.bitVectors = true;
+}
+
 uint32_t StringColumnStatsData::read(::apache::thrift::protocol::TProtocol* iprot) {
 
   apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
@@ -5930,6 +6004,14 @@ uint32_t StringColumnStatsData::read(::apache::thrift::protocol::TProtocol* ipro
           xfer += iprot->skip(ftype);
         }
         break;
+      case 5:
+        if (ftype == ::apache::thrift::protocol::T_STRING) {
+          xfer += iprot->readString(this->bitVectors);
+          this->__isset.bitVectors = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -5971,6 +6053,11 @@ uint32_t StringColumnStatsData::write(::apache::thrift::protocol::TProtocol* opr
   xfer += oprot->writeI64(this->numDVs);
   xfer += oprot->writeFieldEnd();
 
+  if (this->__isset.bitVectors) {
+    xfer += oprot->writeFieldBegin("bitVectors", ::apache::thrift::protocol::T_STRING, 5);
+    xfer += oprot->writeString(this->bitVectors);
+    xfer += oprot->writeFieldEnd();
+  }
   xfer += oprot->writeFieldStop();
   xfer += oprot->writeStructEnd();
   return xfer;
@@ -5982,6 +6069,8 @@ void swap(StringColumnStatsData &a, StringColumnStatsData &b) {
   swap(a.avgColLen, b.avgColLen);
   swap(a.numNulls, b.numNulls);
   swap(a.numDVs, b.numDVs);
+  swap(a.bitVectors, b.bitVectors);
+  swap(a.__isset, b.__isset);
 }
 
 StringColumnStatsData::StringColumnStatsData(const StringColumnStatsData& other285) {
@@ -5989,12 +6078,16 @@ StringColumnStatsData::StringColumnStatsData(const StringColumnStatsData& other2
   avgColLen = other285.avgColLen;
   numNulls = other285.numNulls;
   numDVs = other285.numDVs;
+  bitVectors = other285.bitVectors;
+  __isset = other285.__isset;
 }
 StringColumnStatsData& StringColumnStatsData::operator=(const StringColumnStatsData& other286) {
   maxColLen = other286.maxColLen;
   avgColLen = other286.avgColLen;
   numNulls = other286.numNulls;
   numDVs = other286.numDVs;
+  bitVectors = other286.bitVectors;
+  __isset = other286.__isset;
   return *this;
 }
 void StringColumnStatsData::printTo(std::ostream& out) const {
@@ -6004,6 +6097,7 @@ void StringColumnStatsData::printTo(std::ostream& out) const {
   out << ", " << "avgColLen=" << to_string(avgColLen);
   out << ", " << "numNulls=" << to_string(numNulls);
   out << ", " << "numDVs=" << to_string(numDVs);
+  out << ", " << "bitVectors="; (__isset.bitVectors ? (out << to_string(bitVectors)) : (out << "<null>"));
   out << ")";
 }
 
@@ -6024,6 +6118,11 @@ void BinaryColumnStatsData::__set_numNulls(const int64_t val) {
   this->numNulls = val;
 }
 
+void BinaryColumnStatsData::__set_bitVectors(const std::string& val) {
+  this->bitVectors = val;
+__isset.bitVectors = true;
+}
+
 uint32_t BinaryColumnStatsData::read(::apache::thrift::protocol::TProtocol* iprot) {
 
   apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
@@ -6072,6 +6171,14 @@ uint32_t BinaryColumnStatsData::read(::apache::thrift::protocol::TProtocol* ipro
           xfer += iprot->skip(ftype);
         }
         break;
+      case 4:
+        if (ftype == ::apache::thrift::protocol::T_STRING) {
+          xfer += iprot->readString(this->bitVectors);
+          this->__isset.bitVectors = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -6107,6 +6214,11 @@ uint32_t BinaryColumnStatsData::write(::apache::thrift::protocol::TProtocol* opr
   xfer += oprot->writeI64(this->numNulls);
   xfer += oprot->writeFieldEnd();
 
+  if (this->__isset.bitVectors) {
+    xfer += oprot->writeFieldBegin("bitVectors", ::apache::thrift::protocol::T_STRING, 4);
+    xfer += oprot->writeString(this->bitVectors);
+    xfer += oprot->writeFieldEnd();
+  }
   xfer += oprot->writeFieldStop();
   xfer += oprot->writeStructEnd();
   return xfer;
@@ -6117,17 +6229,23 @@ void swap(BinaryColumnStatsData &a, BinaryColumnStatsData &b) {
   swap(a.maxColLen, b.maxColLen);
   swap(a.avgColLen, b.avgColLen);
   swap(a.numNulls, b.numNulls);
+  swap(a.bitVectors, b.bitVectors);
+  swap(a.__isset, b.__isset);
 }
 
 BinaryColumnStatsData::BinaryColumnStatsData(const BinaryColumnStatsData& other287) {
   maxColLen = other287.maxColLen;
   avgColLen = other287.avgColLen;
   numNulls = other287.numNulls;
+  bitVectors = other287.bitVectors;
+  __isset = other287.__isset;
 }
 BinaryColumnStatsData& BinaryColumnStatsData::operator=(const BinaryColumnStatsData& other288) {
   maxColLen = other288.maxColLen;
   avgColLen = other288.avgColLen;
   numNulls = other288.numNulls;
+  bitVectors = other288.bitVectors;
+  __isset = other288.__isset;
   return *this;
 }
 void BinaryColumnStatsData::printTo(std::ostream& out) const {
@@ -6136,6 +6254,7 @@ void BinaryColumnStatsData::printTo(std::ostream& out) const {
   out << "maxColLen=" << to_string(maxColLen);
   out << ", " << "avgColLen=" << to_string(avgColLen);
   out << ", " << "numNulls=" << to_string(numNulls);
+  out << ", " << "bitVectors="; (__isset.bitVectors ? (out << to_string(bitVectors)) : (out << "<null>"));
   out << ")";
 }
 
@@ -6271,6 +6390,11 @@ void DecimalColumnStatsData::__set_numDVs(const int64_t val) {
   this->numDVs = val;
 }
 
+void DecimalColumnStatsData::__set_bitVectors(const std::string& val) {
+  this->bitVectors = val;
+__isset.bitVectors = true;
+}
+
 uint32_t DecimalColumnStatsData::read(::apache::thrift::protocol::TProtocol* iprot) {
 
   apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
@@ -6326,6 +6450,14 @@ uint32_t DecimalColumnStatsData::read(::apache::thrift::protocol::TProtocol* ipr
           xfer += iprot->skip(ftype);
         }
         break;
+      case 5:
+        if (ftype == ::apache::thrift::protocol::T_STRING) {
+          xfer += iprot->readString(this->bitVectors);
+          this->__isset.bitVectors = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -6365,6 +6497,11 @@ uint32_t DecimalColumnStatsData::write(::apache::thrift::protocol::TProtocol* op
   xfer += oprot->writeI64(this->numDVs);
   xfer += oprot->writeFieldEnd();
 
+  if (this->__isset.bitVectors) {
+    xfer += oprot->writeFieldBegin("bitVectors", ::apache::thrift::protocol::T_STRING, 5);
+    xfer += oprot->writeString(this->bitVectors);
+    xfer += oprot->writeFieldEnd();
+  }
   xfer += oprot->writeFieldStop();
   xfer += oprot->writeStructEnd();
   return xfer;
@@ -6376,6 +6513,7 @@ void swap(DecimalColumnStatsData &a, DecimalColumnStatsData &b) {
   swap(a.highValue, b.highValue);
   swap(a.numNulls, b.numNulls);
   swap(a.numDVs, b.numDVs);
+  swap(a.bitVectors, b.bitVectors);
   swap(a.__isset, b.__isset);
 }
 
@@ -6384,6 +6522,7 @@ DecimalColumnStatsData::DecimalColumnStatsData(const DecimalColumnStatsData& oth
   highValue = other291.highValue;
   numNulls = other291.numNulls;
   numDVs = other291.numDVs;
+  bitVectors = other291.bitVectors;
   __isset = other291.__isset;
 }
 DecimalColumnStatsData& DecimalColumnStatsData::operator=(const DecimalColumnStatsData& other292) {
@@ -6391,6 +6530,7 @@ DecimalColumnStatsData& DecimalColumnStatsData::operator=(const DecimalColumnSta
   highValue = other292.highValue;
   numNulls = other292.numNulls;
   numDVs = other292.numDVs;
+  bitVectors = other292.bitVectors;
   __isset = other292.__isset;
   return *this;
 }
@@ -6401,6 +6541,7 @@ void DecimalColumnStatsData::printTo(std::ostream& out) const {
   out << ", " << "highValue="; (__isset.highValue ? (out << to_string(highValue)) : (out << "<null>"));
   out << ", " << "numNulls=" << to_string(numNulls);
   out << ", " << "numDVs=" << to_string(numDVs);
+  out << ", " << "bitVectors="; (__isset.bitVectors ? (out << to_string(bitVectors)) : (out << "<null>"));
   out << ")";
 }
 
@@ -6513,6 +6654,11 @@ void DateColumnStatsData::__set_numDVs(const int64_t val) {
   this->numDVs = val;
 }
 
+void DateColumnStatsData::__set_bitVectors(const std::string& val) {
+  this->bitVectors = val;
+__isset.bitVectors = true;
+}
+
 uint32_t DateColumnStatsData::read(::apache::thrift::protocol::TProtocol* iprot) {
 
   apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
@@ -6568,6 +6714,14 @@ uint32_t DateColumnStatsData::read(::apache::thrift::protocol::TProtocol* iprot)
           xfer += iprot->skip(ftype);
         }
         break;
+      case 5:
+        if (ftype == ::apache::thrift::protocol::T_STRING) {
+          xfer += iprot->readString(this->bitVectors);
+          this->__isset.bitVectors = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -6607,6 +6761,11 @@ uint32_t DateColumnStatsData::write(::apache::thrift::protocol::TProtocol* oprot
   xfer += oprot->writeI64(this->numDVs);
   xfer += oprot->writeFieldEnd();
 
+  if (this->__isset.bitVectors) {
+    xfer += oprot->writeFieldBegin("bitVectors", ::apache::thrift::protocol::T_STRING, 5);
+    xfer += oprot->writeString(this->bitVectors);
+    xfer += oprot->writeFieldEnd();
+  }
   xfer += oprot->writeFieldStop();
   xfer += oprot->writeStructEnd();
   return xfer;
@@ -6618,6 +6777,7 @@ void swap(DateColumnStatsData &a, DateColumnStatsData &b) {
   swap(a.highValue, b.highValue);
   swap(a.numNulls, b.numNulls);
   swap(a.numDVs, b.numDVs);
+  swap(a.bitVectors, b.bitVectors);
   swap(a.__isset, b.__isset);
 }
 
@@ -6626,6 +6786,7 @@ DateColumnStatsData::DateColumnStatsData(const DateColumnStatsData& other295) {
   highValue = other295.highValue;
   numNulls = other295.numNulls;
   numDVs = other295.numDVs;
+  bitVectors = other295.bitVectors;
   __isset = other295.__isset;
 }
 DateColumnStatsData& DateColumnStatsData::operator=(const DateColumnStatsData& other296) {
@@ -6633,6 +6794,7 @@ DateColumnStatsData& DateColumnStatsData::operator=(const DateColumnStatsData& o
   highValue = other296.highValue;
   numNulls = other296.numNulls;
   numDVs = other296.numDVs;
+  bitVectors = other296.bitVectors;
   __isset = other296.__isset;
   return *this;
 }
@@ -6643,6 +6805,7 @@ void DateColumnStatsData::printTo(std::ostream& out) const {
   out << ", " << "highValue="; (__isset.highValue ? (out << to_string(highValue)) : (out << "<null>"));
   out << ", " << "numNulls=" << to_string(numNulls);
   out << ", " << "numDVs=" << to_string(numDVs);
+  out << ", " << "bitVectors="; (__isset.bitVectors ? (out << to_string(bitVectors)) : (out << "<null>"));
   out << ")";
 }
 

http://git-wip-us.apache.org/repos/asf/hive/blob/7b2f6703/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.h
----------------------------------------------------------------------
diff --git a/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.h b/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.h
index ce1d7da..c501ac0 100644
--- a/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.h
+++ b/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.h
@@ -2364,19 +2364,26 @@ inline std::ostream& operator<<(std::ostream& out, const Index& obj)
   return out;
 }
 
+typedef struct _BooleanColumnStatsData__isset {
+  _BooleanColumnStatsData__isset() : bitVectors(false) {}
+  bool bitVectors :1;
+} _BooleanColumnStatsData__isset;
 
 class BooleanColumnStatsData {
  public:
 
   BooleanColumnStatsData(const BooleanColumnStatsData&);
   BooleanColumnStatsData& operator=(const BooleanColumnStatsData&);
-  BooleanColumnStatsData() : numTrues(0), numFalses(0), numNulls(0) {
+  BooleanColumnStatsData() : numTrues(0), numFalses(0), numNulls(0), bitVectors() {
   }
 
   virtual ~BooleanColumnStatsData() throw();
   int64_t numTrues;
   int64_t numFalses;
   int64_t numNulls;
+  std::string bitVectors;
+
+  _BooleanColumnStatsData__isset __isset;
 
   void __set_numTrues(const int64_t val);
 
@@ -2384,6 +2391,8 @@ class BooleanColumnStatsData {
 
   void __set_numNulls(const int64_t val);
 
+  void __set_bitVectors(const std::string& val);
+
   bool operator == (const BooleanColumnStatsData & rhs) const
   {
     if (!(numTrues == rhs.numTrues))
@@ -2392,6 +2401,10 @@ class BooleanColumnStatsData {
       return false;
     if (!(numNulls == rhs.numNulls))
       return false;
+    if (__isset.bitVectors != rhs.__isset.bitVectors)
+      return false;
+    else if (__isset.bitVectors && !(bitVectors == rhs.bitVectors))
+      return false;
     return true;
   }
   bool operator != (const BooleanColumnStatsData &rhs) const {
@@ -2415,9 +2428,10 @@ inline std::ostream& operator<<(std::ostream& out, const BooleanColumnStatsData&
 }
 
 typedef struct _DoubleColumnStatsData__isset {
-  _DoubleColumnStatsData__isset() : lowValue(false), highValue(false) {}
+  _DoubleColumnStatsData__isset() : lowValue(false), highValue(false), bitVectors(false) {}
   bool lowValue :1;
   bool highValue :1;
+  bool bitVectors :1;
 } _DoubleColumnStatsData__isset;
 
 class DoubleColumnStatsData {
@@ -2425,7 +2439,7 @@ class DoubleColumnStatsData {
 
   DoubleColumnStatsData(const DoubleColumnStatsData&);
   DoubleColumnStatsData& operator=(const DoubleColumnStatsData&);
-  DoubleColumnStatsData() : lowValue(0), highValue(0), numNulls(0), numDVs(0) {
+  DoubleColumnStatsData() : lowValue(0), highValue(0), numNulls(0), numDVs(0), bitVectors() {
   }
 
   virtual ~DoubleColumnStatsData() throw();
@@ -2433,6 +2447,7 @@ class DoubleColumnStatsData {
   double highValue;
   int64_t numNulls;
   int64_t numDVs;
+  std::string bitVectors;
 
   _DoubleColumnStatsData__isset __isset;
 
@@ -2444,6 +2459,8 @@ class DoubleColumnStatsData {
 
   void __set_numDVs(const int64_t val);
 
+  void __set_bitVectors(const std::string& val);
+
   bool operator == (const DoubleColumnStatsData & rhs) const
   {
     if (__isset.lowValue != rhs.__isset.lowValue)
@@ -2458,6 +2475,10 @@ class DoubleColumnStatsData {
       return false;
     if (!(numDVs == rhs.numDVs))
       return false;
+    if (__isset.bitVectors != rhs.__isset.bitVectors)
+      return false;
+    else if (__isset.bitVectors && !(bitVectors == rhs.bitVectors))
+      return false;
     return true;
   }
   bool operator != (const DoubleColumnStatsData &rhs) const {
@@ -2481,9 +2502,10 @@ inline std::ostream& operator<<(std::ostream& out, const DoubleColumnStatsData&
 }
 
 typedef struct _LongColumnStatsData__isset {
-  _LongColumnStatsData__isset() : lowValue(false), highValue(false) {}
+  _LongColumnStatsData__isset() : lowValue(false), highValue(false), bitVectors(false) {}
   bool lowValue :1;
   bool highValue :1;
+  bool bitVectors :1;
 } _LongColumnStatsData__isset;
 
 class LongColumnStatsData {
@@ -2491,7 +2513,7 @@ class LongColumnStatsData {
 
   LongColumnStatsData(const LongColumnStatsData&);
   LongColumnStatsData& operator=(const LongColumnStatsData&);
-  LongColumnStatsData() : lowValue(0), highValue(0), numNulls(0), numDVs(0) {
+  LongColumnStatsData() : lowValue(0), highValue(0), numNulls(0), numDVs(0), bitVectors() {
   }
 
   virtual ~LongColumnStatsData() throw();
@@ -2499,6 +2521,7 @@ class LongColumnStatsData {
   int64_t highValue;
   int64_t numNulls;
   int64_t numDVs;
+  std::string bitVectors;
 
   _LongColumnStatsData__isset __isset;
 
@@ -2510,6 +2533,8 @@ class LongColumnStatsData {
 
   void __set_numDVs(const int64_t val);
 
+  void __set_bitVectors(const std::string& val);
+
   bool operator == (const LongColumnStatsData & rhs) const
   {
     if (__isset.lowValue != rhs.__isset.lowValue)
@@ -2524,6 +2549,10 @@ class LongColumnStatsData {
       return false;
     if (!(numDVs == rhs.numDVs))
       return false;
+    if (__isset.bitVectors != rhs.__isset.bitVectors)
+      return false;
+    else if (__isset.bitVectors && !(bitVectors == rhs.bitVectors))
+      return false;
     return true;
   }
   bool operator != (const LongColumnStatsData &rhs) const {
@@ -2546,13 +2575,17 @@ inline std::ostream& operator<<(std::ostream& out, const LongColumnStatsData& ob
   return out;
 }
 
+typedef struct _StringColumnStatsData__isset {
+  _StringColumnStatsData__isset() : bitVectors(false) {}
+  bool bitVectors :1;
+} _StringColumnStatsData__isset;
 
 class StringColumnStatsData {
  public:
 
   StringColumnStatsData(const StringColumnStatsData&);
   StringColumnStatsData& operator=(const StringColumnStatsData&);
-  StringColumnStatsData() : maxColLen(0), avgColLen(0), numNulls(0), numDVs(0) {
+  StringColumnStatsData() : maxColLen(0), avgColLen(0), numNulls(0), numDVs(0), bitVectors() {
   }
 
   virtual ~StringColumnStatsData() throw();
@@ -2560,6 +2593,9 @@ class StringColumnStatsData {
   double avgColLen;
   int64_t numNulls;
   int64_t numDVs;
+  std::string bitVectors;
+
+  _StringColumnStatsData__isset __isset;
 
   void __set_maxColLen(const int64_t val);
 
@@ -2569,6 +2605,8 @@ class StringColumnStatsData {
 
   void __set_numDVs(const int64_t val);
 
+  void __set_bitVectors(const std::string& val);
+
   bool operator == (const StringColumnStatsData & rhs) const
   {
     if (!(maxColLen == rhs.maxColLen))
@@ -2579,6 +2617,10 @@ class StringColumnStatsData {
       return false;
     if (!(numDVs == rhs.numDVs))
       return false;
+    if (__isset.bitVectors != rhs.__isset.bitVectors)
+      return false;
+    else if (__isset.bitVectors && !(bitVectors == rhs.bitVectors))
+      return false;
     return true;
   }
   bool operator != (const StringColumnStatsData &rhs) const {
@@ -2601,19 +2643,26 @@ inline std::ostream& operator<<(std::ostream& out, const StringColumnStatsData&
   return out;
 }
 
+typedef struct _BinaryColumnStatsData__isset {
+  _BinaryColumnStatsData__isset() : bitVectors(false) {}
+  bool bitVectors :1;
+} _BinaryColumnStatsData__isset;
 
 class BinaryColumnStatsData {
  public:
 
   BinaryColumnStatsData(const BinaryColumnStatsData&);
   BinaryColumnStatsData& operator=(const BinaryColumnStatsData&);
-  BinaryColumnStatsData() : maxColLen(0), avgColLen(0), numNulls(0) {
+  BinaryColumnStatsData() : maxColLen(0), avgColLen(0), numNulls(0), bitVectors() {
   }
 
   virtual ~BinaryColumnStatsData() throw();
   int64_t maxColLen;
   double avgColLen;
   int64_t numNulls;
+  std::string bitVectors;
+
+  _BinaryColumnStatsData__isset __isset;
 
   void __set_maxColLen(const int64_t val);
 
@@ -2621,6 +2670,8 @@ class BinaryColumnStatsData {
 
   void __set_numNulls(const int64_t val);
 
+  void __set_bitVectors(const std::string& val);
+
   bool operator == (const BinaryColumnStatsData & rhs) const
   {
     if (!(maxColLen == rhs.maxColLen))
@@ -2629,6 +2680,10 @@ class BinaryColumnStatsData {
       return false;
     if (!(numNulls == rhs.numNulls))
       return false;
+    if (__isset.bitVectors != rhs.__isset.bitVectors)
+      return false;
+    else if (__isset.bitVectors && !(bitVectors == rhs.bitVectors))
+      return false;
     return true;
   }
   bool operator != (const BinaryColumnStatsData &rhs) const {
@@ -2697,9 +2752,10 @@ inline std::ostream& operator<<(std::ostream& out, const Decimal& obj)
 }
 
 typedef struct _DecimalColumnStatsData__isset {
-  _DecimalColumnStatsData__isset() : lowValue(false), highValue(false) {}
+  _DecimalColumnStatsData__isset() : lowValue(false), highValue(false), bitVectors(false) {}
   bool lowValue :1;
   bool highValue :1;
+  bool bitVectors :1;
 } _DecimalColumnStatsData__isset;
 
 class DecimalColumnStatsData {
@@ -2707,7 +2763,7 @@ class DecimalColumnStatsData {
 
   DecimalColumnStatsData(const DecimalColumnStatsData&);
   DecimalColumnStatsData& operator=(const DecimalColumnStatsData&);
-  DecimalColumnStatsData() : numNulls(0), numDVs(0) {
+  DecimalColumnStatsData() : numNulls(0), numDVs(0), bitVectors() {
   }
 
   virtual ~DecimalColumnStatsData() throw();
@@ -2715,6 +2771,7 @@ class DecimalColumnStatsData {
   Decimal highValue;
   int64_t numNulls;
   int64_t numDVs;
+  std::string bitVectors;
 
   _DecimalColumnStatsData__isset __isset;
 
@@ -2726,6 +2783,8 @@ class DecimalColumnStatsData {
 
   void __set_numDVs(const int64_t val);
 
+  void __set_bitVectors(const std::string& val);
+
   bool operator == (const DecimalColumnStatsData & rhs) const
   {
     if (__isset.lowValue != rhs.__isset.lowValue)
@@ -2740,6 +2799,10 @@ class DecimalColumnStatsData {
       return false;
     if (!(numDVs == rhs.numDVs))
       return false;
+    if (__isset.bitVectors != rhs.__isset.bitVectors)
+      return false;
+    else if (__isset.bitVectors && !(bitVectors == rhs.bitVectors))
+      return false;
     return true;
   }
   bool operator != (const DecimalColumnStatsData &rhs) const {
@@ -2803,9 +2866,10 @@ inline std::ostream& operator<<(std::ostream& out, const Date& obj)
 }
 
 typedef struct _DateColumnStatsData__isset {
-  _DateColumnStatsData__isset() : lowValue(false), highValue(false) {}
+  _DateColumnStatsData__isset() : lowValue(false), highValue(false), bitVectors(false) {}
   bool lowValue :1;
   bool highValue :1;
+  bool bitVectors :1;
 } _DateColumnStatsData__isset;
 
 class DateColumnStatsData {
@@ -2813,7 +2877,7 @@ class DateColumnStatsData {
 
   DateColumnStatsData(const DateColumnStatsData&);
   DateColumnStatsData& operator=(const DateColumnStatsData&);
-  DateColumnStatsData() : numNulls(0), numDVs(0) {
+  DateColumnStatsData() : numNulls(0), numDVs(0), bitVectors() {
   }
 
   virtual ~DateColumnStatsData() throw();
@@ -2821,6 +2885,7 @@ class DateColumnStatsData {
   Date highValue;
   int64_t numNulls;
   int64_t numDVs;
+  std::string bitVectors;
 
   _DateColumnStatsData__isset __isset;
 
@@ -2832,6 +2897,8 @@ class DateColumnStatsData {
 
   void __set_numDVs(const int64_t val);
 
+  void __set_bitVectors(const std::string& val);
+
   bool operator == (const DateColumnStatsData & rhs) const
   {
     if (__isset.lowValue != rhs.__isset.lowValue)
@@ -2846,6 +2913,10 @@ class DateColumnStatsData {
       return false;
     if (!(numDVs == rhs.numDVs))
       return false;
+    if (__isset.bitVectors != rhs.__isset.bitVectors)
+      return false;
+    else if (__isset.bitVectors && !(bitVectors == rhs.bitVectors))
+      return false;
     return true;
   }
   bool operator != (const DateColumnStatsData &rhs) const {

http://git-wip-us.apache.org/repos/asf/hive/blob/7b2f6703/metastore/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api/BinaryColumnStatsData.java
----------------------------------------------------------------------
diff --git a/metastore/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api/BinaryColumnStatsData.java b/metastore/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api/BinaryColumnStatsData.java
index 84e393c..eeb5105 100644
--- a/metastore/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api/BinaryColumnStatsData.java
+++ b/metastore/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api/BinaryColumnStatsData.java
@@ -41,6 +41,7 @@ public class BinaryColumnStatsData implements org.apache.thrift.TBase<BinaryColu
   private static final org.apache.thrift.protocol.TField MAX_COL_LEN_FIELD_DESC = new org.apache.thrift.protocol.TField("maxColLen", org.apache.thrift.protocol.TType.I64, (short)1);
   private static final org.apache.thrift.protocol.TField AVG_COL_LEN_FIELD_DESC = new org.apache.thrift.protocol.TField("avgColLen", org.apache.thrift.protocol.TType.DOUBLE, (short)2);
   private static final org.apache.thrift.protocol.TField NUM_NULLS_FIELD_DESC = new org.apache.thrift.protocol.TField("numNulls", org.apache.thrift.protocol.TType.I64, (short)3);
+  private static final org.apache.thrift.protocol.TField BIT_VECTORS_FIELD_DESC = new org.apache.thrift.protocol.TField("bitVectors", org.apache.thrift.protocol.TType.STRING, (short)4);
 
   private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
   static {
@@ -51,12 +52,14 @@ public class BinaryColumnStatsData implements org.apache.thrift.TBase<BinaryColu
   private long maxColLen; // required
   private double avgColLen; // required
   private long numNulls; // required
+  private String bitVectors; // optional
 
   /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
   public enum _Fields implements org.apache.thrift.TFieldIdEnum {
     MAX_COL_LEN((short)1, "maxColLen"),
     AVG_COL_LEN((short)2, "avgColLen"),
-    NUM_NULLS((short)3, "numNulls");
+    NUM_NULLS((short)3, "numNulls"),
+    BIT_VECTORS((short)4, "bitVectors");
 
     private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -77,6 +80,8 @@ public class BinaryColumnStatsData implements org.apache.thrift.TBase<BinaryColu
           return AVG_COL_LEN;
         case 3: // NUM_NULLS
           return NUM_NULLS;
+        case 4: // BIT_VECTORS
+          return BIT_VECTORS;
         default:
           return null;
       }
@@ -121,6 +126,7 @@ public class BinaryColumnStatsData implements org.apache.thrift.TBase<BinaryColu
   private static final int __AVGCOLLEN_ISSET_ID = 1;
   private static final int __NUMNULLS_ISSET_ID = 2;
   private byte __isset_bitfield = 0;
+  private static final _Fields optionals[] = {_Fields.BIT_VECTORS};
   public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
   static {
     Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
@@ -130,6 +136,8 @@ public class BinaryColumnStatsData implements org.apache.thrift.TBase<BinaryColu
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.DOUBLE)));
     tmpMap.put(_Fields.NUM_NULLS, new org.apache.thrift.meta_data.FieldMetaData("numNulls", org.apache.thrift.TFieldRequirementType.REQUIRED, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
+    tmpMap.put(_Fields.BIT_VECTORS, new org.apache.thrift.meta_data.FieldMetaData("bitVectors", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     metaDataMap = Collections.unmodifiableMap(tmpMap);
     org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(BinaryColumnStatsData.class, metaDataMap);
   }
@@ -159,6 +167,9 @@ public class BinaryColumnStatsData implements org.apache.thrift.TBase<BinaryColu
     this.maxColLen = other.maxColLen;
     this.avgColLen = other.avgColLen;
     this.numNulls = other.numNulls;
+    if (other.isSetBitVectors()) {
+      this.bitVectors = other.bitVectors;
+    }
   }
 
   public BinaryColumnStatsData deepCopy() {
@@ -173,6 +184,7 @@ public class BinaryColumnStatsData implements org.apache.thrift.TBase<BinaryColu
     this.avgColLen = 0.0;
     setNumNullsIsSet(false);
     this.numNulls = 0;
+    this.bitVectors = null;
   }
 
   public long getMaxColLen() {
@@ -241,6 +253,29 @@ public class BinaryColumnStatsData implements org.apache.thrift.TBase<BinaryColu
     __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __NUMNULLS_ISSET_ID, value);
   }
 
+  public String getBitVectors() {
+    return this.bitVectors;
+  }
+
+  public void setBitVectors(String bitVectors) {
+    this.bitVectors = bitVectors;
+  }
+
+  public void unsetBitVectors() {
+    this.bitVectors = null;
+  }
+
+  /** Returns true if field bitVectors is set (has been assigned a value) and false otherwise */
+  public boolean isSetBitVectors() {
+    return this.bitVectors != null;
+  }
+
+  public void setBitVectorsIsSet(boolean value) {
+    if (!value) {
+      this.bitVectors = null;
+    }
+  }
+
   public void setFieldValue(_Fields field, Object value) {
     switch (field) {
     case MAX_COL_LEN:
@@ -267,6 +302,14 @@ public class BinaryColumnStatsData implements org.apache.thrift.TBase<BinaryColu
       }
       break;
 
+    case BIT_VECTORS:
+      if (value == null) {
+        unsetBitVectors();
+      } else {
+        setBitVectors((String)value);
+      }
+      break;
+
     }
   }
 
@@ -281,6 +324,9 @@ public class BinaryColumnStatsData implements org.apache.thrift.TBase<BinaryColu
     case NUM_NULLS:
       return getNumNulls();
 
+    case BIT_VECTORS:
+      return getBitVectors();
+
     }
     throw new IllegalStateException();
   }
@@ -298,6 +344,8 @@ public class BinaryColumnStatsData implements org.apache.thrift.TBase<BinaryColu
       return isSetAvgColLen();
     case NUM_NULLS:
       return isSetNumNulls();
+    case BIT_VECTORS:
+      return isSetBitVectors();
     }
     throw new IllegalStateException();
   }
@@ -342,6 +390,15 @@ public class BinaryColumnStatsData implements org.apache.thrift.TBase<BinaryColu
         return false;
     }
 
+    boolean this_present_bitVectors = true && this.isSetBitVectors();
+    boolean that_present_bitVectors = true && that.isSetBitVectors();
+    if (this_present_bitVectors || that_present_bitVectors) {
+      if (!(this_present_bitVectors && that_present_bitVectors))
+        return false;
+      if (!this.bitVectors.equals(that.bitVectors))
+        return false;
+    }
+
     return true;
   }
 
@@ -364,6 +421,11 @@ public class BinaryColumnStatsData implements org.apache.thrift.TBase<BinaryColu
     if (present_numNulls)
       list.add(numNulls);
 
+    boolean present_bitVectors = true && (isSetBitVectors());
+    list.add(present_bitVectors);
+    if (present_bitVectors)
+      list.add(bitVectors);
+
     return list.hashCode();
   }
 
@@ -405,6 +467,16 @@ public class BinaryColumnStatsData implements org.apache.thrift.TBase<BinaryColu
         return lastComparison;
       }
     }
+    lastComparison = Boolean.valueOf(isSetBitVectors()).compareTo(other.isSetBitVectors());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetBitVectors()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.bitVectors, other.bitVectors);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
     return 0;
   }
 
@@ -436,6 +508,16 @@ public class BinaryColumnStatsData implements org.apache.thrift.TBase<BinaryColu
     sb.append("numNulls:");
     sb.append(this.numNulls);
     first = false;
+    if (isSetBitVectors()) {
+      if (!first) sb.append(", ");
+      sb.append("bitVectors:");
+      if (this.bitVectors == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.bitVectors);
+      }
+      first = false;
+    }
     sb.append(")");
     return sb.toString();
   }
@@ -517,6 +599,14 @@ public class BinaryColumnStatsData implements org.apache.thrift.TBase<BinaryColu
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
+          case 4: // BIT_VECTORS
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.bitVectors = iprot.readString();
+              struct.setBitVectorsIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
           default:
             org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
         }
@@ -539,6 +629,13 @@ public class BinaryColumnStatsData implements org.apache.thrift.TBase<BinaryColu
       oprot.writeFieldBegin(NUM_NULLS_FIELD_DESC);
       oprot.writeI64(struct.numNulls);
       oprot.writeFieldEnd();
+      if (struct.bitVectors != null) {
+        if (struct.isSetBitVectors()) {
+          oprot.writeFieldBegin(BIT_VECTORS_FIELD_DESC);
+          oprot.writeString(struct.bitVectors);
+          oprot.writeFieldEnd();
+        }
+      }
       oprot.writeFieldStop();
       oprot.writeStructEnd();
     }
@@ -559,6 +656,14 @@ public class BinaryColumnStatsData implements org.apache.thrift.TBase<BinaryColu
       oprot.writeI64(struct.maxColLen);
       oprot.writeDouble(struct.avgColLen);
       oprot.writeI64(struct.numNulls);
+      BitSet optionals = new BitSet();
+      if (struct.isSetBitVectors()) {
+        optionals.set(0);
+      }
+      oprot.writeBitSet(optionals, 1);
+      if (struct.isSetBitVectors()) {
+        oprot.writeString(struct.bitVectors);
+      }
     }
 
     @Override
@@ -570,6 +675,11 @@ public class BinaryColumnStatsData implements org.apache.thrift.TBase<BinaryColu
       struct.setAvgColLenIsSet(true);
       struct.numNulls = iprot.readI64();
       struct.setNumNullsIsSet(true);
+      BitSet incoming = iprot.readBitSet(1);
+      if (incoming.get(0)) {
+        struct.bitVectors = iprot.readString();
+        struct.setBitVectorsIsSet(true);
+      }
     }
   }
 


Mime
View raw message