diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/RelOptHiveTable.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/RelOptHiveTable.java index cf83542..6c5c230 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/RelOptHiveTable.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/RelOptHiveTable.java @@ -14,6 +14,7 @@ import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.ql.exec.ColumnInfo; import org.apache.hadoop.hive.ql.metadata.HiveException; +import org.apache.hadoop.hive.ql.metadata.Partition; import org.apache.hadoop.hive.ql.metadata.Table; import org.apache.hadoop.hive.ql.optimizer.optiq.translator.ExprNodeConverter; import org.apache.hadoop.hive.ql.optimizer.ppr.PartitionPruner; @@ -246,8 +247,6 @@ private void updateColStats(Set projIndxLst) { } // 3. Obtain Stats for Partition Cols - // TODO: Just using no of partitions for NDV is a gross approximation for - // multi col partitions; Hack till HIVE-7392 gets fixed. if (colNamesFailedStats.isEmpty() && !partColNamesThatRqrStats.isEmpty()) { m_numPartitions = partitionList.getPartitions().size(); ColStatistics cStats = null; @@ -255,8 +254,7 @@ private void updateColStats(Set projIndxLst) { cStats = new ColStatistics(m_hiveTblMetadata.getTableName(), partColNamesThatRqrStats.get(i), m_hivePartitionColsMap.get( partColIndxsThatRqrStats.get(i)).getTypeName()); - cStats.setCountDistint(m_numPartitions); - + cStats.setCountDistint(getDistinctCount(partitionList.getPartitions(),partColNamesThatRqrStats.get(i))); m_hiveColStatsMap.put(partColIndxsThatRqrStats.get(i), cStats); } } @@ -270,6 +268,14 @@ private void updateColStats(Set projIndxLst) { } } + private int getDistinctCount(Set partitions, String partColName) { + Set distinctVals = new HashSet(partitions.size()); + for (Partition partition : partitions) { + distinctVals.add(partition.getSpec().get(partColName)); + } + return distinctVals.size(); + } + public List getColStat(List projIndxLst) { ImmutableList.Builder colStatsBldr = ImmutableList. builder();