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;
   }