>From <murali.kris...@couchbase.com>: murali.kris...@couchbase.com 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: murali.kris...@couchbase.com Gerrit-MessageType: newchange