diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/RelOptHiveTable.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/RelOptHiveTable.java index 080d27f..d6a0225 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/RelOptHiveTable.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/RelOptHiveTable.java @@ -345,6 +345,10 @@ private int getDistinctCount(Set partitions, String partColName) { */ public boolean containsPartitionColumnsOnly(BitSet cols) { + if (cols.isEmpty()) { + return false; + } + for (int i = cols.nextSetBit(0); i >= 0; i++, i = cols.nextSetBit(i + 1)) { if (!hivePartitionColsMap.containsKey(i)) { return false; diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/stats/FilterSelectivityEstimator.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/stats/FilterSelectivityEstimator.java index ba07363..96b7961 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/stats/FilterSelectivityEstimator.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/stats/FilterSelectivityEstimator.java @@ -32,6 +32,7 @@ import org.eigenbase.rex.RexNode; import org.eigenbase.rex.RexVisitorImpl; import org.eigenbase.sql.SqlKind; +import org.eigenbase.rel.metadata.RelMdUtil; public class FilterSelectivityEstimator extends RexVisitorImpl { private final RelNode childRel; @@ -60,6 +61,10 @@ public Double visitCall(RexCall call) { return 1.0; } + if (call.getOperator() == RelMdUtil.ARTIFICIAL_SELECTIVITY_FUNC) { + return RelMdUtil.getSelectivityValue(call); + } + Double selectivity = null; SqlKind op = call.getKind();