diff --git a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java index 1f75105b56..f1cb72fd22 100644 --- a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java +++ b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java @@ -7569,31 +7569,6 @@ private void writeMPartitionColumnStatistics(Table table, Partition partition, } } - /** - * Get table's column stats - * - * @param table - * @param colNames - * @return Map of column name and its stats - * @throws NoSuchObjectException - * @throws MetaException - */ - private Map getPartitionColStats(Table table, - List colNames) throws NoSuchObjectException, MetaException { - Map statsMap = Maps.newHashMap(); - QueryWrapper queryWrapper = new QueryWrapper(); - try { - List stats = getMTableColumnStatistics(table, - colNames, queryWrapper); - for(MTableColumnStatistics cStat : stats) { - statsMap.put(cStat.getColName(), cStat); - } - } finally { - queryWrapper.close(); - } - return statsMap; - } - @Override public boolean updateTableColumnStatistics(ColumnStatistics colStats) throws NoSuchObjectException, MetaException, InvalidObjectException, InvalidInputException { @@ -7611,12 +7586,15 @@ public boolean updateTableColumnStatistics(ColumnStatistics colStats) for (ColumnStatisticsObj statsObj : statsObjs) { colNames.add(statsObj.getColName()); } - Map oldStats = getPartitionColStats(table, colNames); + + MTable mTable = ensureGetMTable(statsDesc.getDbName(), statsDesc.getTableName()); + Map oldStats = + StatObjectConverter.convertToMTableColumnStatistics(mTable, getTableColumnStatistics(table.getDbName(), table.getTableName(), colNames)); for (ColumnStatisticsObj statsObj:statsObjs) { // We have to get mtable again because DataNucleus. MTableColumnStatistics mStatsObj = StatObjectConverter.convertToMTableColumnStatistics( - ensureGetMTable(statsDesc.getDbName(), statsDesc.getTableName()), statsDesc, statsObj); + mTable, statsDesc, statsObj); writeMTableColumnStatistics(table, mStatsObj, oldStats.get(statsObj.getColName())); // There is no need to add colname again, otherwise we will get duplicate colNames. } diff --git a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java index 08ea67fc2f..b8f7303ffa 100644 --- a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java +++ b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java @@ -21,9 +21,12 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.nio.ByteBuffer; +import java.util.HashMap; +import java.util.Map; import org.apache.hadoop.hive.metastore.api.BinaryColumnStatsData; import org.apache.hadoop.hive.metastore.api.BooleanColumnStatsData; +import org.apache.hadoop.hive.metastore.api.ColumnStatistics; import org.apache.hadoop.hive.metastore.api.ColumnStatisticsData; import org.apache.hadoop.hive.metastore.api.ColumnStatisticsData._Fields; import org.apache.hadoop.hive.metastore.api.ColumnStatisticsDesc; @@ -54,6 +57,25 @@ * It is hidden here so that we wouldn't have to look at it in elsewhere. */ public class StatObjectConverter { + + /** + * Convert ColumnStatistics into a mapping of the column name to MTableColumnStatistics + */ + public static Map convertToMTableColumnStatistics(MTable table, ColumnStatistics columnStats) + throws NoSuchObjectException, MetaException, InvalidObjectException { + Map map = new HashMap<>(); + if (columnStats == null) { + return map; + } + + ColumnStatisticsDesc statsDesc = columnStats.getStatsDesc(); + for (ColumnStatisticsObj statsObj : columnStats.getStatsObj()) { + map.put(statsObj.getColName(), convertToMTableColumnStatistics(table, statsDesc, statsObj)); + } + + return map; + } + // JDO public static MTableColumnStatistics convertToMTableColumnStatistics(MTable table, ColumnStatisticsDesc statsDesc, ColumnStatisticsObj statsObj)