You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2014/08/06 08:45:25 UTC
svn commit: r1616109 -
/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/RelOptHiveTable.java
Author: hashutosh
Date: Wed Aug 6 06:45:25 2014
New Revision: 1616109
URL: http://svn.apache.org/r1616109
Log:
HIVE-7625 : CBO: stats for Partitioned tables are not read correctly. (Harish Butani via Ashutosh Chauhan)
Modified:
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/RelOptHiveTable.java
Modified: hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/RelOptHiveTable.java
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/RelOptHiveTable.java?rev=1616109&r1=1616108&r2=1616109&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/RelOptHiveTable.java (original)
+++ hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/RelOptHiveTable.java Wed Aug 6 06:45:25 2014
@@ -10,10 +10,12 @@ import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.hive.common.StatsSetupConst;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.ql.exec.ColumnInfo;
import org.apache.hadoop.hive.ql.metadata.Hive;
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;
@@ -92,8 +94,29 @@ public class RelOptHiveTable extends Rel
@Override
public double getRowCount() {
- if (m_rowCount == -1)
- m_rowCount = StatsUtils.getNumRows(m_hiveTblMetadata);
+ if (m_rowCount == -1) {
+
+ if (m_hiveTblMetadata.isPartitioned()) {
+ if (partitionList == null) {
+ try {
+ List<Partition> parts = Hive.get().getPartitions(m_hiveTblMetadata);
+ List<Long> rowCounts = StatsUtils.getBasicStatForPartitions(
+ m_hiveTblMetadata, parts, StatsSetupConst.ROW_COUNT);
+ m_rowCount = StatsUtils.getSumIgnoreNegatives(rowCounts);
+
+ } catch (HiveException he) {
+ throw new RuntimeException(he);
+ }
+ } else {
+ List<Long> rowCounts = StatsUtils.getBasicStatForPartitions(
+ m_hiveTblMetadata, partitionList.getNotDeniedPartns(),
+ StatsSetupConst.ROW_COUNT);
+ m_rowCount = StatsUtils.getSumIgnoreNegatives(rowCounts);
+ }
+ } else {
+ m_rowCount = StatsUtils.getNumRows(m_hiveTblMetadata);
+ }
+ }
return m_rowCount;
}