Repository: incubator-quickstep
Updated Branches:
  refs/heads/estimate-num-distinct-values a12ee48a9 -> 19b68cd52


Updates


Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/19b68cd5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/19b68cd5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/19b68cd5

Branch: refs/heads/estimate-num-distinct-values
Commit: 19b68cd522bb8fb2b2b63d1198b62462a9d9a8d5
Parents: a12ee48
Author: Jianqiao Zhu <jianq...@cs.wisc.edu>
Authored: Tue Oct 4 16:45:12 2016 -0500
Committer: Jianqiao Zhu <jianq...@cs.wisc.edu>
Committed: Tue Oct 4 16:45:12 2016 -0500

----------------------------------------------------------------------
 .../cost_model/StarSchemaSimpleCostModel.cpp    | 28 +++++++++++++-------
 .../cost_model/StarSchemaSimpleCostModel.hpp    |  8 ++++++
 2 files changed, 27 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/19b68cd5/query_optimizer/cost_model/StarSchemaSimpleCostModel.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/cost_model/StarSchemaSimpleCostModel.cpp 
b/query_optimizer/cost_model/StarSchemaSimpleCostModel.cpp
index 019c5ed..8d254fa 100644
--- a/query_optimizer/cost_model/StarSchemaSimpleCostModel.cpp
+++ b/query_optimizer/cost_model/StarSchemaSimpleCostModel.cpp
@@ -149,18 +149,32 @@ std::size_t 
StarSchemaSimpleCostModel::estimateCardinalityForNestedLoopsJoin(
 
 std::size_t StarSchemaSimpleCostModel::estimateCardinalityForAggregate(
     const P::AggregatePtr &physical_plan) {
-  if (physical_plan->grouping_expressions().empty()) {
-    return 1;
+  double filter_selectivity =
+      estimateSelectivityForPredicate(physical_plan->filter_predicate(), 
physical_plan);
+  return static_cast<std::size_t>(
+      estimateNumGroupsForAggregate(physical_plan) * filter_selectivity);
+}
+
+std::size_t StarSchemaSimpleCostModel::estimateCardinalityForWindowAggregate(
+    const P::WindowAggregatePtr &physical_plan) {
+  return estimateCardinality(physical_plan->input());
+}
+
+
+std::size_t StarSchemaSimpleCostModel::estimateNumGroupsForAggregate(
+    const physical::AggregatePtr &aggregate) {
+  if (aggregate->grouping_expressions().empty()) {
+    return 1uL;
   }
 
-  std::size_t estimated_child_cardinality = 
estimateCardinality(physical_plan->input());
+  std::size_t estimated_child_cardinality = 
estimateCardinality(aggregate->input());
   std::size_t estimated_num_groups = 1;
   std::size_t max_attr_num_distinct_values = 0;
-  for (const auto &expr : physical_plan->grouping_expressions()) {
+  for (const auto &expr : aggregate->grouping_expressions()) {
     E::AttributeReferencePtr attr;
     if (E::SomeAttributeReference::MatchesWithConditionalCast(expr, &attr)) {
       std::size_t attr_num_distinct_values =
-          estimateNumDistinctValues(attr->id(), physical_plan->input());
+          estimateNumDistinctValues(attr->id(), aggregate->input());
       estimated_num_groups *= std::max(1uL, attr_num_distinct_values);
       max_attr_num_distinct_values =
           std::max(max_attr_num_distinct_values, attr_num_distinct_values);
@@ -175,10 +189,6 @@ std::size_t 
StarSchemaSimpleCostModel::estimateCardinalityForAggregate(
   return estimated_num_groups;
 }
 
-std::size_t StarSchemaSimpleCostModel::estimateCardinalityForWindowAggregate(
-    const P::WindowAggregatePtr &physical_plan) {
-  return estimateCardinality(physical_plan->input());
-}
 
 std::size_t StarSchemaSimpleCostModel::estimateNumDistinctValues(
     const expressions::ExprId attribute_id,

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/19b68cd5/query_optimizer/cost_model/StarSchemaSimpleCostModel.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/cost_model/StarSchemaSimpleCostModel.hpp 
b/query_optimizer/cost_model/StarSchemaSimpleCostModel.hpp
index d752065..662b118 100644
--- a/query_optimizer/cost_model/StarSchemaSimpleCostModel.hpp
+++ b/query_optimizer/cost_model/StarSchemaSimpleCostModel.hpp
@@ -67,6 +67,14 @@ class StarSchemaSimpleCostModel : public CostModel {
       const physical::PhysicalPtr &physical_plan) override;
 
   /**
+   * @brief Estimate the number of groups in an aggregation.
+   *
+   * @param aggregate The physical plan of the aggregation.
+   * @return The estimated number of groups.
+   */
+  std::size_t estimateNumGroupsForAggregate(const physical::AggregatePtr 
&aggregate);
+
+  /**
    * @brief Estimate the number of distinct values of an attribute in a 
relation.
    * 
    * @param attribute_id The expression id of the target attribute.

Reply via email to