Repository: hive Updated Branches: refs/heads/branch-1.2 e87569f49 -> d35a56f6b
HIVE-10965 : direct SQL for stats fails in 0-column case (Sergey Shelukhin reviewed by Ashutosh Chauhan) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/d35a56f6 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/d35a56f6 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/d35a56f6 Branch: refs/heads/branch-1.2 Commit: d35a56f6b872da67f9a62ad4cc68264c4e8aaf4b Parents: e87569f Author: Thejas Nair <[email protected]> Authored: Wed Jun 10 15:10:57 2015 -0700 Committer: Thejas Nair <[email protected]> Committed: Wed Jun 10 15:11:50 2015 -0700 ---------------------------------------------------------------------- .../org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java | 1 + .../java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java | 2 ++ ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java | 3 ++- 3 files changed, 5 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/d35a56f6/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java ---------------------------------------------------------------------- diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java index de577ab..41b4ea0 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java @@ -2059,6 +2059,7 @@ public class HiveMetaStoreClient implements IMetaStoreClient { @Override public AggrStats getAggrColStatsFor(String dbName, String tblName, List<String> colNames, List<String> partNames) throws NoSuchObjectException, MetaException, TException { + if (colNames.isEmpty()) return null; // Nothing to aggregate. PartitionsStatsRequest req = new PartitionsStatsRequest(dbName, tblName, colNames, partNames); return client.get_aggr_stats_for(req); } http://git-wip-us.apache.org/repos/asf/hive/blob/d35a56f6/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java ---------------------------------------------------------------------- diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java index 0a56bac..ed810d2 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java @@ -1100,6 +1100,7 @@ class MetaStoreDirectSql { public AggrStats aggrColStatsForPartitions(String dbName, String tableName, List<String> partNames, List<String> colNames, boolean useDensityFunctionForNDVEstimation) throws MetaException { + if (colNames.isEmpty() || partNames.isEmpty()) return new AggrStats(); // Nothing to aggregate. long partsFound = partsFoundForPartitions(dbName, tableName, partNames, colNames); List<ColumnStatisticsObj> colStatsList; // Try to read from the cache first @@ -1160,6 +1161,7 @@ class MetaStoreDirectSql { private long partsFoundForPartitions(String dbName, String tableName, List<String> partNames, List<String> colNames) throws MetaException { + assert !colNames.isEmpty() && !partNames.isEmpty(); long partsFound = 0; boolean doTrace = LOG.isDebugEnabled(); String queryText = "select count(\"COLUMN_NAME\") from \"PART_COL_STATS\"" http://git-wip-us.apache.org/repos/asf/hive/blob/d35a56f6/ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java b/ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java index 6615a28..0bd7f0a 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java @@ -250,7 +250,8 @@ public class StatsUtils { neededColumns = processNeededColumns(schema, neededColumns); AggrStats aggrStats = Hive.get().getAggrColStatsFor(table.getDbName(), table.getTableName(), neededColumns, partNames); - if (null == aggrStats) { + if (null == aggrStats || null == aggrStats.getColStats() + || aggrStats.getColStatsSize() == 0) { // There are some partitions with no state (or we didn't fetch any state). // Update the stats with empty list to reflect that in the // state/initialize structures.
