You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by al...@apache.org on 2023/02/27 20:29:01 UTC
[asterixdb] 01/16: [ASTERIXDB-3107][COMP] Add card/cost info for unnest_map operator
This is an automated email from the ASF dual-hosted git repository.
alsuliman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 2eb93874971f4a42a352f33cf05c8042a118d8c9
Author: Vijay Sarathy <vi...@couchbase.com>
AuthorDate: Mon Feb 13 11:43:02 2023 -0800
[ASTERIXDB-3107][COMP] Add card/cost info for unnest_map operator
Change-Id: I69ad4760c4026663107192f2f349eceec8e49efe
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17372
Reviewed-by: Vijay Sarathy <vi...@couchbase.com>
Reviewed-by: Ali Alsuliman <al...@gmail.com>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
---
.../optimizer/rules/am/AccessMethodUtils.java | 2 ++
.../optimizer/rules/am/BTreeAccessMethod.java | 1 +
.../optimizer/rules/cbo/EnumerateJoinsRule.java | 1 +
.../rules/cbo/EstimatedCostComputationVisitor.java | 12 +++++++++++-
.../algebra/util/OperatorManipulationUtil.java | 22 ++++++++++++++++++++++
5 files changed, 37 insertions(+), 1 deletion(-)
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java
index 256551fc81..ecf035227c 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java
@@ -963,6 +963,7 @@ public class AccessMethodUtils {
leftOuterMissingValue, context, sourceLoc);
}
+ OperatorManipulationUtil.copyCardCostAnnotations(joinRef.getValue(), finalOp);
joinRef.setValue(finalOp);
return true;
}
@@ -3050,6 +3051,7 @@ public class AccessMethodUtils {
if (optFuncExpr != null) {
optFuncExpr.setSourceVar(funcVarIndex, ((AssignOperator) op).getVariables().get(assignVarIndex));
}
+
//add fieldName to the nested fieldName, return
if (nestedAccessFieldName != null) {
parentFieldNames.first.addAll(nestedAccessFieldName);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java
index 7c09b59746..2a94359e1a 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java
@@ -796,6 +796,7 @@ public class BTreeAccessMethod implements IAccessMethod {
metaRecordType, dataset, context);
}
+ OperatorManipulationUtil.copyCardCostAnnotations(dataSourceOp, indexSearchOp);
return indexSearchOp;
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
index 20b4d82cbd..40c25f920e 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
@@ -408,6 +408,7 @@ public class EnumerateJoinsRule implements IAlgebraicRewriteRule {
if (leftInput.getOperatorTag() == LogicalOperatorTag.SELECT) {
addCardCostAnnotations(leftInput, plan);
}
+ addCardCostAnnotations(findDataSourceScanOperator(leftInput), plan);
}
private void buildNewTree(PlanNode plan, HashMap<EmptyTupleSourceOperator, ILogicalOperator> joinLeafInputsHashMap,
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EstimatedCostComputationVisitor.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EstimatedCostComputationVisitor.java
index f9f34bf0d7..3943cf4b09 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EstimatedCostComputationVisitor.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EstimatedCostComputationVisitor.java
@@ -208,7 +208,17 @@ public class EstimatedCostComputationVisitor implements ILogicalOperatorVisitor<
@Override
public Pair<Double, Double> visitUnnestMapOperator(UnnestMapOperator op, Double arg) throws AlgebricksException {
- return annotate(this, op, arg);
+ Pair<Double, Double> cardCost = new Pair<>(0.0, 0.0);
+
+ for (Map.Entry<String, Object> anno : op.getAnnotations().entrySet()) {
+ if (anno.getValue() != null && anno.getKey().equals(OperatorAnnotations.OP_OUTPUT_CARDINALITY)) {
+ cardCost.setFirst((Double) anno.getValue());
+ } else if (anno.getValue() != null && anno.getKey().equals(OperatorAnnotations.OP_COST_TOTAL)) {
+ cardCost.setSecond((Double) anno.getValue());
+ }
+ }
+
+ return cardCost;
}
@Override
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/util/OperatorManipulationUtil.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/util/OperatorManipulationUtil.java
index 3e8a95f7f0..3457751ec7 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/util/OperatorManipulationUtil.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/util/OperatorManipulationUtil.java
@@ -40,6 +40,7 @@ import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
import org.apache.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
import org.apache.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import org.apache.hyracks.algebricks.core.algebra.base.OperatorAnnotations;
import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
@@ -522,4 +523,25 @@ public class OperatorManipulationUtil {
}
}
}
+
+ public static void copyCardCostAnnotations(ILogicalOperator sourceOp, ILogicalOperator destOp) {
+ for (Map.Entry<String, Object> anno : sourceOp.getAnnotations().entrySet()) {
+ Object annotationVal = anno.getValue();
+ if (annotationVal != null) {
+ String annotation = anno.getKey();
+ switch (annotation) {
+ case OperatorAnnotations.OP_COST_LOCAL:
+ case OperatorAnnotations.OP_COST_TOTAL:
+ case OperatorAnnotations.OP_INPUT_CARDINALITY:
+ case OperatorAnnotations.OP_OUTPUT_CARDINALITY:
+ case OperatorAnnotations.OP_LEFT_EXCHANGE_COST:
+ case OperatorAnnotations.OP_RIGHT_EXCHANGE_COST:
+ destOp.getAnnotations().put(annotation, annotationVal);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
}