Index: ql/src/test/results/clientpositive/cbo_correctness.q.out =================================================================== --- ql/src/test/results/clientpositive/cbo_correctness.q.out (revision 1619937) +++ ql/src/test/results/clientpositive/cbo_correctness.q.out (working copy) @@ -17894,3 +17894,17 @@ POSTHOOK: Input: default@t1 POSTHOOK: Input: default@t1@dt=2014 #### A masked pattern was here #### +PREHOOK: query: -- 15. get stats with empty partition list +select t1.value from t1 join t2 on t1.key = t2.key where t1.dt = '10' and t1.c_boolean = true +PREHOOK: type: QUERY +PREHOOK: Input: default@t1 +PREHOOK: Input: default@t2 +PREHOOK: Input: default@t2@dt=2014 +#### A masked pattern was here #### +POSTHOOK: query: -- 15. get stats with empty partition list +select t1.value from t1 join t2 on t1.key = t2.key where t1.dt = '10' and t1.c_boolean = true +POSTHOOK: type: QUERY +POSTHOOK: Input: default@t1 +POSTHOOK: Input: default@t2 +POSTHOOK: Input: default@t2@dt=2014 +#### A masked pattern was here #### Index: ql/src/test/queries/clientpositive/cbo_correctness.q =================================================================== --- ql/src/test/queries/clientpositive/cbo_correctness.q (revision 1619937) +++ ql/src/test/queries/clientpositive/cbo_correctness.q (working copy) @@ -220,3 +220,7 @@ -- 14. unary operator select key from t1 where c_int = -6 or c_int = +6; + +-- 15. get stats with empty partition list +select t1.value from t1 join t2 on t1.key = t2.key where t1.dt = '10' and t1.c_boolean = true; + Index: ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/RelOptHiveTable.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/RelOptHiveTable.java (revision 1619937) +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/RelOptHiveTable.java (working copy) @@ -208,6 +208,16 @@ } else { // 2.2 Obtain col stats for partitioned table. try { + if (partitionList.getNotDeniedPartns().isEmpty()) { + // no need to make a metastore call + m_rowCount = 0; + hiveColStats = new ArrayList(); + for (String c : nonPartColNamesThatRqrStats) { + // add empty stats object for each column + hiveColStats.add(new ColStatistics(m_hiveTblMetadata.getTableName(), c, null)); + } + colNamesFailedStats.clear(); + } else { Statistics stats = StatsUtils.collectStatistics(m_hiveConf, partitionList, m_hiveTblMetadata, m_hiveNonPartitionCols, nonPartColNamesThatRqrStats, true, true); m_rowCount = stats.getNumRows(); @@ -220,6 +230,7 @@ colNamesFailedStats.add(c); } } + } } catch (HiveException e) { String logMsg = "Collecting stats failed."; LOG.error(logMsg);