This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 683a1261c6 [Enhancement](vectorized) Runtime Filter support equivalent slot of outer join (#11530) 683a1261c6 is described below commit 683a1261c67fae55bc0d2e1a78d0f8a8e737cd22 Author: Xinyi Zou <zouxiny...@gmail.com> AuthorDate: Sat Aug 6 08:10:28 2022 +0800 [Enhancement](vectorized) Runtime Filter support equivalent slot of outer join (#11530) --- .../java/org/apache/doris/analysis/Analyzer.java | 21 ++++++++++- .../apache/doris/analysis/ExprSubstitutionMap.java | 11 +++++- .../org/apache/doris/planner/HashJoinNode.java | 2 +- .../suites/tpch_sf1/explain/test_q10.groovy | 16 +++++---- .../suites/tpch_sf1/explain/test_q11.groovy | 20 ++++++----- .../suites/tpch_sf1/explain/test_q17.groovy | 10 +++--- .../suites/tpch_sf1/explain/test_q18.groovy | 16 +++++---- .../suites/tpch_sf1/explain/test_q2.groovy | 41 ++++++++++++++-------- .../suites/tpch_sf1/explain/test_q20.groovy | 15 ++++---- .../suites/tpch_sf1/explain/test_q21.groovy | 17 +++++---- .../suites/tpch_sf1/explain/test_q3.groovy | 10 +++--- .../suites/tpch_sf1/explain/test_q5.groovy | 25 ++++++++----- .../suites/tpch_sf1/explain/test_q7.groovy | 25 ++++++++----- .../suites/tpch_sf1/explain/test_q8.groovy | 34 +++++++++++------- .../suites/tpch_sf1/explain/test_q9.groovy | 19 ++++++---- 15 files changed, 185 insertions(+), 97 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java index 280047477b..9500b8df82 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java @@ -207,6 +207,18 @@ public class Analyzer { return timezone; } + public void putEquivalentSlot(SlotId srcSid, SlotId targetSid) { + globalState.equivalentSlots.put(srcSid, targetSid); + } + + public SlotId getEquivalentSlot(SlotId srcSid) { + return globalState.equivalentSlots.get(srcSid); + } + + public boolean containEquivalentSlot(SlotId srcSid) { + return globalState.equivalentSlots.containsKey(srcSid); + } + public void putAssignedRuntimeFilter(RuntimeFilter rf) { assignedRuntimeFilters.add(rf); } @@ -343,6 +355,8 @@ public class Analyzer { private final long autoBroadcastJoinThreshold; + private final Map<SlotId, SlotId> equivalentSlots = Maps.newHashMap(); + public GlobalState(Env env, ConnectContext context) { this.env = env; this.context = context; @@ -2256,7 +2270,7 @@ public class Analyzer { * TODO(zxy) Use value-transfer graph to check */ public boolean hasValueTransfer(SlotId a, SlotId b) { - return a.equals(b); + return getValueTransferTargets(a).contains(b); } /** @@ -2268,6 +2282,11 @@ public class Analyzer { public List<SlotId> getValueTransferTargets(SlotId srcSid) { List<SlotId> result = new ArrayList<>(); result.add(srcSid); + SlotId equalSlot = srcSid; + while (containEquivalentSlot(equalSlot)) { + result.add(getEquivalentSlot(equalSlot)); + equalSlot = getEquivalentSlot(equalSlot); + } return result; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ExprSubstitutionMap.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ExprSubstitutionMap.java index 41308bdb63..fff47d02c2 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ExprSubstitutionMap.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ExprSubstitutionMap.java @@ -29,6 +29,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.util.List; +import java.util.Objects; /** * Map of expression substitutions: lhs[i] gets substituted with rhs[i]. @@ -162,7 +163,7 @@ public final class ExprSubstitutionMap { * f [A.id, B.id] g [A.id, C.id] * return: g-f [B,id, C,id] */ - public static ExprSubstitutionMap subtraction(ExprSubstitutionMap f, ExprSubstitutionMap g) { + public static ExprSubstitutionMap subtraction(ExprSubstitutionMap f, ExprSubstitutionMap g, Analyzer analyzer) { if (f == null && g == null) { return new ExprSubstitutionMap(); } @@ -176,8 +177,16 @@ public final class ExprSubstitutionMap { for (int i = 0; i < g.size(); i++) { if (f.containsMappingFor(g.lhs.get(i))) { result.put(f.get(g.lhs.get(i)), g.rhs.get(i)); + if (f.get(g.lhs.get(i)) instanceof SlotRef && g.rhs.get(i) instanceof SlotRef) { + analyzer.putEquivalentSlot(((SlotRef) g.rhs.get(i)).getSlotId(), + ((SlotRef) Objects.requireNonNull(f.get(g.lhs.get(i)))).getSlotId()); + } } else { result.put(g.lhs.get(i), g.rhs.get(i)); + if (g.lhs.get(i) instanceof SlotRef && g.rhs.get(i) instanceof SlotRef) { + analyzer.putEquivalentSlot(((SlotRef) g.rhs.get(i)).getSlotId(), + ((SlotRef) g.lhs.get(i)).getSlotId()); + } } } return result; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java index 7f90ca0634..ce290abbae 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java @@ -473,7 +473,7 @@ public class HashJoinNode extends PlanNode { } } // 2. compute srcToOutputMap - vSrcToOutputSMap = ExprSubstitutionMap.subtraction(outputSmap, srcTblRefToOutputTupleSmap); + vSrcToOutputSMap = ExprSubstitutionMap.subtraction(outputSmap, srcTblRefToOutputTupleSmap, analyzer); for (int i = 0; i < vSrcToOutputSMap.size(); i++) { Preconditions.checkState(vSrcToOutputSMap.getRhs().get(i) instanceof SlotRef); SlotRef rSlotRef = (SlotRef) vSrcToOutputSMap.getRhs().get(i); diff --git a/regression-test/suites/tpch_sf1/explain/test_q10.groovy b/regression-test/suites/tpch_sf1/explain/test_q10.groovy index ae1267f94d..364b7a0206 100644 --- a/regression-test/suites/tpch_sf1/explain/test_q10.groovy +++ b/regression-test/suites/tpch_sf1/explain/test_q10.groovy @@ -70,28 +70,32 @@ suite("test_explain_tpch_sf_1_q10", "tpch_sf1") { " | output: sum(<slot 53> * (1 - <slot 54>))\n" + " | group by: <slot 60>, <slot 61>, <slot 62>, <slot 64>, <slot 67>, <slot 63>, <slot 65>") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 52> = `n_nationkey`") && + " | equal join conjunct: <slot 52> = `n_nationkey`\n" + + " | runtime filters: RF000[in_or_bloom] <- `n_nationkey`") && explainStr.contains("vec output tuple id: 8") && explainStr.contains("output slot ids: 53 54 60 61 62 63 64 65 67 \n" + " | hash output slot ids: 48 49 50 51 5 39 40 46 47 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 36> = `c_custkey`") && + " | equal join conjunct: <slot 36> = `c_custkey`\n" + + " | runtime filters: RF001[in_or_bloom] <- `c_custkey`") && explainStr.contains("vec output tuple id: 7") && explainStr.contains("output slot ids: 39 40 46 47 48 49 50 51 52 \n" + " | hash output slot ids: 32 0 33 1 4 6 7 8 14 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[Tables are not in the same group]\n" + " | equal join conjunct: `l_orderkey` = `o_orderkey`\n" + - " | runtime filters: RF000[in_or_bloom] <- `o_orderkey`") && + " | runtime filters: RF002[in_or_bloom] <- `o_orderkey`") && explainStr.contains("vec output tuple id: 6") && explainStr.contains("output slot ids: 32 33 36 \n" + " | hash output slot ids: 2 3 9 ") && explainStr.contains("TABLE: lineitem(lineitem), PREAGGREGATION: ON\n" + " PREDICATES: `l_returnflag` = 'R'\n" + - " runtime filters: RF000[in_or_bloom] -> `l_orderkey`") && + " runtime filters: RF002[in_or_bloom] -> `l_orderkey`") && explainStr.contains("TABLE: nation(nation), PREAGGREGATION: ON") && - explainStr.contains("TABLE: customer(customer), PREAGGREGATION: ON") && + explainStr.contains("TABLE: customer(customer), PREAGGREGATION: ON\n" + + " runtime filters: RF000[in_or_bloom] -> <slot 14>") && explainStr.contains("TABLE: orders(orders), PREAGGREGATION: ON\n" + - " PREDICATES: `o_orderdate` >= '1993-10-01 00:00:00', `o_orderdate` < '1994-01-01 00:00:00'") + " PREDICATES: `o_orderdate` >= '1993-10-01 00:00:00', `o_orderdate` < '1994-01-01 00:00:00'\n" + + " runtime filters: RF001[in_or_bloom] -> <slot 9>") } } diff --git a/regression-test/suites/tpch_sf1/explain/test_q11.groovy b/regression-test/suites/tpch_sf1/explain/test_q11.groovy index 258c0fa230..291bdeaf08 100644 --- a/regression-test/suites/tpch_sf1/explain/test_q11.groovy +++ b/regression-test/suites/tpch_sf1/explain/test_q11.groovy @@ -69,41 +69,45 @@ suite("test_explain_tpch_sf_1_q11", "tpch_sf1") { " | output: sum(<slot 43> * <slot 44>)\n" + " | group by: ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 42> = `n_nationkey`") && + " | equal join conjunct: <slot 42> = `n_nationkey`\n" + + " | runtime filters: RF002[in_or_bloom] <- `n_nationkey`") && explainStr.contains("vec output tuple id: 15") && explainStr.contains("output slot ids: 43 44 \n" + " | hash output slot ids: 38 39 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[Tables are not in the same group]\n" + " | equal join conjunct: `ps_suppkey` = `s_suppkey`\n" + - " | runtime filters: RF001[in_or_bloom] <- `s_suppkey`") && + " | runtime filters: RF003[in_or_bloom] <- `s_suppkey`") && explainStr.contains("vec output tuple id: 14") && explainStr.contains("output slot ids: 38 39 42 \n" + " | hash output slot ids: 16 12 13 ") && explainStr.contains("TABLE: partsupp(partsupp), PREAGGREGATION: ON\n" + - " runtime filters: RF001[in_or_bloom] -> `ps_suppkey`") && + " runtime filters: RF003[in_or_bloom] -> `ps_suppkey`") && explainStr.contains("TABLE: nation(nation), PREAGGREGATION: ON\n" + " PREDICATES: `n_name` = 'GERMANY'") && - explainStr.contains("TABLE: supplier(supplier), PREAGGREGATION: ON") && + explainStr.contains("TABLE: supplier(supplier), PREAGGREGATION: ON\n" + + " runtime filters: RF002[in_or_bloom] -> <slot 16>") && explainStr.contains("VAGGREGATE (update serialize)\n" + " | STREAMING\n" + " | output: sum(<slot 31> * <slot 32>)\n" + " | group by: <slot 30>") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 29> = `n_nationkey`") && + " | equal join conjunct: <slot 29> = `n_nationkey`\n" + + " | runtime filters: RF000[in_or_bloom] <- `n_nationkey`") && explainStr.contains("vec output tuple id: 13") && explainStr.contains("output slot ids: 30 31 32 \n" + " | hash output slot ids: 24 25 26 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[Tables are not in the same group]\n" + " | equal join conjunct: `ps_suppkey` = `s_suppkey`\n" + - " | runtime filters: RF000[in_or_bloom] <- `s_suppkey`") && + " | runtime filters: RF001[in_or_bloom] <- `s_suppkey`") && explainStr.contains("vec output tuple id: 12") && explainStr.contains("output slot ids: 24 25 26 29 \n" + " | hash output slot ids: 0 1 2 5 ") && explainStr.contains("TABLE: partsupp(partsupp), PREAGGREGATION: ON\n" + - " runtime filters: RF000[in_or_bloom] -> `ps_suppkey`") && + " runtime filters: RF001[in_or_bloom] -> `ps_suppkey`") && explainStr.contains("TABLE: nation(nation), PREAGGREGATION: ON\n" + " PREDICATES: `n_name` = 'GERMANY'") && - explainStr.contains("TABLE: supplier(supplier), PREAGGREGATION: ON") + explainStr.contains("TABLE: supplier(supplier), PREAGGREGATION: ON\n" + + " runtime filters: RF000[in_or_bloom] -> <slot 5>") } } diff --git a/regression-test/suites/tpch_sf1/explain/test_q17.groovy b/regression-test/suites/tpch_sf1/explain/test_q17.groovy index 52c184b301..62db272110 100644 --- a/regression-test/suites/tpch_sf1/explain/test_q17.groovy +++ b/regression-test/suites/tpch_sf1/explain/test_q17.groovy @@ -51,19 +51,20 @@ suite("test_explain_tpch_sf_1_q17", "tpch_sf1") { " | group by: ") && explainStr.contains("join op: LEFT SEMI JOIN(BROADCAST)[The src data has been redistributed]\n" + " | equal join conjunct: <slot 17> = <slot 2> `l_partkey`\n" + - " | other join predicates: <slot 32> < 0.2 * <slot 36>") && + " | other join predicates: <slot 32> < 0.2 * <slot 36>\n" + + " | runtime filters: RF000[in_or_bloom] <- <slot 2> `l_partkey`") && explainStr.contains("other join predicates: <slot 32> < 0.2 * <slot 36>") && explainStr.contains("vec output tuple id: 8") && explainStr.contains("output slot ids: 21 \n" + " | hash output slot ids: 3 14 15 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[Tables are not in the same group]\n" + " | equal join conjunct: `l_partkey` = `p_partkey`\n" + - " | runtime filters: RF000[in_or_bloom] <- `p_partkey`") && + " | runtime filters: RF001[in_or_bloom] <- `p_partkey`") && explainStr.contains("vec output tuple id: 7") && explainStr.contains("output slot ids: 14 15 17 \n" + " | hash output slot ids: 6 7 8 ") && explainStr.contains("TABLE: lineitem(lineitem), PREAGGREGATION: ON\n" + - " runtime filters: RF000[in_or_bloom] -> `l_partkey`") && + " runtime filters: RF001[in_or_bloom] -> `l_partkey`") && explainStr.contains("VAGGREGATE (merge finalize)\n" + " | output: avg(<slot 3> avg(`l_quantity`))\n" + " | group by: <slot 2> `l_partkey`") && @@ -73,7 +74,8 @@ suite("test_explain_tpch_sf_1_q17", "tpch_sf1") { " | group by: `l_partkey`") && explainStr.contains("TABLE: lineitem(lineitem), PREAGGREGATION: ON") && explainStr.contains("TABLE: part(part), PREAGGREGATION: ON\n" + - " PREDICATES: `p_brand` = 'Brand#23', `p_container` = 'MED BOX'") + " PREDICATES: `p_brand` = 'Brand#23', `p_container` = 'MED BOX'\n" + + " runtime filters: RF000[in_or_bloom] -> <slot 7>") } } diff --git a/regression-test/suites/tpch_sf1/explain/test_q18.groovy b/regression-test/suites/tpch_sf1/explain/test_q18.groovy index 50cf426a99..fd2f58a92b 100644 --- a/regression-test/suites/tpch_sf1/explain/test_q18.groovy +++ b/regression-test/suites/tpch_sf1/explain/test_q18.groovy @@ -71,28 +71,31 @@ suite("test_explain_tpch_sf_1_q18", "tpch_sf1") { " | output: sum(<slot 53>)\n" + " | group by: <slot 58>, <slot 59>, <slot 54>, <slot 55>, <slot 56>") && explainStr.contains("join op: LEFT SEMI JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 44> = <slot 8> `l_orderkey`") && + " | equal join conjunct: <slot 44> = <slot 8> `l_orderkey`\n" + + " | runtime filters: RF000[in_or_bloom] <- <slot 8> `l_orderkey`") && explainStr.contains("vec output tuple id: 14") && explainStr.contains("output slot ids: 53 54 55 56 58 59 \n" + " | hash output slot ids: 48 50 51 45 46 47 ") && explainStr.contains("join op: LEFT SEMI JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 38> = <slot 2> `l_orderkey`") && + " | equal join conjunct: <slot 38> = <slot 2> `l_orderkey`\n" + + " | runtime filters: RF001[in_or_bloom] <- <slot 2> `l_orderkey`") && explainStr.contains("vec output tuple id: 13") && explainStr.contains("output slot ids: 44 45 46 47 48 50 51 \n" + " | hash output slot ids: 36 37 38 39 40 42 43 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 35> = `c_custkey`") && + " | equal join conjunct: <slot 35> = `c_custkey`\n" + + " | runtime filters: RF002[in_or_bloom] <- `c_custkey`") && explainStr.contains("vec output tuple id: 12") && explainStr.contains("output slot ids: 36 37 38 39 40 42 43 \n" + " | hash output slot ids: 32 33 34 12 13 30 31 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[Tables are not in the same group]\n" + " | equal join conjunct: `l_orderkey` = `o_orderkey`\n" + - " | runtime filters: RF000[in_or_bloom] <- `o_orderkey`") && + " | runtime filters: RF003[in_or_bloom] <- `o_orderkey`") && explainStr.contains("vec output tuple id: 11") && explainStr.contains("output slot ids: 30 31 32 33 34 35 \n" + " | hash output slot ids: 16 17 5 11 14 15 ") && explainStr.contains("TABLE: lineitem(lineitem), PREAGGREGATION: ON\n" + - " runtime filters: RF000[in_or_bloom] -> `l_orderkey`") && + " runtime filters: RF000[in_or_bloom] -> <slot 11>, RF003[in_or_bloom] -> `l_orderkey`") && explainStr.contains("VAGGREGATE (update finalize)\n" + " | output: sum(`l_quantity`)\n" + " | group by: `l_orderkey`") && @@ -102,7 +105,8 @@ suite("test_explain_tpch_sf_1_q18", "tpch_sf1") { " | group by: `l_orderkey`") && explainStr.contains("TABLE: lineitem(lineitem), PREAGGREGATION: ON") && explainStr.contains("TABLE: customer(customer), PREAGGREGATION: ON") && - explainStr.contains("TABLE: orders(orders), PREAGGREGATION: ON") + explainStr.contains("TABLE: orders(orders), PREAGGREGATION: ON\n" + + " runtime filters: RF001[in_or_bloom] -> <slot 5>, RF002[in_or_bloom] -> <slot 17>") } } diff --git a/regression-test/suites/tpch_sf1/explain/test_q2.groovy b/regression-test/suites/tpch_sf1/explain/test_q2.groovy index 3639219f88..37b7f3cf56 100644 --- a/regression-test/suites/tpch_sf1/explain/test_q2.groovy +++ b/regression-test/suites/tpch_sf1/explain/test_q2.groovy @@ -73,33 +73,37 @@ suite("test_explain_tpch_sf_1_q2", "tpch_sf1") { " | order by: <slot 32> `s_acctbal` DESC, <slot 33> `n_name` ASC, <slot 34> `s_name` ASC, <slot 35> `p_partkey` ASC") && explainStr.contains("join op: LEFT SEMI JOIN(BROADCAST)[The src data has been redistributed]\n" + " | equal join conjunct: <slot 78> = <slot 10> min(`ps_supplycost`)\n" + - " | equal join conjunct: <slot 81> = <slot 9> `ps_partkey`") && + " | equal join conjunct: <slot 81> = <slot 9> `ps_partkey`\n" + + " | runtime filters: RF000[in_or_bloom] <- <slot 10> min(`ps_supplycost`), RF001[in_or_bloom] <- <slot 9> `ps_partkey`") && explainStr.contains("vec output tuple id: 19") && explainStr.contains("output slot ids: 121 122 125 126 127 128 129 132 \n" + " | hash output slot ids: 81 82 85 86 87 88 89 92 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 77> = `r_regionkey`") && + " | equal join conjunct: <slot 77> = `r_regionkey`\n" + + " | runtime filters: RF002[in_or_bloom] <- `r_regionkey`") && explainStr.contains("vec output tuple id: 15") && explainStr.contains("output slot ids: 78 81 82 85 86 87 88 89 92 \n" + " | hash output slot ids: 64 65 68 69 70 71 72 75 61 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 60> = `n_nationkey`") && + " | equal join conjunct: <slot 60> = `n_nationkey`\n" + + " | runtime filters: RF003[in_or_bloom] <- `n_nationkey`") && explainStr.contains("vec output tuple id: 14") && explainStr.contains("output slot ids: 61 64 65 68 69 70 71 72 75 77 \n" + " | hash output slot ids: 17 50 51 54 55 56 57 58 29 47 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 42> = `s_suppkey`") && + " | equal join conjunct: <slot 42> = `s_suppkey`\n" + + " | runtime filters: RF004[in_or_bloom] <- `s_suppkey`") && explainStr.contains("vec output tuple id: 13") && explainStr.contains("output slot ids: 47 50 51 54 55 56 57 58 60 \n" + " | hash output slot ids: 16 19 20 21 40 43 27 44 15 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[Tables are not in the same group]\n" + " | equal join conjunct: `ps_partkey` = `p_partkey`\n" + - " | runtime filters: RF000[in_or_bloom] <- `p_partkey`") && + " | runtime filters: RF005[in_or_bloom] <- `p_partkey`") && explainStr.contains("vec output tuple id: 12") && explainStr.contains("output slot ids: 40 42 43 44 \n" + " | hash output slot ids: 18 24 13 14 ") && explainStr.contains("TABLE: partsupp(partsupp), PREAGGREGATION: ON\n" + - " runtime filters: RF000[in_or_bloom] -> `ps_partkey`") && + " runtime filters: RF000[in_or_bloom] -> <slot 13>, RF004[in_or_bloom] -> <slot 24>, RF005[in_or_bloom] -> `ps_partkey`") && explainStr.contains("VAGGREGATE (merge finalize)\n" + " | output: min(<slot 10> min(`ps_supplycost`))\n" + " | group by: <slot 9> `ps_partkey`") && @@ -108,33 +112,40 @@ suite("test_explain_tpch_sf_1_q2", "tpch_sf1") { " | output: min(<slot 109>)\n" + " | group by: <slot 110>") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 108> = `r_regionkey`") && + " | equal join conjunct: <slot 108> = `r_regionkey`\n" + + " | runtime filters: RF006[in_or_bloom] <- `r_regionkey`") && explainStr.contains("vec output tuple id: 18") && explainStr.contains("output slot ids: 109 110 \n" + " | hash output slot ids: 102 103 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 101> = `n_nationkey`") && + " | equal join conjunct: <slot 101> = `n_nationkey`\n" + + " | runtime filters: RF007[in_or_bloom] <- `n_nationkey`") && explainStr.contains("vec output tuple id: 17") && explainStr.contains("output slot ids: 102 103 108 \n" + " | hash output slot ids: 97 98 6 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[Tables are not in the same group]\n" + " | equal join conjunct: `ps_suppkey` = `s_suppkey`\n" + - " | runtime filters: RF001[in_or_bloom] <- `s_suppkey`") && + " | runtime filters: RF008[in_or_bloom] <- `s_suppkey`") && explainStr.contains("vec output tuple id: 16") && explainStr.contains("output slot ids: 97 98 101 \n" + " | hash output slot ids: 0 1 4 ") && explainStr.contains("TABLE: partsupp(partsupp), PREAGGREGATION: ON\n" + - " runtime filters: RF001[in_or_bloom] -> `ps_suppkey`") && + " runtime filters: RF008[in_or_bloom] -> `ps_suppkey`") && explainStr.contains("TABLE: region(region), PREAGGREGATION: ON\n" + " PREDICATES: `r_name` = 'EUROPE'") && - explainStr.contains("TABLE: nation(nation), PREAGGREGATION: ON") && - explainStr.contains("TABLE: supplier(supplier), PREAGGREGATION: ON") && + explainStr.contains("TABLE: nation(nation), PREAGGREGATION: ON\n" + + " runtime filters: RF006[in_or_bloom] -> <slot 6>") && + explainStr.contains("TABLE: supplier(supplier), PREAGGREGATION: ON\n" + + " runtime filters: RF007[in_or_bloom] -> <slot 4>") && explainStr.contains("TABLE: region(region), PREAGGREGATION: ON\n" + " PREDICATES: `r_name` = 'EUROPE'") && - explainStr.contains("TABLE: nation(nation), PREAGGREGATION: ON") && - explainStr.contains("TABLE: supplier(supplier), PREAGGREGATION: ON") && + explainStr.contains("TABLE: nation(nation), PREAGGREGATION: ON\n" + + " runtime filters: RF002[in_or_bloom] -> <slot 29>") && + explainStr.contains("TABLE: supplier(supplier), PREAGGREGATION: ON\n" + + " runtime filters: RF003[in_or_bloom] -> <slot 27>") && explainStr.contains("TABLE: part(part), PREAGGREGATION: ON\n" + - " PREDICATES: `p_size` = 15, `p_type` LIKE '%BRASS'") + " PREDICATES: `p_size` = 15, `p_type` LIKE '%BRASS'\n" + + " runtime filters: RF001[in_or_bloom] -> <slot 14>") } } diff --git a/regression-test/suites/tpch_sf1/explain/test_q20.groovy b/regression-test/suites/tpch_sf1/explain/test_q20.groovy index 1f4a0e05ea..b49d339d77 100644 --- a/regression-test/suites/tpch_sf1/explain/test_q20.groovy +++ b/regression-test/suites/tpch_sf1/explain/test_q20.groovy @@ -63,34 +63,35 @@ suite("test_explain_tpch_sf_1_q20", "tpch_sf1") { explainStr.contains("VTOP-N\n" + " | order by: <slot 23> `s_name` ASC") && explainStr.contains("join op: LEFT SEMI JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 25> = <slot 36>") && + " | equal join conjunct: <slot 25> = <slot 36>\n" + + " | runtime filters: RF000[in_or_bloom] <- <slot 36>") && explainStr.contains("vec output tuple id: 13") && explainStr.contains("output slot ids: 38 39 \n" + " | hash output slot ids: 26 27 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[Tables are not in the same group]\n" + " | equal join conjunct: `s_nationkey` = `n_nationkey`\n" + - " | runtime filters: RF000[in_or_bloom] <- `n_nationkey`") && + " | runtime filters: RF001[in_or_bloom] <- `n_nationkey`") && explainStr.contains("vec output tuple id: 10") && explainStr.contains("output slot ids: 25 26 27 \n" + " | hash output slot ids: 17 18 19 ") && explainStr.contains("TABLE: supplier(supplier), PREAGGREGATION: ON\n" + - " runtime filters: RF000[in_or_bloom] -> `s_nationkey`") && + " runtime filters: RF000[in_or_bloom] -> <slot 17>, RF001[in_or_bloom] -> `s_nationkey`") && explainStr.contains("join op: LEFT SEMI JOIN(BROADCAST)[The src data has been redistributed]\n" + " | equal join conjunct: <slot 33> = <slot 9> `l_suppkey`\n" + " | equal join conjunct: <slot 31> = <slot 8> `l_partkey`\n" + - " | other join predicates: <slot 53> > 0.5 * <slot 57>") && - explainStr.contains("other join predicates: <slot 53> > 0.5 * <slot 57>") && + " | other join predicates: <slot 53> > 0.5 * <slot 57>\n" + + " | runtime filters: RF002[in_or_bloom] <- <slot 9> `l_suppkey`, RF003[in_or_bloom] <- <slot 8> `l_partkey`") && explainStr.contains("vec output tuple id: 12") && explainStr.contains("output slot ids: 36 \n" + " | hash output slot ids: 32 33 10 ") && explainStr.contains("join op: LEFT SEMI JOIN(BROADCAST)[Tables are not in the same group]\n" + " | equal join conjunct: `ps_partkey` = `p_partkey`\n" + - " | runtime filters: RF001[in_or_bloom] <- `p_partkey`") && + " | runtime filters: RF004[in_or_bloom] <- `p_partkey`") && explainStr.contains("vec output tuple id: 11") && explainStr.contains("output slot ids: 31 32 33 \n" + " | hash output slot ids: 3 14 15 ") && explainStr.contains("TABLE: partsupp(partsupp), PREAGGREGATION: ON\n" + - " runtime filters: RF001[in_or_bloom] -> `ps_partkey`") && + " runtime filters: RF002[in_or_bloom] -> <slot 15>, RF003[in_or_bloom] -> <slot 3>, RF004[in_or_bloom] -> `ps_partkey`") && explainStr.contains("VAGGREGATE (merge finalize)\n" + " | output: sum(<slot 10> sum(`l_quantity`))\n" + " | group by: <slot 8> `l_partkey`, <slot 9> `l_suppkey`") && diff --git a/regression-test/suites/tpch_sf1/explain/test_q21.groovy b/regression-test/suites/tpch_sf1/explain/test_q21.groovy index e684b09619..ed2625e7da 100644 --- a/regression-test/suites/tpch_sf1/explain/test_q21.groovy +++ b/regression-test/suites/tpch_sf1/explain/test_q21.groovy @@ -84,30 +84,32 @@ suite("test_explain_tpch_sf_1_q21", "tpch_sf1") { " | hash output slot ids: 114 37 110 ") && explainStr.contains("join op: LEFT SEMI JOIN(BROADCAST)[The src data has been redistributed]\n" + " | equal join conjunct: <slot 100> = `l2`.`l_orderkey`\n" + - " | other join predicates: <slot 155> != <slot 151>") && - explainStr.contains("other join predicates: <slot 155> != <slot 151>") && + " | other join predicates: <slot 155> != <slot 151>\n" + + " | runtime filters: RF000[in_or_bloom] <- `l2`.`l_orderkey`") && explainStr.contains("vec output tuple id: 13") && explainStr.contains("output slot ids: 110 111 114 \n" + " | hash output slot ids: 1 99 100 103 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 96> = `n_nationkey`") && + " | equal join conjunct: <slot 96> = `n_nationkey`\n" + + " | runtime filters: RF001[in_or_bloom] <- `n_nationkey`") && explainStr.contains("vec output tuple id: 12") && explainStr.contains("output slot ids: 99 100 103 \n" + " | hash output slot ids: 90 91 94 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 84> = `o_orderkey`") && + " | equal join conjunct: <slot 84> = `o_orderkey`\n" + + " | runtime filters: RF002[in_or_bloom] <- `o_orderkey`") && explainStr.contains("vec output tuple id: 11") && explainStr.contains("output slot ids: 90 91 94 96 \n" + " | hash output slot ids: 83 84 87 89 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[Tables are not in the same group]\n" + " | equal join conjunct: `l1`.`l_suppkey` = `s_suppkey`\n" + - " | runtime filters: RF000[in_or_bloom] <- `s_suppkey`") && + " | runtime filters: RF003[in_or_bloom] <- `s_suppkey`") && explainStr.contains("vec output tuple id: 10") && explainStr.contains("output slot ids: 83 84 87 89 \n" + " | hash output slot ids: 34 35 70 76 ") && explainStr.contains("TABLE: lineitem(lineitem), PREAGGREGATION: ON\n" + " PREDICATES: `l1`.`l_receiptdate` > `l1`.`l_commitdate`\n" + - " runtime filters: RF000[in_or_bloom] -> `l1`.`l_suppkey`") && + " runtime filters: RF000[in_or_bloom] -> <slot 35>, RF002[in_or_bloom] -> <slot 35>, RF003[in_or_bloom] -> `l1`.`l_suppkey`") && explainStr.contains("TABLE: lineitem(lineitem), PREAGGREGATION: ON\n" + " PREDICATES: `l3`.`l_receiptdate` > `l3`.`l_commitdate`") && explainStr.contains("TABLE: lineitem(lineitem), PREAGGREGATION: ON") && @@ -115,7 +117,8 @@ suite("test_explain_tpch_sf_1_q21", "tpch_sf1") { " PREDICATES: `n_name` = 'SAUDI ARABIA'") && explainStr.contains("TABLE: orders(orders), PREAGGREGATION: ON\n" + " PREDICATES: `o_orderstatus` = 'F'") && - explainStr.contains("TABLE: supplier(supplier), PREAGGREGATION: ON") + explainStr.contains("TABLE: supplier(supplier), PREAGGREGATION: ON\n" + + " runtime filters: RF001[in_or_bloom] -> <slot 76>") } } diff --git a/regression-test/suites/tpch_sf1/explain/test_q3.groovy b/regression-test/suites/tpch_sf1/explain/test_q3.groovy index 61f5c329e6..640deef376 100644 --- a/regression-test/suites/tpch_sf1/explain/test_q3.groovy +++ b/regression-test/suites/tpch_sf1/explain/test_q3.groovy @@ -61,23 +61,25 @@ suite("test_explain_tpch_sf_1_q3", "tpch_sf1") { " | output: sum(<slot 27> * (1 - <slot 28>))\n" + " | group by: <slot 26>, <slot 30>, <slot 31>") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 24> = `c_custkey`") && + " | equal join conjunct: <slot 24> = `c_custkey`\n" + + " | runtime filters: RF000[in_or_bloom] <- `c_custkey`") && explainStr.contains("vec output tuple id: 6") && explainStr.contains("output slot ids: 26 27 28 30 31 \n" + " | hash output slot ids: 18 19 20 22 23 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[Tables are not in the same group]\n" + " | equal join conjunct: `l_orderkey` = `o_orderkey`\n" + - " | runtime filters: RF000[in_or_bloom] <- `o_orderkey`") && + " | runtime filters: RF001[in_or_bloom] <- `o_orderkey`") && explainStr.contains("vec output tuple id: 5") && explainStr.contains("output slot ids: 18 19 20 22 23 24 \n" + " | hash output slot ids: 0 1 2 3 4 7 ") && explainStr.contains("TABLE: lineitem(lineitem), PREAGGREGATION: ON\n" + " PREDICATES: `l_shipdate` > '1995-03-15 00:00:00'\n" + - " runtime filters: RF000[in_or_bloom] -> `l_orderkey`") && + " runtime filters: RF001[in_or_bloom] -> `l_orderkey`") && explainStr.contains("TABLE: customer(customer), PREAGGREGATION: ON\n" + " PREDICATES: `c_mktsegment` = 'BUILDING'") && explainStr.contains("TABLE: orders(orders), PREAGGREGATION: ON\n" + - " PREDICATES: `o_orderdate` < '1995-03-15 00:00:00'") + " PREDICATES: `o_orderdate` < '1995-03-15 00:00:00'\n" + + " runtime filters: RF000[in_or_bloom] -> <slot 7>") } } diff --git a/regression-test/suites/tpch_sf1/explain/test_q5.groovy b/regression-test/suites/tpch_sf1/explain/test_q5.groovy index 946122bb1e..f528a152e0 100644 --- a/regression-test/suites/tpch_sf1/explain/test_q5.groovy +++ b/regression-test/suites/tpch_sf1/explain/test_q5.groovy @@ -62,41 +62,48 @@ suite("test_explain_tpch_sf_1_q5", "tpch_sf1") { " | output: sum(<slot 61> * (1 - <slot 62>))\n" + " | group by: <slot 72>") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 60> = `r_regionkey`") && + " | equal join conjunct: <slot 60> = `r_regionkey`\n" + + " | runtime filters: RF000[in_or_bloom] <- `r_regionkey`") && explainStr.contains("vec output tuple id: 12") && explainStr.contains("output slot ids: 61 62 72 \n" + " | hash output slot ids: 48 58 47 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 44> = `n_nationkey`") && + " | equal join conjunct: <slot 44> = `n_nationkey`\n" + + " | runtime filters: RF001[in_or_bloom] <- `n_nationkey`") && explainStr.contains("vec output tuple id: 11") && explainStr.contains("output slot ids: 47 48 58 60 \n" + " | hash output slot ids: 0 36 37 12 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + " | equal join conjunct: <slot 31> = `c_custkey`\n" + - " | equal join conjunct: <slot 35> = `c_nationkey`") && + " | equal join conjunct: <slot 35> = `c_nationkey`\n" + + " | runtime filters: RF002[in_or_bloom] <- `c_custkey`, RF003[in_or_bloom] <- `c_nationkey`") && explainStr.contains("vec output tuple id: 10") && explainStr.contains("output slot ids: 36 37 44 \n" + " | hash output slot ids: 35 27 28 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 23> = `s_suppkey`") && + " | equal join conjunct: <slot 23> = `s_suppkey`\n" + + " | runtime filters: RF004[in_or_bloom] <- `s_suppkey`") && explainStr.contains("vec output tuple id: 9") && explainStr.contains("output slot ids: 27 28 31 35 \n" + " | hash output slot ids: 20 21 24 10 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[Tables are not in the same group]\n" + " | equal join conjunct: `l_orderkey` = `o_orderkey`\n" + - " | runtime filters: RF000[in_or_bloom] <- `o_orderkey`") && + " | runtime filters: RF005[in_or_bloom] <- `o_orderkey`") && explainStr.contains("vec output tuple id: 8") && explainStr.contains("output slot ids: 20 21 23 24 \n" + " | hash output slot ids: 1 2 4 7 ") && explainStr.contains("TABLE: lineitem(lineitem), PREAGGREGATION: ON\n" + - " runtime filters: RF000[in_or_bloom] -> `l_orderkey`") && + " runtime filters: RF004[in_or_bloom] -> <slot 7>, RF005[in_or_bloom] -> `l_orderkey`") && explainStr.contains("TABLE: region(region), PREAGGREGATION: ON\n" + " PREDICATES: `r_name` = 'ASIA'") && - explainStr.contains("TABLE: nation(nation), PREAGGREGATION: ON") && + explainStr.contains("TABLE: nation(nation), PREAGGREGATION: ON\n" + + " runtime filters: RF000[in_or_bloom] -> <slot 12>") && explainStr.contains("TABLE: customer(customer), PREAGGREGATION: ON") && - explainStr.contains("TABLE: supplier(supplier), PREAGGREGATION: ON") && + explainStr.contains("TABLE: supplier(supplier), PREAGGREGATION: ON\n" + + " runtime filters: RF001[in_or_bloom] -> <slot 10>, RF003[in_or_bloom] -> <slot 10>") && explainStr.contains("TABLE: orders(orders), PREAGGREGATION: ON\n" + - " PREDICATES: `o_orderdate` >= '1994-01-01 00:00:00', `o_orderdate` < '1995-01-01 00:00:00'") + " PREDICATES: `o_orderdate` >= '1994-01-01 00:00:00', `o_orderdate` < '1995-01-01 00:00:00'\n" + + " runtime filters: RF002[in_or_bloom] -> <slot 4>") } } diff --git a/regression-test/suites/tpch_sf1/explain/test_q7.groovy b/regression-test/suites/tpch_sf1/explain/test_q7.groovy index 92495f3410..39b9437b2a 100644 --- a/regression-test/suites/tpch_sf1/explain/test_q7.groovy +++ b/regression-test/suites/tpch_sf1/explain/test_q7.groovy @@ -77,42 +77,49 @@ suite("test_explain_tpch_sf_1_q7", "tpch_sf1") { " | group by: <slot 76>, <slot 80>, year(<slot 67>)") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + " | equal join conjunct: <slot 66> = `n2`.`n_nationkey`\n" + - " | other predicates: ((<slot 113> = 'FRANCE' AND <slot 115> = 'GERMANY') OR (<slot 113> = 'GERMANY' AND <slot 115> = 'FRANCE'))") && + " | other predicates: ((<slot 113> = 'FRANCE' AND <slot 115> = 'GERMANY') OR (<slot 113> = 'GERMANY' AND <slot 115> = 'FRANCE'))\n" + + " | runtime filters: RF000[in_or_bloom] <- `n2`.`n_nationkey`") && explainStr.contains("other predicates: ((<slot 113> = 'FRANCE' AND <slot 115> = 'GERMANY') OR (<slot 113> = 'GERMANY' AND <slot 115> = 'FRANCE'))") && explainStr.contains("vec output tuple id: 13") && explainStr.contains("output slot ids: 67 68 69 76 80 \n" + " | hash output slot ids: 1 54 55 56 63 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 51> = `c_custkey`") && + " | equal join conjunct: <slot 51> = `c_custkey`\n" + + " | runtime filters: RF001[in_or_bloom] <- `c_custkey`") && explainStr.contains("vec output tuple id: 12") && explainStr.contains("output slot ids: 54 55 56 63 66 \n" + " | hash output slot ids: 52 43 44 45 13 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 40> = `n1`.`n_nationkey`") && + " | equal join conjunct: <slot 40> = `n1`.`n_nationkey`\n" + + " | runtime filters: RF002[in_or_bloom] <- `n1`.`n_nationkey`") && explainStr.contains("vec output tuple id: 11") && explainStr.contains("output slot ids: 43 44 45 51 52 \n" + " | hash output slot ids: 0 34 35 36 42 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 31> = `o_orderkey`") && + " | equal join conjunct: <slot 31> = `o_orderkey`\n" + + " | runtime filters: RF003[in_or_bloom] <- `o_orderkey`") && explainStr.contains("vec output tuple id: 10") && explainStr.contains("output slot ids: 34 35 36 40 42 \n" + " | hash output slot ids: 33 10 27 28 29 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[Tables are not in the same group]\n" + " | equal join conjunct: `l_suppkey` = `s_suppkey`\n" + - " | runtime filters: RF000[in_or_bloom] <- `s_suppkey`") && + " | runtime filters: RF004[in_or_bloom] <- `s_suppkey`") && explainStr.contains("vec output tuple id: 9") && explainStr.contains("output slot ids: 27 28 29 31 33 \n" + " | hash output slot ids: 2 3 4 8 11 ") && explainStr.contains("TABLE: lineitem(lineitem), PREAGGREGATION: ON\n" + " PREDICATES: `l_shipdate` >= '1995-01-01 00:00:00', `l_shipdate` <= '1996-12-31 00:00:00'\n" + - " runtime filters: RF000[in_or_bloom] -> `l_suppkey`") && + " runtime filters: RF003[in_or_bloom] -> <slot 8>, RF004[in_or_bloom] -> `l_suppkey`") && explainStr.contains("TABLE: nation(nation), PREAGGREGATION: ON\n" + " PREDICATES: (`n2`.`n_name` = 'FRANCE' OR `n2`.`n_name` = 'GERMANY')") && - explainStr.contains("TABLE: customer(customer), PREAGGREGATION: ON") && + explainStr.contains("TABLE: customer(customer), PREAGGREGATION: ON\n" + + " runtime filters: RF000[in_or_bloom] -> <slot 13>") && explainStr.contains("TABLE: nation(nation), PREAGGREGATION: ON\n" + " PREDICATES: (`n1`.`n_name` = 'FRANCE' OR `n1`.`n_name` = 'GERMANY')") && - explainStr.contains("TABLE: orders(orders), PREAGGREGATION: ON") && - explainStr.contains("TABLE: supplier(supplier), PREAGGREGATION: ON") + explainStr.contains("TABLE: orders(orders), PREAGGREGATION: ON\n" + + " runtime filters: RF001[in_or_bloom] -> <slot 10>") && + explainStr.contains("TABLE: supplier(supplier), PREAGGREGATION: ON\n" + + " runtime filters: RF002[in_or_bloom] -> <slot 11>") } } diff --git a/regression-test/suites/tpch_sf1/explain/test_q8.groovy b/regression-test/suites/tpch_sf1/explain/test_q8.groovy index 5b714a5a2e..7a5dae3fb0 100644 --- a/regression-test/suites/tpch_sf1/explain/test_q8.groovy +++ b/regression-test/suites/tpch_sf1/explain/test_q8.groovy @@ -75,51 +75,61 @@ suite("test_explain_tpch_sf_1_q8", "tpch_sf1") { " | output: sum(CASE WHEN <slot 117> = 'BRAZIL' THEN <slot 105> * (1 - <slot 106>) ELSE 0 END), sum(<slot 105> * (1 - <slot 106>))\n" + " | group by: year(<slot 114>)") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 104> = `r_regionkey`") && + " | equal join conjunct: <slot 104> = `r_regionkey`\n" + + " | runtime filters: RF000[in_or_bloom] <- `r_regionkey`") && explainStr.contains("vec output tuple id: 17") && explainStr.contains("output slot ids: 105 106 114 117 \n" + " | hash output slot ids: 96 99 87 88 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 86> = `n1`.`n_nationkey`") && + " | equal join conjunct: <slot 86> = `n1`.`n_nationkey`\n" + + " | runtime filters: RF001[in_or_bloom] <- `n1`.`n_nationkey`") && explainStr.contains("vec output tuple id: 16") && explainStr.contains("output slot ids: 87 88 96 99 104 \n" + " | hash output slot ids: 80 83 71 72 14 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 68> = `c_custkey`") && + " | equal join conjunct: <slot 68> = `c_custkey`\n" + + " | runtime filters: RF002[in_or_bloom] <- `c_custkey`") && explainStr.contains("vec output tuple id: 15") && explainStr.contains("output slot ids: 71 72 80 83 86 \n" + " | hash output slot ids: 66 69 57 58 12 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 53> = `n2`.`n_nationkey`") && + " | equal join conjunct: <slot 53> = `n2`.`n_nationkey`\n" + + " | runtime filters: RF003[in_or_bloom] <- `n2`.`n_nationkey`") && explainStr.contains("vec output tuple id: 14") && explainStr.contains("output slot ids: 57 58 66 68 69 \n" + " | hash output slot ids: 3 54 56 45 46 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 40> = `o_orderkey`") && + " | equal join conjunct: <slot 40> = `o_orderkey`\n" + + " | runtime filters: RF004[in_or_bloom] <- `o_orderkey`") && explainStr.contains("vec output tuple id: 13") && explainStr.contains("output slot ids: 45 46 53 54 56 \n" + " | hash output slot ids: 0 36 37 10 44 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 32> = `s_suppkey`") && + " | equal join conjunct: <slot 32> = `s_suppkey`\n" + + " | runtime filters: RF005[in_or_bloom] <- `s_suppkey`") && explainStr.contains("vec output tuple id: 12") && explainStr.contains("output slot ids: 36 37 40 44 \n" + " | hash output slot ids: 33 17 29 30 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[Tables are not in the same group]\n" + " | equal join conjunct: `l_partkey` = `p_partkey`\n" + - " | runtime filters: RF000[in_or_bloom] <- `p_partkey`") && + " | runtime filters: RF006[in_or_bloom] <- `p_partkey`") && explainStr.contains("vec output tuple id: 11") && explainStr.contains("output slot ids: 29 30 32 33 \n" + " | hash output slot ids: 1 2 7 8 ") && explainStr.contains("TABLE: lineitem(lineitem), PREAGGREGATION: ON\n" + - " runtime filters: RF000[in_or_bloom] -> `l_partkey`") && + " runtime filters: RF004[in_or_bloom] -> <slot 8>, RF005[in_or_bloom] -> <slot 7>, RF006[in_or_bloom] -> `l_partkey`") && explainStr.contains("TABLE: region(region), PREAGGREGATION: ON\n" + " PREDICATES: `r_name` = 'AMERICA'") && - explainStr.contains("TABLE: nation(nation), PREAGGREGATION: ON") && - explainStr.contains("TABLE: customer(customer), PREAGGREGATION: ON") && + explainStr.contains("TABLE: nation(nation), PREAGGREGATION: ON\n" + + " runtime filters: RF000[in_or_bloom] -> <slot 14>") && + explainStr.contains("TABLE: customer(customer), PREAGGREGATION: ON\n" + + " runtime filters: RF001[in_or_bloom] -> <slot 12>") && explainStr.contains("TABLE: nation(nation), PREAGGREGATION: ON") && explainStr.contains("TABLE: orders(orders), PREAGGREGATION: ON\n" + - " PREDICATES: `o_orderdate` >= '1995-01-01 00:00:00', `o_orderdate` <= '1996-12-31 00:00:00'") && - explainStr.contains("TABLE: supplier(supplier), PREAGGREGATION: ON") && + " PREDICATES: `o_orderdate` >= '1995-01-01 00:00:00', `o_orderdate` <= '1996-12-31 00:00:00'\n" + + " runtime filters: RF002[in_or_bloom] -> <slot 10>") && + explainStr.contains("TABLE: supplier(supplier), PREAGGREGATION: ON\n" + + " runtime filters: RF003[in_or_bloom] -> <slot 17>") && explainStr.contains("TABLE: part(part), PREAGGREGATION: ON\n" + " PREDICATES: `p_type` = 'ECONOMY ANODIZED STEEL'") diff --git a/regression-test/suites/tpch_sf1/explain/test_q9.groovy b/regression-test/suites/tpch_sf1/explain/test_q9.groovy index 23faee3d98..0de8058a70 100644 --- a/regression-test/suites/tpch_sf1/explain/test_q9.groovy +++ b/regression-test/suites/tpch_sf1/explain/test_q9.groovy @@ -69,40 +69,45 @@ suite("test_explain_tpch_sf_1_q9", "tpch_sf1") { " | output: sum(<slot 73> * (1 - <slot 74>) - <slot 81> * <slot 75>)\n" + " | group by: <slot 88>, year(<slot 86>)") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 65> = `n_nationkey`") && + " | equal join conjunct: <slot 65> = `n_nationkey`\n" + + " | runtime filters: RF000[in_or_bloom] <- `n_nationkey`") && explainStr.contains("vec output tuple id: 13") && explainStr.contains("output slot ids: 73 74 75 81 86 88 \n" + " | hash output slot ids: 0 66 71 58 59 60 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 50> = `o_orderkey`") && + " | equal join conjunct: <slot 50> = `o_orderkey`\n" + + " | runtime filters: RF001[in_or_bloom] <- `o_orderkey`") && explainStr.contains("vec output tuple id: 12") && explainStr.contains("output slot ids: 58 59 60 65 66 71 \n" + " | hash output slot ids: 1 52 53 45 46 47 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + - " | equal join conjunct: <slot 38> = `p_partkey`") && + " | equal join conjunct: <slot 38> = `p_partkey`\n" + + " | runtime filters: RF002[in_or_bloom] <- `p_partkey`") && explainStr.contains("vec output tuple id: 11") && explainStr.contains("output slot ids: 45 46 47 50 52 53 \n" + " | hash output slot ids: 34 35 36 39 41 42 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[The src data has been redistributed]\n" + " | equal join conjunct: <slot 29> = `ps_suppkey`\n" + - " | equal join conjunct: <slot 30> = `ps_partkey`") && + " | equal join conjunct: <slot 30> = `ps_partkey`\n" + + " | runtime filters: RF003[in_or_bloom] <- `ps_suppkey`, RF004[in_or_bloom] <- `ps_partkey`") && explainStr.contains("vec output tuple id: 10") && explainStr.contains("output slot ids: 34 35 36 38 39 41 42 \n" + " | hash output slot ids: 33 4 26 27 28 30 31 ") && explainStr.contains("join op: INNER JOIN(BROADCAST)[Tables are not in the same group]\n" + " | equal join conjunct: `l_suppkey` = `s_suppkey`\n" + - " | runtime filters: RF000[in_or_bloom] <- `s_suppkey`") && + " | runtime filters: RF005[in_or_bloom] <- `s_suppkey`") && explainStr.contains("vec output tuple id: 9") && explainStr.contains("output slot ids: 26 27 28 29 30 31 33 \n" + " | hash output slot ids: 2 3 5 7 10 13 14 ") && explainStr.contains("TABLE: lineitem(lineitem), PREAGGREGATION: ON\n" + - " runtime filters: RF000[in_or_bloom] -> `l_suppkey`") && + " runtime filters: RF001[in_or_bloom] -> <slot 13>, RF002[in_or_bloom] -> <slot 10>, RF003[in_or_bloom] -> <slot 7>, RF004[in_or_bloom] -> <slot 10>, RF005[in_or_bloom] -> `l_suppkey`") && explainStr.contains("TABLE: nation(nation), PREAGGREGATION: ON") && explainStr.contains("TABLE: orders(orders), PREAGGREGATION: ON") && explainStr.contains("TABLE: part(part), PREAGGREGATION: ON\n" + " PREDICATES: `p_name` LIKE '%green%'") && explainStr.contains("TABLE: partsupp(partsupp), PREAGGREGATION: ON") && - explainStr.contains("TABLE: supplier(supplier), PREAGGREGATION: ON") + explainStr.contains("TABLE: supplier(supplier), PREAGGREGATION: ON\n" + + " runtime filters: RF000[in_or_bloom] -> <slot 14>") } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org