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">