>From Vijay Sarathy <[email protected]>: Vijay Sarathy has submitted this change. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18023 )
Change subject: [ASTERIXDB-3335][COMP]: CBO - CH2 bugs ...................................................................... [ASTERIXDB-3335][COMP]: CBO - CH2 bugs Change-Id: Ib65cf139a34d087207dd9a4c7de2ffff4ac50d89 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18023 Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: <[email protected]> Reviewed-by: Vijay Sarathy <[email protected]> --- M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java M asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q8.plan M asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q16.plan M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java M asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q9.plan M asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q5.plan M asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q7.plan 7 files changed, 161 insertions(+), 130 deletions(-) Approvals: [email protected]: Looks good to me, but someone else must approve Vijay Sarathy: Looks good to me, approved Jenkins: Verified; Verified Objections: Anon. E. Moose #1000171: Violations found 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 e5166f1..243df18 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 @@ -402,6 +402,7 @@ // This finds all the join Conditions in the whole query. This is a global list of all join predicates. // It also fills in the dataset Bits for each join predicate. private void findJoinConditionsAndAssignSels() throws AlgebricksException { + List<Mutable<ILogicalExpression>> conjs = new ArrayList<>(); for (JoinOperator jOp : allJoinOps) { AbstractBinaryJoinOperator joinOp = jOp.getAbstractJoinOp(); @@ -417,7 +418,6 @@ } jc.joinCondition = conj.getValue().cloneExpression(); joinConditions.add(jc); - jc.selectivity = stats.getSelectivityFromAnnotationMain(jc.joinCondition, true); } } else { if ((expr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL)) { @@ -429,32 +429,31 @@ // change to not a true condition jc.joinCondition = expr.cloneExpression(); joinConditions.add(jc); - jc.selectivity = stats.getSelectivityFromAnnotationMain(jc.joinCondition, true); } } } // now patch up any join conditions that have variables referenced in any internal assign statements. List<LogicalVariable> usedVars = new ArrayList<>(); + List<AssignOperator> erase = new ArrayList<>(); for (JoinCondition jc : joinConditions) { usedVars.clear(); ILogicalExpression expr = jc.joinCondition; expr.getUsedVariables(usedVars); - List<AssignOperator> erase = new ArrayList<>(); for (AssignOperator aOp : assignOps) { for (int i = 0; i < aOp.getVariables().size(); i++) { if (usedVars.contains(aOp.getVariables().get(i))) { OperatorManipulationUtil.replaceVarWithExpr((AbstractFunctionCallExpression) expr, aOp.getVariables().get(i), aOp.getExpressions().get(i).getValue()); jc.joinCondition = expr; - jc.selectivity = stats.getSelectivityFromAnnotationMain(jc.joinCondition, true); erase.add(aOp); } } } - for (int i = erase.size() - 1; i >= 0; i--) { - assignOps.remove(erase.get(i)); - } + jc.selectivity = stats.getSelectivityFromAnnotationMain(jc.joinCondition, true, false); + } + for (int i = erase.size() - 1; i >= 0; i--) { + assignOps.remove(erase.get(i)); } // now fill the datasetBits for each join condition. @@ -1143,8 +1142,11 @@ if (this.singleDatasetPreds.size() > 0) { // We did not have selectivities for these before. Now we do. for (JoinCondition jc : joinConditions) { - jc.selectivity = stats.getSelectivityFromAnnotationMain(jc.getJoinCondition(), false); // we may be repeating some work here, but that is ok. This will rarely happen (happens in q7 tpch) + double sel = stats.getSelectivityFromAnnotationMain(jc.getJoinCondition(), false, true); + if (sel != -1) { + jc.selectivity = sel; + } } } } 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 ae070b4..bfc43fb 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 @@ -172,18 +172,20 @@ // The expression we get may not be a base condition. It could be comprised of ors and ands and nots. So have to //recursively find the overall selectivity. - private double getSelectivityFromAnnotation(AbstractFunctionCallExpression afcExpr, boolean join) - throws AlgebricksException { + private double getSelectivityFromAnnotation(AbstractFunctionCallExpression afcExpr, boolean join, + boolean singleDatasetPreds) throws AlgebricksException { double sel = 1.0; if (afcExpr.getFunctionIdentifier().equals(AlgebricksBuiltinFunctions.OR)) { double orSel = getSelectivityFromAnnotation( - (AbstractFunctionCallExpression) afcExpr.getArguments().get(0).getValue(), join); + (AbstractFunctionCallExpression) afcExpr.getArguments().get(0).getValue(), join, + singleDatasetPreds); for (int i = 1; i < afcExpr.getArguments().size(); i++) { ILogicalExpression lexpr = afcExpr.getArguments().get(i).getValue(); if (lexpr.getExpressionTag().equals(LogicalExpressionTag.FUNCTION_CALL)) { sel = getSelectivityFromAnnotation( - (AbstractFunctionCallExpression) afcExpr.getArguments().get(i).getValue(), join); + (AbstractFunctionCallExpression) afcExpr.getArguments().get(i).getValue(), join, + singleDatasetPreds); orSel = orSel + sel - orSel * sel; } } @@ -194,7 +196,8 @@ ILogicalExpression lexpr = afcExpr.getArguments().get(i).getValue(); if (lexpr.getExpressionTag().equals(LogicalExpressionTag.FUNCTION_CALL)) { sel = getSelectivityFromAnnotation( - (AbstractFunctionCallExpression) afcExpr.getArguments().get(i).getValue(), join); + (AbstractFunctionCallExpression) afcExpr.getArguments().get(i).getValue(), join, + singleDatasetPreds); andSel *= sel; } } @@ -203,7 +206,8 @@ ILogicalExpression lexpr = afcExpr.getArguments().get(0).getValue(); if (lexpr.getExpressionTag().equals(LogicalExpressionTag.FUNCTION_CALL)) { sel = getSelectivityFromAnnotation( - (AbstractFunctionCallExpression) afcExpr.getArguments().get(0).getValue(), join); + (AbstractFunctionCallExpression) afcExpr.getArguments().get(0).getValue(), join, + singleDatasetPreds); // We want to return 1.0 and not 0.0 if there was no annotation return (sel == 1.0) ? 1.0 : 1.0 - sel; } @@ -224,26 +228,35 @@ } else { sel *= s; } + } else if (singleDatasetPreds) { + // Single dataset predicates inside join predicates will have a selectivity annotation. + // If the annotation is not present, return -1, so we don't overwrite previously + // computed selectivity. + return -1; } } else { JoinProductivityAnnotation jpa = afcExpr.getAnnotation(JoinProductivityAnnotation.class); s = findJoinSelectivity(jpa, afcExpr); sel *= s; } - if (join && sel == 1.0) { + + List<LogicalVariable> usedVars = new ArrayList<>(); + usedVars.clear(); + afcExpr.getUsedVariables(usedVars); + if (join && sel == 1.0 && usedVars.size() == 1) { // assume no selectivity was assigned joinEnum.singleDatasetPreds.add(afcExpr); } return sel; } - protected double getSelectivityFromAnnotationMain(ILogicalExpression leExpr, boolean join) - throws AlgebricksException { + protected double getSelectivityFromAnnotationMain(ILogicalExpression leExpr, boolean join, + boolean singleDatasetPreds) throws AlgebricksException { double sel = 1.0; if (leExpr.getExpressionTag().equals(LogicalExpressionTag.FUNCTION_CALL)) { AbstractFunctionCallExpression afcExpr = (AbstractFunctionCallExpression) leExpr; - sel = getSelectivityFromAnnotation(afcExpr, join); + sel = getSelectivityFromAnnotation(afcExpr, join, singleDatasetPreds); } return sel; @@ -261,7 +274,7 @@ while (op.getOperatorTag() != LogicalOperatorTag.EMPTYTUPLESOURCE) { if (op.getOperatorTag() == LogicalOperatorTag.SELECT) { SelectOperator selOper = (SelectOperator) op; - sel *= getSelectivityFromAnnotationMain(selOper.getCondition().getValue(), join); + sel *= getSelectivityFromAnnotationMain(selOper.getCondition().getValue(), join, false); } if (op.getOperatorTag() == LogicalOperatorTag.SUBPLAN) { sel *= getSelectivity((SubplanOperator) op); @@ -278,7 +291,7 @@ while (true) { if (op.getOperatorTag() == LogicalOperatorTag.SELECT) { SelectOperator selOper = (SelectOperator) op; - sel *= getSelectivityFromAnnotationMain(selOper.getCondition().getValue(), false); + sel *= getSelectivityFromAnnotationMain(selOper.getCondition().getValue(), false, false); } if (op.getInputs().size() > 0) { op = op.getInputs().get(0).getValue(); diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q16.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q16.plan index 715a293..11ad1fa 100644 --- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q16.plan +++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q16.plan @@ -33,33 +33,33 @@ -- HASH_PARTITION_EXCHANGE [$$133, $$134] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- HYBRID_HASH_JOIN [$$138][$$137] |PARTITIONED| + -- NESTED_LOOP |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- NESTED_LOOP |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- HYBRID_HASH_JOIN [$$138][$$137] |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$138] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ASSIGN |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- DATASOURCE_SCAN (test.stock) |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- EMPTY_TUPLE_SOURCE |PARTITIONED| - -- BROADCAST_EXCHANGE |PARTITIONED| - -- ASSIGN |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$137] |PARTITIONED| + -- STREAM_SELECT |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| - -- STREAM_SELECT |PARTITIONED| - -- ASSIGN |PARTITIONED| - -- STREAM_PROJECT |PARTITIONED| + -- ASSIGN |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- DATASOURCE_SCAN (test.item) |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- DATASOURCE_SCAN (test.supplier) |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- EMPTY_TUPLE_SOURCE |PARTITIONED| + -- EMPTY_TUPLE_SOURCE |PARTITIONED| -- BROADCAST_EXCHANGE |PARTITIONED| - -- STREAM_SELECT |PARTITIONED| + -- ASSIGN |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| - -- ASSIGN |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- DATASOURCE_SCAN (test.item) |PARTITIONED| + -- STREAM_SELECT |PARTITIONED| + -- ASSIGN |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- EMPTY_TUPLE_SOURCE |PARTITIONED| + -- DATASOURCE_SCAN (test.supplier) |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- EMPTY_TUPLE_SOURCE |PARTITIONED| diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q5.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q5.plan index e58b399..19bf0b1 100644 --- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q5.plan +++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q5.plan @@ -23,21 +23,21 @@ -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- HYBRID_HASH_JOIN [$$274, $$290][$$266, $$269] |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$274, $$290] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ASSIGN |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- HYBRID_HASH_JOIN [$$256][$$257] |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$256] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- HYBRID_HASH_JOIN [$$258][$$274] |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$258] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- HYBRID_HASH_JOIN [$$260, $$254, $$263][$$276, $$277, $$278] |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$260, $$254, $$263] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- HYBRID_HASH_JOIN [$$245, $$246][$$254, $$281] |PARTITIONED| @@ -63,7 +63,7 @@ -- DATASOURCE_SCAN (test.orders) |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- EMPTY_TUPLE_SOURCE |PARTITIONED| - -- BROADCAST_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$276, $$277, $$278] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ASSIGN |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| @@ -71,7 +71,7 @@ -- DATASOURCE_SCAN (test.customer) |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- EMPTY_TUPLE_SOURCE |PARTITIONED| - -- BROADCAST_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$274] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ASSIGN |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| @@ -79,7 +79,7 @@ -- DATASOURCE_SCAN (test.nation) |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- EMPTY_TUPLE_SOURCE |PARTITIONED| - -- BROADCAST_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$257] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- STREAM_SELECT |PARTITIONED| -- ASSIGN |PARTITIONED| @@ -88,7 +88,7 @@ -- DATASOURCE_SCAN (test.region) |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- EMPTY_TUPLE_SOURCE |PARTITIONED| - -- BROADCAST_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$266, $$269] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ASSIGN |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q7.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q7.plan index b17c6bc..91cd909 100644 --- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q7.plan +++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q7.plan @@ -18,85 +18,87 @@ -- STREAM_PROJECT |PARTITIONED| -- ASSIGN |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- HYBRID_HASH_JOIN [$$303, $$324][$$277, $$300] |PARTITIONED| + -- STREAM_SELECT |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- STREAM_PROJECT |PARTITIONED| - -- ASSIGN |PARTITIONED| + -- HYBRID_HASH_JOIN [$$277][$$303] |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- HYBRID_HASH_JOIN [$$310, $$311][$$275, $$276] |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- STREAM_PROJECT |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- HYBRID_HASH_JOIN [$$305, $$306, $$307][$$291, $$293, $$295] |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- STREAM_PROJECT |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- HYBRID_HASH_JOIN [$$304][$$288] |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- STREAM_PROJECT |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- NESTED_LOOP |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- STREAM_PROJECT |PARTITIONED| - -- ASSIGN |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- REPLICATE |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- STREAM_PROJECT |PARTITIONED| - -- ASSIGN |PARTITIONED| - -- STREAM_PROJECT |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- DATASOURCE_SCAN (test.nation) |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- EMPTY_TUPLE_SOURCE |PARTITIONED| - -- BROADCAST_EXCHANGE |PARTITIONED| - -- REPLICATE |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- STREAM_PROJECT |PARTITIONED| - -- ASSIGN |PARTITIONED| - -- STREAM_PROJECT |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- DATASOURCE_SCAN (test.nation) |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- EMPTY_TUPLE_SOURCE |PARTITIONED| - -- BROADCAST_EXCHANGE |PARTITIONED| - -- ASSIGN |PARTITIONED| - -- STREAM_PROJECT |PARTITIONED| - -- ASSIGN |PARTITIONED| - -- STREAM_PROJECT |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- DATASOURCE_SCAN (test.customer) |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- EMPTY_TUPLE_SOURCE |PARTITIONED| - -- BROADCAST_EXCHANGE |PARTITIONED| - -- STREAM_PROJECT |PARTITIONED| - -- STREAM_SELECT |PARTITIONED| - -- STREAM_PROJECT |PARTITIONED| - -- ASSIGN |PARTITIONED| - -- STREAM_PROJECT |PARTITIONED| - -- UNNEST |PARTITIONED| - -- STREAM_PROJECT |PARTITIONED| - -- ASSIGN |PARTITIONED| - -- STREAM_PROJECT |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- DATASOURCE_SCAN (test.orders) |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- EMPTY_TUPLE_SOURCE |PARTITIONED| - -- BROADCAST_EXCHANGE |PARTITIONED| + -- HYBRID_HASH_JOIN [$$324][$$300] |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$324] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ASSIGN |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- DATASOURCE_SCAN (test.stock) |PARTITIONED| + -- HYBRID_HASH_JOIN [$$288][$$304] |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$288] |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- HYBRID_HASH_JOIN [$$291, $$293, $$295][$$305, $$306, $$307] |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$291, $$293, $$295] |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- HYBRID_HASH_JOIN [$$275, $$276][$$310, $$311] |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$275, $$276] |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ASSIGN |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- DATASOURCE_SCAN (test.stock) |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- EMPTY_TUPLE_SOURCE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$310, $$311] |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- STREAM_SELECT |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ASSIGN |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- UNNEST |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ASSIGN |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- DATASOURCE_SCAN (test.orders) |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- EMPTY_TUPLE_SOURCE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$305, $$306, $$307] |PARTITIONED| + -- ASSIGN |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ASSIGN |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- DATASOURCE_SCAN (test.customer) |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- EMPTY_TUPLE_SOURCE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$304] |PARTITIONED| + -- REPLICATE |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ASSIGN |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- DATASOURCE_SCAN (test.nation) |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- EMPTY_TUPLE_SOURCE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$300] |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ASSIGN |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- DATASOURCE_SCAN (test.supplier) |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- EMPTY_TUPLE_SOURCE |PARTITIONED| - -- BROADCAST_EXCHANGE |PARTITIONED| - -- STREAM_PROJECT |PARTITIONED| - -- ASSIGN |PARTITIONED| + -- BROADCAST_EXCHANGE |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- DATASOURCE_SCAN (test.supplier) |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - -- EMPTY_TUPLE_SOURCE |PARTITIONED| + -- ASSIGN |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- REPLICATE |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ASSIGN |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- DATASOURCE_SCAN (test.nation) |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- EMPTY_TUPLE_SOURCE |PARTITIONED| diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q8.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q8.plan index cf15f10..16343e7 100644 --- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q8.plan +++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q8.plan @@ -24,25 +24,25 @@ -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- HYBRID_HASH_JOIN [$$347][$$341] |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$347] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ASSIGN |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- HYBRID_HASH_JOIN [$$308][$$309] |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$308] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- HYBRID_HASH_JOIN [$$311][$$331] |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$311] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- HYBRID_HASH_JOIN [$$313, $$315, $$317][$$333, $$334, $$332] |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$313, $$315, $$317] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- HYBRID_HASH_JOIN [$$306][$$324] |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$306] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- HYBRID_HASH_JOIN [$$296, $$295][$$306, $$336] |PARTITIONED| @@ -68,7 +68,7 @@ -- DATASOURCE_SCAN (test.orders) |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- EMPTY_TUPLE_SOURCE |PARTITIONED| - -- BROADCAST_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$324] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- STREAM_SELECT |PARTITIONED| -- ASSIGN |PARTITIONED| @@ -77,7 +77,7 @@ -- DATASOURCE_SCAN (test.item) |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- EMPTY_TUPLE_SOURCE |PARTITIONED| - -- BROADCAST_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$333, $$334, $$332] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ASSIGN |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| @@ -85,7 +85,7 @@ -- DATASOURCE_SCAN (test.customer) |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- EMPTY_TUPLE_SOURCE |PARTITIONED| - -- BROADCAST_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$331] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ASSIGN |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| @@ -96,7 +96,7 @@ -- DATASOURCE_SCAN (test.nation) |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- EMPTY_TUPLE_SOURCE |PARTITIONED| - -- BROADCAST_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$309] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- STREAM_SELECT |PARTITIONED| -- ASSIGN |PARTITIONED| @@ -105,7 +105,7 @@ -- DATASOURCE_SCAN (test.region) |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- EMPTY_TUPLE_SOURCE |PARTITIONED| - -- BROADCAST_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$341] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ASSIGN |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q9.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q9.plan index 6069455..7283aa0 100644 --- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q9.plan +++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q9.plan @@ -24,13 +24,13 @@ -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- HYBRID_HASH_JOIN [$$228][$$224] |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$228] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ASSIGN |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- HYBRID_HASH_JOIN [$$206][$$207] |PARTITIONED| - -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$206] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- HYBRID_HASH_JOIN [$$200, $$199][$$206, $$217] |PARTITIONED| @@ -54,7 +54,7 @@ -- DATASOURCE_SCAN (test.orders) |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- EMPTY_TUPLE_SOURCE |PARTITIONED| - -- BROADCAST_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$207] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- STREAM_SELECT |PARTITIONED| -- ASSIGN |PARTITIONED| @@ -63,7 +63,7 @@ -- DATASOURCE_SCAN (test.item) |PARTITIONED| -- ONE_TO_ONE_EXCHANGE |PARTITIONED| -- EMPTY_TUPLE_SOURCE |PARTITIONED| - -- BROADCAST_EXCHANGE |PARTITIONED| + -- HASH_PARTITION_EXCHANGE [$$224] |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- ASSIGN |PARTITIONED| -- STREAM_PROJECT |PARTITIONED| -- To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18023 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: Ib65cf139a34d087207dd9a4c7de2ffff4ac50d89 Gerrit-Change-Number: 18023 Gerrit-PatchSet: 3 Gerrit-Owner: Vijay Sarathy <[email protected]> Gerrit-Reviewer: Anon. E. Moose #1000171 Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Vijay Sarathy <[email protected]> Gerrit-Reviewer: [email protected] Gerrit-MessageType: merged
