This is an automated email from the ASF dual-hosted git repository. vsarathy1 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
The following commit(s) were added to refs/heads/master by this push:
new 0670ae1b2f [ASTERIXDB-3462][COMP] Incorrect cardinality estimation
with multicolumn PK-PK self joins
0670ae1b2f is described below
commit 0670ae1b2fd9a3b74ca91716b5b299535846d42e
Author: Vijay Sarathy <[email protected]>
AuthorDate: Thu Jul 18 09:03:29 2024 -0700
[ASTERIXDB-3462][COMP] Incorrect cardinality estimation with multicolumn
PK-PK self joins
Ext-ref: MB-62752
Change-Id: Iabf1d151d996546c24feed5b8c1a23ef401b8054
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18492
Reviewed-by: <[email protected]>
Reviewed-by: Vijay Sarathy <[email protected]>
Tested-by: Jenkins <[email protected]>
---
.../asterix/optimizer/rules/cbo/JoinEnum.java | 16 ++++--
.../optimizerts/results_cbo/ch2/ch2_q10.plan | 20 +++----
.../optimizerts/results_cbo/ch2/ch2_q21.plan | 62 ++++++++++----------
.../optimizerts/results_cbo/ch2/ch2_q5.plan | 64 ++++++++++-----------
.../optimizerts/results_cbo/ch2/ch2_q7.plan | 66 +++++++++++-----------
.../optimizerts/results_cbo/ch2/ch2_q8.plan | 66 +++++++++++-----------
6 files changed, 149 insertions(+), 145 deletions(-)
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 e842b7b1ec..4fa4873c5b 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
@@ -526,12 +526,16 @@ public class JoinEnum {
private void markCompositeJoinPredicates() {
// can use dataSetBits??? This will be simpler.
for (int i = 0; i < joinConditions.size() - 1; i++) {
- for (int j = i + 1; j < joinConditions.size(); j++) {
- if (joinConditions.get(i).datasetBits ==
joinConditions.get(j).datasetBits) {
- joinConditions.get(i).selectivity = 1.0 /
smallerDatasetSize(joinConditions.get(i).datasetBits);
- // 1/P will be the selectivity of the composite clause
- joinConditions.get(j).partOfComposite = true;
- joinConditions.get(j).selectivity = 1.0;
+ JoinCondition jcI = joinConditions.get(i);
+ if (jcI.comparisonType == JoinCondition.comparisonOp.OP_EQ &&
!jcI.partOfComposite) {
+ for (int j = i + 1; j < joinConditions.size(); j++) {
+ JoinCondition jcJ = joinConditions.get(j);
+ if (jcJ.comparisonType == JoinCondition.comparisonOp.OP_EQ
&& jcI.datasetBits == jcJ.datasetBits) {
+ jcI.selectivity = 1.0 /
smallerDatasetSize(jcI.datasetBits);
+ // 1/P will be the selectivity of the composite clause
+ jcJ.partOfComposite = true;
+ jcJ.selectivity = 1.0;
+ }
}
}
}
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q10.plan
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q10.plan
index 30c69fb835..453e13845b 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q10.plan
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q10.plan
@@ -22,16 +22,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$176][$$177]
|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|
+ -- HYBRID_HASH_JOIN [$$177][$$176]
|PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$177]
|PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- HYBRID_HASH_JOIN [$$166, $$171,
$$173][$$170, $$172, $$174] |PARTITIONED|
@@ -57,3 +49,11 @@
--
DATASOURCE_SCAN (test.orders) |PARTITIONED|
--
ONE_TO_ONE_EXCHANGE |PARTITIONED|
--
EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$176]
|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_q21.plan
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q21.plan
index ea3a322fcb..689bec38a5 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q21.plan
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q21.plan
@@ -37,42 +37,16 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
- -- HYBRID_HASH_JOIN
[$$354][$$365] |PARTITIONED|
+ -- HYBRID_HASH_JOIN
[$$365][$$354] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
- -- STREAM_PROJECT
|PARTITIONED|
- -- STREAM_SELECT
|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|
-- STREAM_PROJECT
|PARTITIONED|
-- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
- -- HYBRID_HASH_JOIN
[$$355][$$366] |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE
|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|
+ -- HYBRID_HASH_JOIN
[$$366][$$355] |PARTITIONED|
+ --
HASH_PARTITION_EXCHANGE [$$366] |PARTITIONED|
-- STREAM_PROJECT
|PARTITIONED|
--
ONE_TO_ONE_EXCHANGE |PARTITIONED|
- --
HYBRID_HASH_JOIN [$$351, $$350][$$352, $$362] |PARTITIONED|
- --
ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN
|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|
- --
BROADCAST_EXCHANGE |PARTITIONED|
+ --
HYBRID_HASH_JOIN [$$352, $$362][$$351, $$350] |PARTITIONED|
+ --
HASH_PARTITION_EXCHANGE [$$352, $$362] |PARTITIONED|
--
STREAM_PROJECT |PARTITIONED|
--
ONE_TO_ONE_EXCHANGE |PARTITIONED|
--
NESTED_LOOP |PARTITIONED|
@@ -114,3 +88,29 @@
-- DATASOURCE_SCAN (test.orders) |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ --
HASH_PARTITION_EXCHANGE [$$351, $$350] |PARTITIONED|
+ -- ASSIGN
|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 [$$355] |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|
+ -- STREAM_SELECT
|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_q5.plan
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q5.plan
index 0ce1d15d5f..8de5d0d6de 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
@@ -29,35 +29,27 @@
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- HYBRID_HASH_JOIN [$$256][$$257]
|PARTITIONED|
- -- HASH_PARTITION_EXCHANGE
[$$256] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
-- STREAM_PROJECT
|PARTITIONED|
-- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
- -- HYBRID_HASH_JOIN
[$$274][$$258] |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|
+ -- HYBRID_HASH_JOIN
[$$258][$$274] |PARTITIONED|
+ --
HASH_PARTITION_EXCHANGE [$$258] |PARTITIONED|
-- STREAM_PROJECT
|PARTITIONED|
--
ONE_TO_ONE_EXCHANGE |PARTITIONED|
- --
HYBRID_HASH_JOIN [$$245, $$246][$$254, $$281] |PARTITIONED|
- --
ONE_TO_ONE_EXCHANGE |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|
- --
BROADCAST_EXCHANGE |PARTITIONED|
+ --
HYBRID_HASH_JOIN [$$260, $$254, $$263][$$276, $$277, $$278] |PARTITIONED|
+ --
HASH_PARTITION_EXCHANGE [$$260, $$254, $$263] |PARTITIONED|
--
STREAM_PROJECT |PARTITIONED|
--
ONE_TO_ONE_EXCHANGE |PARTITIONED|
- --
HYBRID_HASH_JOIN [$$260, $$254, $$263][$$276, $$277, $$278] |PARTITIONED|
- --
HASH_PARTITION_EXCHANGE [$$260, $$254, $$263] |PARTITIONED|
+ --
HYBRID_HASH_JOIN [$$245, $$246][$$254, $$281] |PARTITIONED|
+ --
HASH_PARTITION_EXCHANGE [$$245, $$246] |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 [$$254, $$281] |PARTITIONED|
--
STREAM_PROJECT |PARTITIONED|
--
ASSIGN |PARTITIONED|
--
STREAM_PROJECT |PARTITIONED|
@@ -71,15 +63,23 @@
-- DATASOURCE_SCAN (test.orders) |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- --
HASH_PARTITION_EXCHANGE [$$276, $$277, $$278] |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
[$$257] |PARTITIONED|
+ --
HASH_PARTITION_EXCHANGE [$$276, $$277, $$278] |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 [$$274] |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|
-- STREAM_PROJECT
|PARTITIONED|
-- STREAM_SELECT
|PARTITIONED|
-- ASSIGN |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 1ae72b1960..9640d4dff4 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
@@ -29,34 +29,24 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
- -- HYBRID_HASH_JOIN
[$$304][$$288] |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|
+ -- HYBRID_HASH_JOIN
[$$288][$$304] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE
[$$288] |PARTITIONED|
-- STREAM_PROJECT
|PARTITIONED|
-- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
- -- HYBRID_HASH_JOIN
[$$275, $$276][$$310, $$311] |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE
|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|
- -- BROADCAST_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 [$$291, $$293, $$295][$$305, $$306, $$307] |PARTITIONED|
- --
HASH_PARTITION_EXCHANGE [$$291, $$293, $$295] |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|
@@ -70,15 +60,25 @@
-- 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 [$$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|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |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 63d7b2dfd6..4223541036 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
@@ -34,36 +34,27 @@
-- STREAM_PROJECT
|PARTITIONED|
-- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
-- HYBRID_HASH_JOIN
[$$311][$$331] |PARTITIONED|
- --
HASH_PARTITION_EXCHANGE [$$311] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
-- STREAM_PROJECT
|PARTITIONED|
--
ONE_TO_ONE_EXCHANGE |PARTITIONED|
- --
HYBRID_HASH_JOIN [$$324][$$306] |PARTITIONED|
- --
ONE_TO_ONE_EXCHANGE |PARTITIONED|
- --
STREAM_PROJECT |PARTITIONED|
- --
STREAM_SELECT |PARTITIONED|
- --
ASSIGN |PARTITIONED|
- --
STREAM_PROJECT |PARTITIONED|
- --
ONE_TO_ONE_EXCHANGE |PARTITIONED|
- --
DATASOURCE_SCAN (test.item) |PARTITIONED|
-
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- --
BROADCAST_EXCHANGE |PARTITIONED|
+ --
HYBRID_HASH_JOIN [$$306][$$324] |PARTITIONED|
+ --
HASH_PARTITION_EXCHANGE [$$306] |PARTITIONED|
--
STREAM_PROJECT |PARTITIONED|
--
ONE_TO_ONE_EXCHANGE |PARTITIONED|
- --
HYBRID_HASH_JOIN [$$296, $$295][$$306, $$336] |PARTITIONED|
- --
ONE_TO_ONE_EXCHANGE |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|
- --
BROADCAST_EXCHANGE |PARTITIONED|
+ --
HYBRID_HASH_JOIN [$$313, $$315, $$317][$$333, $$334, $$332] |PARTITIONED|
+ --
HASH_PARTITION_EXCHANGE [$$313, $$315, $$317] |PARTITIONED|
--
STREAM_PROJECT |PARTITIONED|
--
ONE_TO_ONE_EXCHANGE |PARTITIONED|
-
-- HYBRID_HASH_JOIN [$$313, $$315, $$317][$$333, $$334, $$332] |PARTITIONED|
-
-- HASH_PARTITION_EXCHANGE [$$313, $$315, $$317] |PARTITIONED|
+
-- HYBRID_HASH_JOIN [$$296, $$295][$$306, $$336] |PARTITIONED|
+
-- HASH_PARTITION_EXCHANGE [$$296, $$295] |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 [$$306, $$336] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -77,15 +68,24 @@
-- DATASOURCE_SCAN (test.orders) |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-
-- HASH_PARTITION_EXCHANGE [$$333, $$334, $$332] |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 [$$331] |PARTITIONED|
+ --
HASH_PARTITION_EXCHANGE [$$333, $$334, $$332] |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 [$$324] |PARTITIONED|
+ --
STREAM_PROJECT |PARTITIONED|
+ --
STREAM_SELECT |PARTITIONED|
+ --
ASSIGN |PARTITIONED|
+ --
STREAM_PROJECT |PARTITIONED|
+ --
ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ --
DATASOURCE_SCAN (test.item) |PARTITIONED|
+
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- BROADCAST_EXCHANGE
|PARTITIONED|
-- STREAM_PROJECT
|PARTITIONED|
-- ASSIGN
|PARTITIONED|
--
ONE_TO_ONE_EXCHANGE |PARTITIONED|
