This is an automated email from the ASF dual-hosted git repository.

dengzh pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new 9ce0fc10ab4 HIVE-29554: Refactor MTableColumnStatistics and 
MPartitionColumnStatistics to avoid code duplication (#6420)
9ce0fc10ab4 is described below

commit 9ce0fc10ab4a29ba27742722b8925c30b1417242
Author: Thomas Rebele <[email protected]>
AuthorDate: Thu Apr 16 00:36:08 2026 +0200

    HIVE-29554: Refactor MTableColumnStatistics and MPartitionColumnStatistics 
to avoid code duplication (#6420)
---
 .../apache/hadoop/hive/metastore/ObjectStore.java  |   4 +-
 .../hadoop/hive/metastore/StatObjectConverter.java | 292 +++------------------
 ...olumnStatistics.java => MColumnStatistics.java} |  44 +---
 .../model/MPartitionColumnStatistics.java          | 250 +-----------------
 .../metastore/model/MTableColumnStatistics.java    | 249 +-----------------
 .../src/main/resources/package.jdo                 |  75 +-----
 6 files changed, 65 insertions(+), 849 deletions(-)

diff --git 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java
 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java
index 447d1a6a2c2..88dbd1ff472 100644
--- 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java
+++ 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java
@@ -9620,7 +9620,7 @@ protected ColumnStatistics 
getJdoResult(GetHelper<ColumnStatistics> ctx) throws
           if (desc.getLastAnalyzed() > mStat.getLastAnalyzed()) {
             desc.setLastAnalyzed(mStat.getLastAnalyzed());
           }
-          statObjs.add(StatObjectConverter.getTableColumnStatisticsObj(mStat, 
enableBitVector, enableKll));
+          statObjs.add(StatObjectConverter.getColumnStatisticsObj(mStat, 
enableBitVector, enableKll));
           Deadline.checkTimeout();
         }
         ColumnStatistics colStat = new ColumnStatistics(desc, statObjs);
@@ -9753,7 +9753,7 @@ protected List<ColumnStatistics> 
getJdoResult(GetHelper<List<ColumnStatistics>>
             csd = 
StatObjectConverter.getPartitionColumnStatisticsDesc(mStatsObj);
             curList = new ArrayList<>(colNames.size());
           }
-          
curList.add(StatObjectConverter.getPartitionColumnStatisticsObj(mStatsObj, 
enableBitVector, enableKll));
+          curList.add(StatObjectConverter.getColumnStatisticsObj(mStatsObj, 
enableBitVector, enableKll));
           lastPartName = partName;
           Deadline.checkTimeout();
         }
diff --git 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java
 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java
index e55d4ebcdf9..43c5fae1fb6 100644
--- 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java
+++ 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java
@@ -50,6 +50,7 @@
 import 
org.apache.hadoop.hive.metastore.columnstats.cache.StringColumnStatsDataInspector;
 import 
org.apache.hadoop.hive.metastore.columnstats.cache.TimestampColumnStatsDataInspector;
 import org.apache.hadoop.hive.metastore.directsql.MetastoreDirectSqlUtils;
+import org.apache.hadoop.hive.metastore.model.MColumnStatistics;
 import org.apache.hadoop.hive.metastore.model.MPartition;
 import org.apache.hadoop.hive.metastore.model.MPartitionColumnStatistics;
 import org.apache.hadoop.hive.metastore.model.MTable;
@@ -65,89 +66,19 @@ public class StatObjectConverter {
   public static MTableColumnStatistics convertToMTableColumnStatistics(MTable 
table,
       ColumnStatisticsDesc statsDesc, ColumnStatisticsObj statsObj, String 
engine)
           throws NoSuchObjectException, MetaException, InvalidObjectException {
-     if (statsObj == null || statsDesc == null) {
-       throw new InvalidObjectException("Invalid column stats object");
-     }
-
-     MTableColumnStatistics mColStats = new MTableColumnStatistics();
-     mColStats.setTable(table);
-     mColStats.setLastAnalyzed(statsDesc.getLastAnalyzed());
-     mColStats.setColName(statsObj.getColName());
-     mColStats.setColType(statsObj.getColType());
+    if (statsObj == null || statsDesc == null) {
+      throw new InvalidObjectException("Invalid column stats object");
+    }
 
-     if (statsObj.getStatsData().isSetBooleanStats()) {
-       BooleanColumnStatsData boolStats = 
statsObj.getStatsData().getBooleanStats();
-       mColStats.setBooleanStats(
-           boolStats.isSetNumTrues() ? boolStats.getNumTrues() : null,
-           boolStats.isSetNumFalses() ? boolStats.getNumFalses() : null,
-           boolStats.isSetNumNulls() ? boolStats.getNumNulls() : null);
-     } else if (statsObj.getStatsData().isSetLongStats()) {
-       LongColumnStatsData longStats = statsObj.getStatsData().getLongStats();
-       mColStats.setLongStats(
-           longStats.isSetNumNulls() ? longStats.getNumNulls() : null,
-           longStats.isSetNumDVs() ? longStats.getNumDVs() : null,
-           longStats.isSetBitVectors() ? longStats.getBitVectors() : null,
-           longStats.isSetHistogram() ? longStats.getHistogram() : null,
-           longStats.isSetLowValue() ? longStats.getLowValue() : null,
-           longStats.isSetHighValue() ? longStats.getHighValue() : null);
-     } else if (statsObj.getStatsData().isSetDoubleStats()) {
-       DoubleColumnStatsData doubleStats = 
statsObj.getStatsData().getDoubleStats();
-       mColStats.setDoubleStats(
-           doubleStats.isSetNumNulls() ? doubleStats.getNumNulls() : null,
-           doubleStats.isSetNumDVs() ? doubleStats.getNumDVs() : null,
-           doubleStats.isSetBitVectors() ? doubleStats.getBitVectors() : null,
-           doubleStats.isSetHistogram() ? doubleStats.getHistogram() : null,
-           doubleStats.isSetLowValue() ? doubleStats.getLowValue() : null,
-           doubleStats.isSetHighValue() ? doubleStats.getHighValue() : null);
-     } else if (statsObj.getStatsData().isSetDecimalStats()) {
-       DecimalColumnStatsData decimalStats = 
statsObj.getStatsData().getDecimalStats();
-       String low = decimalStats.isSetLowValue() ? 
DecimalUtils.createJdoDecimalString(decimalStats.getLowValue()) : null;
-       String high = decimalStats.isSetHighValue() ? 
DecimalUtils.createJdoDecimalString(decimalStats.getHighValue()) : null;
-       mColStats.setDecimalStats(
-           decimalStats.isSetNumNulls() ? decimalStats.getNumNulls() : null,
-           decimalStats.isSetNumDVs() ? decimalStats.getNumDVs() : null,
-           decimalStats.isSetBitVectors() ? decimalStats.getBitVectors() : 
null,
-           decimalStats.isSetHistogram() ? decimalStats.getHistogram() : null,
-               low, high);
-     } else if (statsObj.getStatsData().isSetStringStats()) {
-       StringColumnStatsData stringStats = 
statsObj.getStatsData().getStringStats();
-       mColStats.setStringStats(
-           stringStats.isSetNumNulls() ? stringStats.getNumNulls() : null,
-           stringStats.isSetNumDVs() ? stringStats.getNumDVs() : null,
-           stringStats.isSetBitVectors() ? stringStats.getBitVectors() : null,
-           stringStats.isSetMaxColLen() ? stringStats.getMaxColLen() : null,
-           stringStats.isSetAvgColLen() ? stringStats.getAvgColLen() : null);
-     } else if (statsObj.getStatsData().isSetBinaryStats()) {
-       BinaryColumnStatsData binaryStats = 
statsObj.getStatsData().getBinaryStats();
-       mColStats.setBinaryStats(
-           binaryStats.isSetNumNulls() ? binaryStats.getNumNulls() : null,
-           binaryStats.isSetMaxColLen() ? binaryStats.getMaxColLen() : null,
-           binaryStats.isSetAvgColLen() ? binaryStats.getAvgColLen() : null);
-     } else if (statsObj.getStatsData().isSetDateStats()) {
-       DateColumnStatsData dateStats = statsObj.getStatsData().getDateStats();
-       mColStats.setDateStats(
-           dateStats.isSetNumNulls() ? dateStats.getNumNulls() : null,
-           dateStats.isSetNumDVs() ? dateStats.getNumDVs() : null,
-           dateStats.isSetBitVectors() ? dateStats.getBitVectors() : null,
-           dateStats.isSetHistogram() ? dateStats.getHistogram() : null,
-           dateStats.isSetLowValue() ? 
dateStats.getLowValue().getDaysSinceEpoch() : null,
-           dateStats.isSetHighValue() ? 
dateStats.getHighValue().getDaysSinceEpoch() : null);
-     } else if (statsObj.getStatsData().isSetTimestampStats()) {
-       TimestampColumnStatsData timestampStats = 
statsObj.getStatsData().getTimestampStats();
-       mColStats.setTimestampStats(
-           timestampStats.isSetNumNulls() ? timestampStats.getNumNulls() : 
null,
-           timestampStats.isSetNumDVs() ? timestampStats.getNumDVs() : null,
-           timestampStats.isSetBitVectors() ? timestampStats.getBitVectors() : 
null,
-           timestampStats.isSetHistogram() ? timestampStats.getHistogram() : 
null,
-           timestampStats.isSetLowValue() ? 
timestampStats.getLowValue().getSecondsSinceEpoch() : null,
-           timestampStats.isSetHighValue() ? 
timestampStats.getHighValue().getSecondsSinceEpoch() : null);
-     }
-     mColStats.setEngine(engine);
-     return mColStats;
+    MTableColumnStatistics mColStats = new MTableColumnStatistics();
+    mColStats.setTable(table);
+    mColStats.setLastAnalyzed(statsDesc.getLastAnalyzed());
+    copyToMColumnStatistics(statsObj, mColStats);
+    mColStats.setEngine(engine);
+    return mColStats;
   }
 
-  public static void setFieldsIntoOldStats(
-      MTableColumnStatistics mStatsObj, MTableColumnStatistics oldStatsObj) {
+  public static void setFieldsIntoOldStats(MColumnStatistics mStatsObj, 
MColumnStatistics oldStatsObj) {
     if (mStatsObj.getAvgColLen() != null) {
       oldStatsObj.setAvgColLen(mStatsObj.getAvgColLen());
     }
@@ -194,54 +125,6 @@ public static void setFieldsIntoOldStats(
     oldStatsObj.setLastAnalyzed(mStatsObj.getLastAnalyzed());
   }
 
-  public static void setFieldsIntoOldStats(
-      MPartitionColumnStatistics mStatsObj, MPartitionColumnStatistics 
oldStatsObj) {
-    if (mStatsObj.getAvgColLen() != null) {
-          oldStatsObj.setAvgColLen(mStatsObj.getAvgColLen());
-    }
-    if (mStatsObj.getLongHighValue() != null) {
-      oldStatsObj.setLongHighValue(mStatsObj.getLongHighValue());
-    }
-    if (mStatsObj.getDoubleHighValue() != null) {
-      oldStatsObj.setDoubleHighValue(mStatsObj.getDoubleHighValue());
-    }
-    oldStatsObj.setLastAnalyzed(mStatsObj.getLastAnalyzed());
-    if (mStatsObj.getLongLowValue() != null) {
-      oldStatsObj.setLongLowValue(mStatsObj.getLongLowValue());
-    }
-    if (mStatsObj.getDoubleLowValue() != null) {
-      oldStatsObj.setDoubleLowValue(mStatsObj.getDoubleLowValue());
-    }
-    if (mStatsObj.getDecimalLowValue() != null) {
-      oldStatsObj.setDecimalLowValue(mStatsObj.getDecimalLowValue());
-    }
-    if (mStatsObj.getDecimalHighValue() != null) {
-      oldStatsObj.setDecimalHighValue(mStatsObj.getDecimalHighValue());
-    }
-    if (mStatsObj.getMaxColLen() != null) {
-      oldStatsObj.setMaxColLen(mStatsObj.getMaxColLen());
-    }
-    if (mStatsObj.getNumDVs() != null) {
-      oldStatsObj.setNumDVs(mStatsObj.getNumDVs());
-    }
-    if (mStatsObj.getBitVector() != null) {
-      oldStatsObj.setBitVector(mStatsObj.getBitVector());
-    }
-    if (mStatsObj.getHistogram() != null) {
-      oldStatsObj.setHistogram(mStatsObj.getHistogram());
-    }
-    if (mStatsObj.getNumFalses() != null) {
-      oldStatsObj.setNumFalses(mStatsObj.getNumFalses());
-    }
-    if (mStatsObj.getNumTrues() != null) {
-      oldStatsObj.setNumTrues(mStatsObj.getNumTrues());
-    }
-    if (mStatsObj.getNumNulls() != null) {
-      oldStatsObj.setNumNulls(mStatsObj.getNumNulls());
-    }
-    oldStatsObj.setEngine(mStatsObj.getEngine());
-  }
-
   public static String getUpdatedColumnSql(MPartitionColumnStatistics 
mStatsObj) {
     StringBuilder setStmt = new StringBuilder();
     if (mStatsObj.getAvgColLen() != null) {
@@ -341,116 +224,6 @@ public static int 
initUpdatedColumnStatement(MPartitionColumnStatistics mStatsOb
     return colIdx;
   }
 
-  public static ColumnStatisticsObj getTableColumnStatisticsObj(
-      MTableColumnStatistics mStatsObj, boolean enableBitVector, boolean 
enableKll) {
-    ColumnStatisticsObj statsObj = new ColumnStatisticsObj();
-    statsObj.setColType(mStatsObj.getColType());
-    statsObj.setColName(mStatsObj.getColName());
-    String colType = mStatsObj.getColType().toLowerCase();
-    ColumnStatisticsData colStatsData = new ColumnStatisticsData();
-
-    if (colType.equals("boolean")) {
-      BooleanColumnStatsData boolStats = new BooleanColumnStatsData();
-      boolStats.setNumFalses(mStatsObj.getNumFalses());
-      boolStats.setNumTrues(mStatsObj.getNumTrues());
-      boolStats.setNumNulls(mStatsObj.getNumNulls());
-      colStatsData.setBooleanStats(boolStats);
-    } else if (colType.equals("string") ||
-        colType.startsWith("varchar") || colType.startsWith("char")) {
-      StringColumnStatsDataInspector stringStats = new 
StringColumnStatsDataInspector();
-      stringStats.setNumNulls(mStatsObj.getNumNulls());
-      stringStats.setAvgColLen(mStatsObj.getAvgColLen());
-      stringStats.setMaxColLen(mStatsObj.getMaxColLen());
-      stringStats.setNumDVs(mStatsObj.getNumDVs());
-      
stringStats.setBitVectors((mStatsObj.getBitVector()==null||!enableBitVector)? 
null : mStatsObj.getBitVector());
-      colStatsData.setStringStats(stringStats);
-    } else if (colType.equals("binary")) {
-      BinaryColumnStatsData binaryStats = new BinaryColumnStatsData();
-      binaryStats.setNumNulls(mStatsObj.getNumNulls());
-      binaryStats.setAvgColLen(mStatsObj.getAvgColLen());
-      binaryStats.setMaxColLen(mStatsObj.getMaxColLen());
-      colStatsData.setBinaryStats(binaryStats);
-    } else if (colType.equals("bigint") || colType.equals("int") ||
-        colType.equals("smallint") || colType.equals("tinyint")) {
-      LongColumnStatsDataInspector longStats = new 
LongColumnStatsDataInspector();
-      longStats.setNumNulls(mStatsObj.getNumNulls());
-      Long longHighValue = mStatsObj.getLongHighValue();
-      if (longHighValue != null) {
-        longStats.setHighValue(longHighValue);
-      }
-      Long longLowValue = mStatsObj.getLongLowValue();
-      if (longLowValue != null) {
-        longStats.setLowValue(longLowValue);
-      }
-      longStats.setNumDVs(mStatsObj.getNumDVs());
-      
longStats.setBitVectors((mStatsObj.getBitVector()==null||!enableBitVector)? 
null : mStatsObj.getBitVector());
-      longStats.setHistogram((mStatsObj.getHistogram()==null||!enableKll)? 
null : mStatsObj.getHistogram());
-      colStatsData.setLongStats(longStats);
-    } else if (colType.equals("double") || colType.equals("float")) {
-      DoubleColumnStatsDataInspector doubleStats = new 
DoubleColumnStatsDataInspector();
-      doubleStats.setNumNulls(mStatsObj.getNumNulls());
-      Double doubleHighValue = mStatsObj.getDoubleHighValue();
-      if (doubleHighValue != null) {
-        doubleStats.setHighValue(doubleHighValue);
-      }
-      Double doubleLowValue = mStatsObj.getDoubleLowValue();
-      if (doubleLowValue != null) {
-        doubleStats.setLowValue(doubleLowValue);
-      }
-      doubleStats.setNumDVs(mStatsObj.getNumDVs());
-      
doubleStats.setBitVectors((mStatsObj.getBitVector()==null||!enableBitVector)? 
null : mStatsObj.getBitVector());
-      doubleStats.setHistogram((mStatsObj.getHistogram()==null||!enableKll)? 
null : mStatsObj.getHistogram());
-      colStatsData.setDoubleStats(doubleStats);
-    } else if (colType.startsWith("decimal")) {
-      DecimalColumnStatsDataInspector decimalStats = new 
DecimalColumnStatsDataInspector();
-      decimalStats.setNumNulls(mStatsObj.getNumNulls());
-      String decimalHighValue = mStatsObj.getDecimalHighValue();
-      if (decimalHighValue != null) {
-        
decimalStats.setHighValue(DecimalUtils.createThriftDecimal(decimalHighValue));
-      }
-      String decimalLowValue = mStatsObj.getDecimalLowValue();
-      if (decimalLowValue != null) {
-        
decimalStats.setLowValue(DecimalUtils.createThriftDecimal(decimalLowValue));
-      }
-      decimalStats.setNumDVs(mStatsObj.getNumDVs());
-      
decimalStats.setBitVectors((mStatsObj.getBitVector()==null||!enableBitVector)? 
null : mStatsObj.getBitVector());
-      decimalStats.setHistogram((mStatsObj.getHistogram()==null||!enableKll)? 
null : mStatsObj.getHistogram());
-      colStatsData.setDecimalStats(decimalStats);
-    } else if (colType.equals("date")) {
-      DateColumnStatsDataInspector dateStats = new 
DateColumnStatsDataInspector();
-      dateStats.setNumNulls(mStatsObj.getNumNulls());
-      Long highValue = mStatsObj.getLongHighValue();
-      if (highValue != null) {
-        dateStats.setHighValue(new Date(highValue));
-      }
-      Long lowValue = mStatsObj.getLongLowValue();
-      if (lowValue != null) {
-        dateStats.setLowValue(new Date(lowValue));
-      }
-      dateStats.setNumDVs(mStatsObj.getNumDVs());
-      
dateStats.setBitVectors((mStatsObj.getBitVector()==null||!enableBitVector)? 
null : mStatsObj.getBitVector());
-      dateStats.setHistogram((mStatsObj.getHistogram()==null||!enableKll)? 
null : mStatsObj.getHistogram());
-      colStatsData.setDateStats(dateStats);
-    } else if (colType.equals("timestamp")) {
-      TimestampColumnStatsDataInspector timestampStats = new 
TimestampColumnStatsDataInspector();
-      timestampStats.setNumNulls(mStatsObj.getNumNulls());
-      Long highValue = mStatsObj.getLongHighValue();
-      if (highValue != null) {
-        timestampStats.setHighValue(new Timestamp(highValue));
-      }
-      Long lowValue = mStatsObj.getLongLowValue();
-      if (lowValue != null) {
-        timestampStats.setLowValue(new Timestamp(lowValue));
-      }
-      timestampStats.setNumDVs(mStatsObj.getNumDVs());
-      
timestampStats.setBitVectors((mStatsObj.getBitVector()==null||!enableBitVector)?
 null : mStatsObj.getBitVector());
-      
timestampStats.setHistogram((mStatsObj.getHistogram()==null||!enableKll)? null 
: mStatsObj.getHistogram());
-      colStatsData.setTimestampStats(timestampStats);
-    }
-    statsObj.setStatsData(colStatsData);
-    return statsObj;
-  }
-
   public static ColumnStatisticsDesc getTableColumnStatisticsDesc(
       MTableColumnStatistics mStatsObj) {
     ColumnStatisticsDesc statsDesc = new ColumnStatisticsDesc();
@@ -472,6 +245,13 @@ public static MPartitionColumnStatistics 
convertToMPartitionColumnStatistics(
     MPartitionColumnStatistics mColStats = new MPartitionColumnStatistics();
     mColStats.setPartition(partition);
     mColStats.setLastAnalyzed(statsDesc.getLastAnalyzed());
+
+    copyToMColumnStatistics(statsObj, mColStats);
+    mColStats.setEngine(engine);
+    return mColStats;
+  }
+
+  private static void copyToMColumnStatistics(ColumnStatisticsObj statsObj, 
MColumnStatistics mColStats) {
     mColStats.setColName(statsObj.getColName());
     mColStats.setColType(statsObj.getColType());
 
@@ -542,12 +322,10 @@ public static MPartitionColumnStatistics 
convertToMPartitionColumnStatistics(
           timestampStats.isSetLowValue() ? 
timestampStats.getLowValue().getSecondsSinceEpoch() : null,
           timestampStats.isSetHighValue() ? 
timestampStats.getHighValue().getSecondsSinceEpoch() : null);
     }
-    mColStats.setEngine(engine);
-    return mColStats;
   }
 
-  public static ColumnStatisticsObj getPartitionColumnStatisticsObj(
-      MPartitionColumnStatistics mStatsObj, boolean enableBitVector, boolean 
enableKll) {
+  public static ColumnStatisticsObj getColumnStatisticsObj(MColumnStatistics 
mStatsObj, boolean enableBitVector,
+      boolean enableKll) {
     ColumnStatisticsObj statsObj = new ColumnStatisticsObj();
     statsObj.setColType(mStatsObj.getColType());
     statsObj.setColName(mStatsObj.getColName());
@@ -579,11 +357,13 @@ public static ColumnStatisticsObj 
getPartitionColumnStatisticsObj(
         colType.equals("int") || colType.equals("bigint")) {
       LongColumnStatsDataInspector longStats = new 
LongColumnStatsDataInspector();
       longStats.setNumNulls(mStatsObj.getNumNulls());
-      if (mStatsObj.getLongHighValue() != null) {
-        longStats.setHighValue(mStatsObj.getLongHighValue());
+      Long longHighValue = mStatsObj.getLongHighValue();
+      if (longHighValue != null) {
+        longStats.setHighValue(longHighValue);
       }
-      if (mStatsObj.getLongLowValue() != null) {
-        longStats.setLowValue(mStatsObj.getLongLowValue());
+      Long longLowValue = mStatsObj.getLongLowValue();
+      if (longLowValue != null) {
+        longStats.setLowValue(longLowValue);
       }
       longStats.setNumDVs(mStatsObj.getNumDVs());
       
longStats.setBitVectors((mStatsObj.getBitVector()==null||!enableBitVector)? 
null : mStatsObj.getBitVector());
@@ -592,11 +372,13 @@ public static ColumnStatisticsObj 
getPartitionColumnStatisticsObj(
     } else if (colType.equals("double") || colType.equals("float")) {
       DoubleColumnStatsDataInspector doubleStats = new 
DoubleColumnStatsDataInspector();
       doubleStats.setNumNulls(mStatsObj.getNumNulls());
-      if (mStatsObj.getDoubleHighValue() != null) {
-        doubleStats.setHighValue(mStatsObj.getDoubleHighValue());
+      Double doubleHighValue = mStatsObj.getDoubleHighValue();
+      if (doubleHighValue != null) {
+        doubleStats.setHighValue(doubleHighValue);
       }
-      if (mStatsObj.getDoubleLowValue() != null) {
-        doubleStats.setLowValue(mStatsObj.getDoubleLowValue());
+      Double doubleLowValue = mStatsObj.getDoubleLowValue();
+      if (doubleLowValue != null) {
+        doubleStats.setLowValue(doubleLowValue);
       }
       doubleStats.setNumDVs(mStatsObj.getNumDVs());
       
doubleStats.setBitVectors((mStatsObj.getBitVector()==null||!enableBitVector)? 
null : mStatsObj.getBitVector());
@@ -605,11 +387,13 @@ public static ColumnStatisticsObj 
getPartitionColumnStatisticsObj(
     } else if (colType.startsWith("decimal")) {
       DecimalColumnStatsDataInspector decimalStats = new 
DecimalColumnStatsDataInspector();
       decimalStats.setNumNulls(mStatsObj.getNumNulls());
-      if (mStatsObj.getDecimalHighValue() != null) {
-        
decimalStats.setHighValue(DecimalUtils.createThriftDecimal(mStatsObj.getDecimalHighValue()));
+      String decimalHighValue = mStatsObj.getDecimalHighValue();
+      if (decimalHighValue != null) {
+        
decimalStats.setHighValue(DecimalUtils.createThriftDecimal(decimalHighValue));
       }
-      if (mStatsObj.getDecimalLowValue() != null) {
-        
decimalStats.setLowValue(DecimalUtils.createThriftDecimal(mStatsObj.getDecimalLowValue()));
+      String decimalLowValue = mStatsObj.getDecimalLowValue();
+      if (decimalLowValue != null) {
+        
decimalStats.setLowValue(DecimalUtils.createThriftDecimal(decimalLowValue));
       }
       decimalStats.setNumDVs(mStatsObj.getNumDVs());
       
decimalStats.setBitVectors((mStatsObj.getBitVector()==null||!enableBitVector)? 
null : mStatsObj.getBitVector());
diff --git 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MPartitionColumnStatistics.java
 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MColumnStatistics.java
similarity index 93%
copy from 
standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MPartitionColumnStatistics.java
copy to 
standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MColumnStatistics.java
index f4ad37d9b53..eb73d05a914 100644
--- 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MPartitionColumnStatistics.java
+++ 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MColumnStatistics.java
@@ -15,25 +15,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-/**
- *
- */
 package org.apache.hadoop.hive.metastore.model;
 
-
-
-/**
- *
- * MPartitionColumnStatistics - Represents Hive's partiton level Column 
Statistics Description.
- * The fields in this class with the exception of partition are persisted in 
the metastore.
- * In case of partition, part_id is persisted in its place.
- *
- */
-public class MPartitionColumnStatistics {
-
-  private MPartition partition;
-
+public abstract class MColumnStatistics {
   private String colName;
   private String colType;
   private String engine;
@@ -54,8 +38,6 @@ public class MPartitionColumnStatistics {
   private Long numFalses;
   private long lastAnalyzed;
 
-  public MPartitionColumnStatistics() {}
-
   public String getColName() {
     return colName;
   }
@@ -64,6 +46,14 @@ public void setColName(String colName) {
     this.colName = colName;
   }
 
+  public String getColType() {
+    return colType;
+  }
+
+  public void setColType(String colType) {
+    this.colType = colType;
+  }
+
   public Long getNumNulls() {
     return numNulls;
   }
@@ -120,22 +110,6 @@ public void setLastAnalyzed(long lastAnalyzed) {
     this.lastAnalyzed = lastAnalyzed;
   }
 
-  public MPartition getPartition() {
-    return partition;
-  }
-
-  public void setPartition(MPartition partition) {
-    this.partition = partition;
-  }
-
-  public String getColType() {
-    return colType;
-  }
-
-  public void setColType(String colType) {
-    this.colType = colType;
-  }
-
   public void setBooleanStats(Long numTrues, Long numFalses, Long numNulls) {
     this.numTrues = numTrues;
     this.numFalses = numFalses;
diff --git 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MPartitionColumnStatistics.java
 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MPartitionColumnStatistics.java
index f4ad37d9b53..4cf639be0f8 100644
--- 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MPartitionColumnStatistics.java
+++ 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MPartitionColumnStatistics.java
@@ -30,96 +30,12 @@
  * In case of partition, part_id is persisted in its place.
  *
  */
-public class MPartitionColumnStatistics {
+public class MPartitionColumnStatistics extends MColumnStatistics {
 
   private MPartition partition;
 
-  private String colName;
-  private String colType;
-  private String engine;
-
-  private Long longLowValue;
-  private Long longHighValue;
-  private Double doubleLowValue;
-  private Double doubleHighValue;
-  private String decimalLowValue;
-  private String decimalHighValue;
-  private Long numNulls;
-  private Long numDVs;
-  private byte[] bitVector = new byte[] { 'H', 'L' };
-  private byte[] histogram = new byte[] {};
-  private Double avgColLen;
-  private Long maxColLen;
-  private Long numTrues;
-  private Long numFalses;
-  private long lastAnalyzed;
-
   public MPartitionColumnStatistics() {}
 
-  public String getColName() {
-    return colName;
-  }
-
-  public void setColName(String colName) {
-    this.colName = colName;
-  }
-
-  public Long getNumNulls() {
-    return numNulls;
-  }
-
-  public void setNumNulls(long numNulls) {
-    this.numNulls = numNulls;
-  }
-
-  public Long getNumDVs() {
-    return numDVs;
-  }
-
-  public void setNumDVs(long numDVs) {
-    this.numDVs = numDVs;
-  }
-
-  public Double getAvgColLen() {
-    return avgColLen;
-  }
-
-  public void setAvgColLen(double avgColLen) {
-    this.avgColLen = avgColLen;
-  }
-
-  public Long getMaxColLen() {
-    return maxColLen;
-  }
-
-  public void setMaxColLen(long maxColLen) {
-    this.maxColLen = maxColLen;
-  }
-
-  public Long getNumTrues() {
-    return numTrues;
-  }
-
-  public void setNumTrues(long numTrues) {
-    this.numTrues = numTrues;
-  }
-
-  public Long getNumFalses() {
-    return numFalses;
-  }
-
-  public void setNumFalses(long numFalses) {
-    this.numFalses = numFalses;
-  }
-
-  public long getLastAnalyzed() {
-    return lastAnalyzed;
-  }
-
-  public void setLastAnalyzed(long lastAnalyzed) {
-    this.lastAnalyzed = lastAnalyzed;
-  }
-
   public MPartition getPartition() {
     return partition;
   }
@@ -127,168 +43,4 @@ public MPartition getPartition() {
   public void setPartition(MPartition partition) {
     this.partition = partition;
   }
-
-  public String getColType() {
-    return colType;
-  }
-
-  public void setColType(String colType) {
-    this.colType = colType;
-  }
-
-  public void setBooleanStats(Long numTrues, Long numFalses, Long numNulls) {
-    this.numTrues = numTrues;
-    this.numFalses = numFalses;
-    this.numNulls = numNulls;
-  }
-
-  public void setLongStats(Long numNulls, Long numNDVs, byte[] bitVector, 
byte[] histogram,
-      Long lowValue, Long highValue) {
-    this.numNulls = numNulls;
-    this.numDVs = numNDVs;
-    setBitVector(bitVector);
-    setHistogram(histogram);
-    this.longLowValue = lowValue;
-    this.longHighValue = highValue;
-  }
-
-  public void setDoubleStats(Long numNulls, Long numNDVs, byte[] bitVector, 
byte[] histogram,
-      Double lowValue, Double highValue) {
-    this.numNulls = numNulls;
-    this.numDVs = numNDVs;
-    setBitVector(bitVector);
-    setHistogram(histogram);
-    this.doubleLowValue = lowValue;
-    this.doubleHighValue = highValue;
-  }
-
-  public void setDecimalStats(Long numNulls, Long numNDVs, byte[] bitVector, 
byte[] histogram,
-      String lowValue, String highValue) {
-    this.numNulls = numNulls;
-    this.numDVs = numNDVs;
-    setBitVector(bitVector);
-    setHistogram(histogram);
-    this.decimalLowValue = lowValue;
-    this.decimalHighValue = highValue;
-  }
-
-  public void setStringStats(Long numNulls, Long numNDVs, byte[] bitVector, 
Long maxColLen, Double avgColLen) {
-    this.numNulls = numNulls;
-    this.numDVs = numNDVs;
-    setBitVector(bitVector);
-    this.maxColLen = maxColLen;
-    this.avgColLen = avgColLen;
-  }
-
-  public void setBinaryStats(Long numNulls, Long maxColLen, Double avgColLen) {
-    this.numNulls = numNulls;
-    this.maxColLen = maxColLen;
-    this.avgColLen = avgColLen;
-  }
-
-  public void setDateStats(Long numNulls, Long numNDVs, byte[] bitVector, 
byte[] histogram, Long lowValue, Long highValue) {
-    this.numNulls = numNulls;
-    this.numDVs = numNDVs;
-    setBitVector(bitVector);
-    setHistogram(histogram);
-    this.longLowValue = lowValue;
-    this.longHighValue = highValue;
-  }
-
-  public void setTimestampStats(Long numNulls, Long numNDVs, byte[] bitVector, 
byte[] histogram, Long lowValue, Long highValue) {
-    this.numNulls = numNulls;
-    this.numDVs = numNDVs;
-    setBitVector(bitVector);
-    setHistogram(histogram);
-    this.longLowValue = lowValue;
-    this.longHighValue = highValue;
-  }
-
-  public Long getLongLowValue() {
-    return longLowValue;
-  }
-
-  public void setLongLowValue(Long longLowValue) {
-    this.longLowValue = longLowValue;
-  }
-
-  public Long getLongHighValue() {
-    return longHighValue;
-  }
-
-  public void setLongHighValue(Long longHighValue) {
-    this.longHighValue = longHighValue;
-  }
-
-  public Double getDoubleLowValue() {
-    return doubleLowValue;
-  }
-
-  public void setDoubleLowValue(Double doubleLowValue) {
-    this.doubleLowValue = doubleLowValue;
-  }
-
-  public Double getDoubleHighValue() {
-    return doubleHighValue;
-  }
-
-  public void setDoubleHighValue(Double doubleHighValue) {
-    this.doubleHighValue = doubleHighValue;
-  }
-
-  public String getDecimalLowValue() {
-    return decimalLowValue;
-  }
-
-  public void setDecimalLowValue(String decimalLowValue) {
-    this.decimalLowValue = decimalLowValue;
-  }
-
-  public String getDecimalHighValue() {
-    return decimalHighValue;
-  }
-
-  public void setDecimalHighValue(String decimalHighValue) {
-    this.decimalHighValue = decimalHighValue;
-  }
-
-  public byte[] getBitVector() {
-    // workaround for DN bug in persisting nulls in pg bytea column
-    // instead set empty bit vector with header.
-    // https://issues.apache.org/jira/browse/HIVE-17836
-    if (bitVector != null && bitVector.length == 2 && bitVector[0] == 'H' && 
bitVector[1] == 'L') {
-      return null;
-    }
-    return bitVector;
-  }
-
-  public void setBitVector(byte[] bitVector) {
-    // workaround for DN bug in persisting nulls in pg bytea column
-    // instead set empty bit vector with header.
-    // https://issues.apache.org/jira/browse/HIVE-17836
-    this.bitVector = (bitVector == null ? new byte[] { 'H', 'L' } : bitVector);
-  }
-
-  public byte[] getHistogram() {
-    // workaround for DN bug in persisting nulls in pg bytea column instead 
set empty histogram.
-    // https://issues.apache.org/jira/browse/HIVE-17836
-    if (histogram != null && histogram.length == 0) {
-      return null;
-    }
-    return histogram;
-  }
-
-  public void setHistogram(byte[] histogram) {
-    // workaround for DN bug in persisting nulls in pg bytea column instead 
set empty histogram.
-    // https://issues.apache.org/jira/browse/HIVE-17836
-    this.histogram = (histogram == null ? new byte[] { } : histogram);
-  }
-
-  public String getEngine() {
-    return engine;
-  }
-
-  public void setEngine(String engine) {
-    this.engine = engine;
-  }
 }
diff --git 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MTableColumnStatistics.java
 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MTableColumnStatistics.java
index 9feea1958b0..066524cfc05 100644
--- 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MTableColumnStatistics.java
+++ 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MTableColumnStatistics.java
@@ -30,28 +30,9 @@
  * persisted in its place.
  *
  */
-public class MTableColumnStatistics {
+public class MTableColumnStatistics extends MColumnStatistics {
 
   private MTable table;
-  private String colName;
-  private String colType;
-  private String engine;
-
-  private Long longLowValue;
-  private Long longHighValue;
-  private Double doubleLowValue;
-  private Double doubleHighValue;
-  private String decimalLowValue;
-  private String decimalHighValue;
-  private Long numNulls;
-  private Long numDVs;
-  private byte[] bitVector = new byte[] { 'H', 'L' };
-  private byte[] histogram = new byte[] {};
-  private Double avgColLen;
-  private Long maxColLen;
-  private Long numTrues;
-  private Long numFalses;
-  private long lastAnalyzed;
 
   public MTableColumnStatistics() {}
 
@@ -63,232 +44,4 @@ public void setTable(MTable table) {
     this.table = table;
   }
 
-  public String getColName() {
-    return colName;
-  }
-
-  public void setColName(String colName) {
-    this.colName = colName;
-  }
-
-  public String getColType() {
-    return colType;
-  }
-
-  public void setColType(String colType) {
-    this.colType = colType;
-  }
-
-  public Long getNumNulls() {
-    return numNulls;
-  }
-
-  public void setNumNulls(long numNulls) {
-    this.numNulls = numNulls;
-  }
-
-  public Long getNumDVs() {
-    return numDVs;
-  }
-
-  public void setNumDVs(long numDVs) {
-    this.numDVs = numDVs;
-  }
-
-  public Double getAvgColLen() {
-    return avgColLen;
-  }
-
-  public void setAvgColLen(double avgColLen) {
-    this.avgColLen = avgColLen;
-  }
-
-  public Long getMaxColLen() {
-    return maxColLen;
-  }
-
-  public void setMaxColLen(long maxColLen) {
-    this.maxColLen = maxColLen;
-  }
-
-  public Long getNumTrues() {
-    return numTrues;
-  }
-
-  public void setNumTrues(long numTrues) {
-    this.numTrues = numTrues;
-  }
-
-  public Long getNumFalses() {
-    return numFalses;
-  }
-
-  public void setNumFalses(long numFalses) {
-    this.numFalses = numFalses;
-  }
-
-  public long getLastAnalyzed() {
-    return lastAnalyzed;
-  }
-
-  public void setLastAnalyzed(long lastAnalyzed) {
-    this.lastAnalyzed = lastAnalyzed;
-  }
-
-  public void setBooleanStats(Long numTrues, Long numFalses, Long numNulls) {
-    this.numTrues = numTrues;
-    this.numFalses = numFalses;
-    this.numNulls = numNulls;
-  }
-
-  public void setLongStats(Long numNulls, Long numNDVs, byte[] bitVector, byte 
[] histogram,
-      Long lowValue, Long highValue) {
-    this.numNulls = numNulls;
-    this.numDVs = numNDVs;
-    setBitVector(bitVector);
-    setHistogram(histogram);
-    this.longLowValue = lowValue;
-    this.longHighValue = highValue;
-  }
-
-  public void setDoubleStats(Long numNulls, Long numNDVs, byte[] bitVector, 
byte [] histogram,
-      Double lowValue, Double highValue) {
-    this.numNulls = numNulls;
-    this.numDVs = numNDVs;
-    setBitVector(bitVector);
-    setHistogram(histogram);
-    this.doubleLowValue = lowValue;
-    this.doubleHighValue = highValue;
-  }
-
-  public void setDecimalStats(Long numNulls, Long numNDVs, byte[] bitVector, 
byte [] histogram,
-      String lowValue, String highValue) {
-    this.numNulls = numNulls;
-    this.numDVs = numNDVs;
-    setBitVector(bitVector);
-    setHistogram(histogram);
-    this.decimalLowValue = lowValue;
-    this.decimalHighValue = highValue;
-  }
-
-  public void setStringStats(Long numNulls, Long numNDVs, byte[] bitVector, 
Long maxColLen, Double avgColLen) {
-    this.numNulls = numNulls;
-    this.numDVs = numNDVs;
-    setBitVector(bitVector);
-    this.maxColLen = maxColLen;
-    this.avgColLen = avgColLen;
-  }
-
-  public void setBinaryStats(Long numNulls, Long maxColLen, Double avgColLen) {
-    this.numNulls = numNulls;
-    this.maxColLen = maxColLen;
-    this.avgColLen = avgColLen;
-  }
-
-  public void setDateStats(Long numNulls, Long numNDVs, byte[] bitVector, byte 
[] histogram, Long lowValue, Long highValue) {
-    this.numNulls = numNulls;
-    this.numDVs = numNDVs;
-    setBitVector(bitVector);
-    setHistogram(histogram);
-    this.longLowValue = lowValue;
-    this.longHighValue = highValue;
-  }
-
-  public void setTimestampStats(Long numNulls, Long numNDVs, byte[] bitVector, 
byte [] histogram, Long lowValue, Long highValue) {
-    this.numNulls = numNulls;
-    this.numDVs = numNDVs;
-    setBitVector(bitVector);
-    setHistogram(histogram);
-    this.longLowValue = lowValue;
-    this.longHighValue = highValue;
-  }
-
-  public Long getLongLowValue() {
-    return longLowValue;
-  }
-
-  public void setLongLowValue(long longLowValue) {
-    this.longLowValue = longLowValue;
-  }
-
-  public Long getLongHighValue() {
-    return longHighValue;
-  }
-
-  public void setLongHighValue(long longHighValue) {
-    this.longHighValue = longHighValue;
-  }
-
-  public Double getDoubleLowValue() {
-    return doubleLowValue;
-  }
-
-  public void setDoubleLowValue(double doubleLowValue) {
-    this.doubleLowValue = doubleLowValue;
-  }
-
-  public Double getDoubleHighValue() {
-    return doubleHighValue;
-  }
-
-  public void setDoubleHighValue(double doubleHighValue) {
-    this.doubleHighValue = doubleHighValue;
-  }
-
-
-  public String getDecimalLowValue() {
-    return decimalLowValue;
-  }
-
-  public void setDecimalLowValue(String decimalLowValue) {
-    this.decimalLowValue = decimalLowValue;
-  }
-
-  public String getDecimalHighValue() {
-    return decimalHighValue;
-  }
-
-  public void setDecimalHighValue(String decimalHighValue) {
-    this.decimalHighValue = decimalHighValue;
-  }
-
-  public byte[] getBitVector() {
-    // workaround for DN bug in persisting nulls in pg bytea column
-    // instead set empty bit vector with header.
-    // https://issues.apache.org/jira/browse/HIVE-17836
-    if (bitVector != null && bitVector.length == 2 && bitVector[0] == 'H' && 
bitVector[1] == 'L') {
-      return null;
-    }
-    return bitVector;
-  }
-
-  public void setBitVector(byte[] bitVector) {
-    // workaround for DN bug in persisting nulls in pg bytea column
-    // instead set empty bit vector with header.
-    // https://issues.apache.org/jira/browse/HIVE-17836
-    this.bitVector = (bitVector == null ? new byte[] { 'H', 'L' } : bitVector);
-  }
-
-  public byte[] getHistogram() {
-    // workaround for DN bug in persisting nulls in pg bytea column instead 
set empty histogram.
-    // https://issues.apache.org/jira/browse/HIVE-17836
-    if (histogram != null && histogram.length == 0) {
-      return null;
-    }
-    return histogram;
-  }
-
-  public void setHistogram(byte[] histogram) {
-    // workaround for DN bug in persisting nulls in pg bytea column instead 
set empty histogram.
-    // https://issues.apache.org/jira/browse/HIVE-17836
-    this.histogram = (histogram == null ? new byte[] { } : histogram);
-  }
-
-  public String getEngine() {
-    return engine;
-  }
-
-  public void setEngine(String engine) {
-    this.engine = engine;
-  }
 }
diff --git 
a/standalone-metastore/metastore-server/src/main/resources/package.jdo 
b/standalone-metastore/metastore-server/src/main/resources/package.jdo
index 8e29e0a3522..7da4800d06f 100644
--- a/standalone-metastore/metastore-server/src/main/resources/package.jdo
+++ b/standalone-metastore/metastore-server/src/main/resources/package.jdo
@@ -944,14 +944,9 @@
             
     </class>    
 
-    <class name="MTableColumnStatistics" table="TAB_COL_STATS" 
identity-type="datastore" detachable="true">
-      <datastore-identity>
-        <column name="CS_ID"/>
-      </datastore-identity>
+    <class name="MColumnStatistics">
+      <inheritance strategy="subclass-table"/>
 
-      <field name="table">
-        <column name="TBL_ID"/>
-      </field>
       <field name="colName">
         <column name="COLUMN_NAME" length="767" jdbc-type="VARCHAR" 
allows-null="false"/>
       </field>
@@ -1008,69 +1003,27 @@
       </field>
     </class>
 
+    <class name="MTableColumnStatistics" table="TAB_COL_STATS" 
identity-type="datastore" detachable="true">
+      <datastore-identity>
+        <column name="CS_ID"/>
+      </datastore-identity>
+      <!-- inherits fields from MColumnStatistics -->
+
+      <field name="table">
+        <column name="TBL_ID"/>
+      </field>
+    </class>
+
     <class name="MPartitionColumnStatistics" table="PART_COL_STATS" 
identity-type="datastore" detachable="true">
       <foreign-key name="PART_COL_STATS_FK1" delete-action="cascade"/>
       <datastore-identity>
         <column name="CS_ID"/>
       </datastore-identity>
+      <!-- inherits fields from MColumnStatistics -->
 
       <field name="partition">
         <column name="PART_ID"/>
       </field>
-      <field name="colName">
-        <column name="COLUMN_NAME" length="767" jdbc-type="VARCHAR" 
allows-null="false"/>
-      </field>
-      <field name="colType">
-        <column name="COLUMN_TYPE" length="128" jdbc-type="VARCHAR" 
allows-null="false"/>
-      </field>
-      <field name="longLowValue">
-        <column name="LONG_LOW_VALUE"  jdbc-type="BIGINT" allows-null="true"/>
-      </field>
-      <field name="longHighValue">
-        <column name="LONG_HIGH_VALUE" jdbc-type="BIGINT" allows-null="true"/>
-      </field>
-       <field name="doubleLowValue">
-        <column name="DOUBLE_LOW_VALUE"  jdbc-type="DOUBLE" 
allows-null="true"/>
-      </field>
-      <field name="doubleHighValue">
-        <column name="DOUBLE_HIGH_VALUE" jdbc-type="DOUBLE" 
allows-null="true"/>
-      </field>
-      <field name="decimalLowValue">
-        <column name="BIG_DECIMAL_LOW_VALUE"  jdbc-type="VARCHAR" 
allows-null="true"/>
-      </field>
-      <field name="decimalHighValue">
-        <column name="BIG_DECIMAL_HIGH_VALUE" jdbc-type="VARCHAR" 
allows-null="true"/>
-      </field>
-      <field name="numNulls">
-        <column name="NUM_NULLS" jdbc-type="BIGINT" allows-null="false"/>
-      </field>
-      <field name="numDVs">
-        <column name="NUM_DISTINCTS" jdbc-type="BIGINT" allows-null="true"/>
-      </field>
-      <field name="bitVector">
-        <column name="BIT_VECTOR" jdbc-type="BLOB" allows-null="true"/>
-      </field>
-      <field name="histogram">
-        <column name="HISTOGRAM" jdbc-type="BLOB" allows-null="true"/>
-      </field>
-      <field name="avgColLen">
-        <column name="AVG_COL_LEN" jdbc-type="DOUBLE" allows-null="true"/>
-      </field>
-      <field name="maxColLen">
-        <column name="MAX_COL_LEN" jdbc-type="BIGINT" allows-null="true"/>
-      </field>
-      <field name="numTrues">
-        <column name="NUM_TRUES" jdbc-type="BIGINT" allows-null="true"/>
-      </field>
-      <field name="numFalses">
-        <column name="NUM_FALSES" jdbc-type="BIGINT" allows-null="true"/>
-      </field>
-      <field name="lastAnalyzed">
-        <column name="LAST_ANALYZED" jdbc-type="BIGINT" allows-null="false"/>
-      </field>
-      <field name="engine">
-        <column name="ENGINE" length="128" jdbc-type="VARCHAR" 
allows-null="false"/>
-      </field>
     </class>
 
     <class name="MVersionTable" table="VERSION" identity-type="datastore" 
detachable="true">


Reply via email to