>From <[email protected]>:
[email protected] has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19943 )
Change subject: [ASTERIXDB-3571][COMP] Infer Selection predicates from join
predicates
......................................................................
[ASTERIXDB-3571][COMP] Infer Selection predicates from join predicates
Change-Id: I7766e107bfadd915b6d760fc1ab74a6651c49db6
---
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
3 files changed, 16 insertions(+), 9 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/43/19943/1
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
index 73be298..af096e1 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
@@ -1445,6 +1445,11 @@
ILogicalOperator child = parent.getInputs().get(0).getValue();
parent.getInputs().get(0).setValue(newSelOp);
newSelOp.getInputs().add(new MutableObject<>(child));
+ // Add the selectivity annotation with selectivity 1.0;
+ // Note the actual cardinality will be different; but all join
cardinalities should be ok.
+ PredicateCardinalityAnnotation anno = new
PredicateCardinalityAnnotation(1.0);
+ AbstractFunctionCallExpression afce = (AbstractFunctionCallExpression)
newSelOp.getCondition().getValue();
+ afce.putAnnotation(anno);
optCtx.computeAndSetTypeEnvironmentForOperator(newSelOp);
}
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
index 3451966..5cbb6f8 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
@@ -371,6 +371,7 @@
// There are predicates here. So skip the predicates and get the
original dataset card.
// Now apply all the predicates and get the card after all predicates
are applied.
+ // We call the sampling query even if a selectivity hint was provided
because we have to get the lengths of the variables.
result =
joinEnum.getStatsHandle().runSamplingQueryProjection(joinEnum.optCtx,
leafInput, jnArrayIndex,
primaryKey);
double predicateCardinalityFromSample =
joinEnum.getStatsHandle().findPredicateCardinality(result, true);
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
index 18bc53f..ab57d3f 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
@@ -153,15 +153,7 @@
return 1.0;
}
double productivity = anno.getJoinProductivity();
- if (productivity <= 0) {
- IWarningCollector warningCollector =
joinEnum.optCtx.getWarningCollector();
- if (warningCollector.shouldWarn()) {
-
warningCollector.warn(Warning.of(joinExpr.getSourceLocation(),
ErrorCode.INAPPLICABLE_HINT,
- "productivity",
- "Productivity specified: " + productivity + ", has
to be a decimal value greater than 0"));
- }
- return 1.0;
- }
+
if (leftIndex == idx1) {
return productivity / card2;
} else {
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19943
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: I7766e107bfadd915b6d760fc1ab74a6651c49db6
Gerrit-Change-Number: 19943
Gerrit-PatchSet: 1
Gerrit-Owner: [email protected]
Gerrit-MessageType: newchange