>From <[email protected]>:
[email protected] has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20516?usp=email )
Change subject: [NO ISSUE][COMP] Fix for failing q10 of ch2++
......................................................................
[NO ISSUE][COMP] Fix for failing q10 of ch2++
Change-Id: If5a1040e8b178612986b00b5e2add652cc2b749a
---
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
M
asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q10.plan
M
asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q18.plan
3 files changed, 86 insertions(+), 80 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/16/20516/1
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
index b9b35c2..0ad51bc 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
@@ -91,6 +91,8 @@
// for the Array UNNEST optimization. The main list is for each leafInput.
private List<List<List<ILogicalOperator>>> unnestOpsInfo;
+ private final List<Boolean> realLeafInputs = new ArrayList();
+
private boolean arrayUnnestPossible = false;
// The Distinct operators for each DataSourceScan operator (if applicable)
private HashMap<DataSourceScanOperator, ILogicalOperator>
dataScanAndGroupByDistinctOps;
@@ -102,7 +104,6 @@
private ILogicalOperator rootOrderByOp;
private List<LogicalVariable> resultAndJoinVars = new ArrayList();
- private final List<Boolean> realLeafInputs = new ArrayList();
private int numberOfFromTerms;
private List<Triple<ILogicalOperator, ILogicalOperator,
List<ILogicalOperator>>> modifyUnnestInfo;
@@ -189,6 +190,7 @@
if (everyLeafInputDoesNotHaveADataScanOperator(leafInputs)) {
return cleanUp();
}
+
if (LOGGER.isTraceEnabled()) {
viewInPlan = new ALogicalPlanImpl(opRef).toString(); //useful when
debugging
}
@@ -208,8 +210,7 @@
//realInput 1 = false
//realInput 2 = false
//realInput 3 = true (KS2)
- //realInput 4 = false
- //Note: The Unnesting code may move UNNEST Ops from the leafInputs
higher up in the plan.
+ //realInput 4 = false -- may not be seen because the last unnest
appears above the join
//The code is not designed to deal with UNNEST Ops that are not in
the leafInputs.
int i = -1;
int j = -1;
@@ -537,20 +538,21 @@
for (ILogicalOperator op : unnestOps) {
UnnestOperator unnestOp = (UnnestOperator) op;
if (anyVarIsAJoinVar(unnestOp.getVariables())) {
- unnestOpsInfo.add(new ArrayList<>()); // each leafInput must
have one entry
//not possible to unnest this unnest op. If these variables
participate in join predicates, then unnestOps cannot be moved above joins
continue;
}
Pair<Boolean, List<ILogicalOperator>> info =
findAllAssociatedAssingOps(p, unnestOp);
if (!info.first) {// something 'bad' happened, so this unnestOp
cannot be unnested
- unnestOpsInfo.add(new ArrayList<>()); // each leafInput must
have one entry
//not possible to unnest this unnest op. If these variables
participate in join predicates, then unnestOps cannot be moved above joins
continue;
}
count++; // found something unnestable
bigList.add(info.second);
}
+ if (count == 0) {
+ unnestOpsInfo.add(new ArrayList<>());
+ }
if (count > 0) {
arrayUnnestPossible = true;
unnestOpsInfo.add(bigList);
@@ -565,9 +567,13 @@
UnnestOperator unnestOp) throws AlgebricksException {
Pair<Boolean, List<ILogicalOperator>> info = new Pair<>(true, new
ArrayList<>());
ILogicalOperator p = leafInput;
+ boolean unnestOpSeen = false;
List<ILogicalOperator> ops = new ArrayList<>(); //Gather all
AssignsOps, if any, associated wth this unnestOp
while (p != null && p.getOperatorTag() !=
LogicalOperatorTag.EMPTYTUPLESOURCE) {
+ if (p == unnestOp) {
+ unnestOpSeen = true;
+ }
if (p.getOperatorTag() == LogicalOperatorTag.ASSIGN) {
AssignOperator aOp = (AssignOperator) p;
@@ -583,7 +589,7 @@
LogicalVariable unnestVar =
unnestOp.getVariables().get(0);
if (unnestVar == var) {
if ((anyVarIsAJoinVar(aOp.getVariables())
- || assignVarPresentInLeafInput(aOp,
leafInput))) {
+ || assignVarPresentInLeafInput(aOp,
leafInput)) || !unnestOpSeen) { // cant handle references inside arrays yet
info.first = false;
return info;
} else {
@@ -599,10 +605,10 @@
ops.add(unnestOp); // the unnestOp will be the last (and may be the
only op)
info.second = ops;
- /*
- unnestOpsInfo.add(bigList); // one for each LeafInput. If empty, means
that there are no array references in this leafInout
- // also need to add some dummy entries for the fake leafInputs. Add as
many as unnestOps. This will make the code in setCardsAndSizes happy
- */
+ // one for each LeafInput. If empty, means that there are no array
references in this leafInout
+ // also need to add some dummy entries for the fake leafInputs. Add as
many as unnestOps.
+ // This will make the code in setCardsAndSizes happy
+
return info;
}
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 6f38358..7e3d906 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
@@ -1,55 +1,69 @@
-distribute result [$$159] [cardinality: 9.223372036854776E16, doc-size: 1.0,
op-cost: 0.0, total-cost: 1.25003000009E12]
+distribute result [$$159] [cardinality: 6.25E16, doc-size: -3.0, op-cost: 0.0,
total-cost: 1.25015E11]
-- DISTRIBUTE_RESULT |UNPARTITIONED|
- exchange [cardinality: 9.223372036854776E16, doc-size: 1.0, op-cost: 0.0,
total-cost: 1.25003000009E12]
+ exchange [cardinality: 6.25E16, doc-size: -3.0, op-cost: 0.0, total-cost:
1.25015E11]
-- ONE_TO_ONE_EXCHANGE |UNPARTITIONED|
- limit 20 [cardinality: 9.223372036854776E16, doc-size: 1.0, op-cost: 0.0,
total-cost: 1.25003000009E12]
+ limit 20 [cardinality: 6.25E16, doc-size: -3.0, op-cost: 0.0, total-cost:
1.25015E11]
-- STREAM_LIMIT |UNPARTITIONED|
- assign [$$159] <- [{"c_id": $$c_id, "c_last": $$c_last, "revenue":
$$175, "c_city": $$c_city, "c_phone": $$c_phone, "n_name": $$n_name}] project:
[$$159] [cardinality: 9.223372036854776E16, doc-size: 1.0, op-cost: 0.0,
total-cost: 1.25003000009E12]
+ assign [$$159] <- [{"c_id": $$c_id, "c_last": $$c_last, "revenue":
$$175, "c_city": $$c_city, "c_phone": $$c_phone, "n_name": $$n_name}] project:
[$$159] [cardinality: 6.25E16, doc-size: -3.0, op-cost: 0.0, total-cost:
1.25015E11]
-- ASSIGN |PARTITIONED|
- exchange [cardinality: 9.223372036854776E16, doc-size: 1.0, op-cost:
0.0, total-cost: 1.25003000009E12]
+ exchange [cardinality: 6.25E16, doc-size: -3.0, op-cost: 0.0,
total-cost: 1.25015E11]
-- SORT_MERGE_EXCHANGE [$$175(DESC) ] |PARTITIONED|
- limit 20 [cardinality: 9.223372036854776E16, doc-size: 1.0, op-cost:
0.0, total-cost: 1.25003000009E12]
+ limit 20 [cardinality: 6.25E16, doc-size: -3.0, op-cost: 0.0,
total-cost: 1.25015E11]
-- STREAM_LIMIT |PARTITIONED|
- exchange [cardinality: 9.223372036854776E16, doc-size: 1.0,
op-cost: 0.0, total-cost: 1.25003000009E12]
+ exchange [cardinality: 6.25E16, doc-size: -3.0, op-cost: 0.0,
total-cost: 1.25015E11]
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (topK: 20) (DESC, $$175) [cardinality:
9.223372036854776E16, doc-size: 1.0, op-cost: 0.0, total-cost: 1.25003000009E12]
+ order (topK: 20) (DESC, $$175) [cardinality: 6.25E16, doc-size:
-3.0, op-cost: 0.0, total-cost: 1.25015E11]
-- STABLE_SORT [topK: 20] [$$175(DESC)] |PARTITIONED|
- exchange [cardinality: 9.223372036854776E16, doc-size: 1.0,
op-cost: 0.0, total-cost: 1.25003000009E12]
+ exchange [cardinality: 6.25E16, doc-size: -3.0, op-cost: 0.0,
total-cost: 1.25015E11]
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- group by ([$$c_id := $$184; $$c_last := $$185; $$c_city :=
$$186; $$c_phone := $$187; $$n_name := $$188]) decor ([]) {
- aggregate [$$175] <- [agg-global-sql-sum($$183)]
[cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+ group by ([$$c_id := $$182; $$c_last := $$183; $$c_city :=
$$184; $$c_phone := $$185; $$n_name := $$186]) decor ([]) {
+ aggregate [$$175] <- [agg-global-sql-sum($$181)]
[cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
-- AGGREGATE |LOCAL|
nested tuple source [cardinality: 0.0, doc-size:
0.0, op-cost: 0.0, total-cost: 0.0]
-- NESTED_TUPLE_SOURCE |LOCAL|
- } [cardinality: 9.223372036854776E16, doc-size: 1.0,
op-cost: 0.0, total-cost: 1.25003000009E12]
- -- SORT_GROUP_BY[$$184, $$185, $$186, $$187, $$188]
|PARTITIONED|
- exchange [cardinality: 9.223372036854776E16, doc-size:
1.0, op-cost: 0.0, total-cost: 1.25003000009E12]
- -- HASH_PARTITION_EXCHANGE [$$184, $$185, $$186, $$187,
$$188] |PARTITIONED|
- group by ([$$184 := $$166; $$185 := $$161; $$186 :=
$$162; $$187 := $$163; $$188 := $$164]) decor ([]) {
- aggregate [$$183] <-
[agg-local-sql-sum($$156)] [cardinality: 0.0, doc-size: 0.0, op-cost: 0.0,
total-cost: 0.0]
+ } [cardinality: 6.25E16, doc-size: -3.0, op-cost:
0.0, total-cost: 1.25015E11]
+ -- SORT_GROUP_BY[$$182, $$183, $$184, $$185, $$186]
|PARTITIONED|
+ exchange [cardinality: 6.25E16, doc-size: -3.0, op-cost:
0.0, total-cost: 1.25015E11]
+ -- HASH_PARTITION_EXCHANGE [$$182, $$183, $$184, $$185,
$$186] |PARTITIONED|
+ group by ([$$182 := $$166; $$183 := $$161; $$184 :=
$$162; $$185 := $$163; $$186 := $$164]) decor ([]) {
+ aggregate [$$181] <-
[agg-local-sql-sum($$156)] [cardinality: 0.0, doc-size: 0.0, op-cost: 0.0,
total-cost: 0.0]
-- AGGREGATE |LOCAL|
nested tuple source [cardinality: 0.0,
doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
-- NESTED_TUPLE_SOURCE |LOCAL|
- } [cardinality: 9.223372036854776E16, doc-size:
1.0, op-cost: 0.0, total-cost: 1.25003000009E12]
+ } [cardinality: 6.25E16, doc-size: -3.0, op-cost:
0.0, total-cost: 1.25015E11]
-- SORT_GROUP_BY[$$166, $$161, $$162, $$163, $$164]
|PARTITIONED|
- exchange [cardinality: 9.223372036854776E16, doc-size:
1.0, op-cost: 0.0, total-cost: 1.25003000009E12]
+ exchange [cardinality: 6.25E16, doc-size: -3.0,
op-cost: 0.0, total-cost: 1.25015E11]
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$156, $$166, $$161, $$162, $$163, $$164])
[cardinality: 9.223372036854776E16, doc-size: 1.0, op-cost: 0.0, total-cost:
1.25003000009E12]
+ project ([$$156, $$166, $$161, $$162, $$163, $$164])
[cardinality: 6.25E16, doc-size: -3.0, op-cost: 0.0, total-cost: 1.25015E11]
-- STREAM_PROJECT |PARTITIONED|
- exchange [cardinality: 9.223372036854776E16,
doc-size: 1.0, op-cost: 0.0, total-cost: 1.25003000009E12]
+ exchange [cardinality: 6.25E16, doc-size: -3.0,
op-cost: 0.0, total-cost: 1.25015E11]
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (eq($$176, $$177)) [cardinality:
9.223372036854776E16, doc-size: 1.0, op-cost: 1.250004E12, total-cost:
1.25003000009E12]
+ join (eq($$176, $$177)) [cardinality: 6.25E16,
doc-size: -3.0, op-cost: 1.25004E11, total-cost: 1.25015E11]
-- HYBRID_HASH_JOIN [$$177][$$176] |PARTITIONED|
- exchange [cardinality: 1.25E12, doc-size: 2.0,
op-cost: 0.0, total-cost: 2.100009E7]
+ exchange [cardinality: 1.25E11, doc-size:
-2.0, op-cost: 0.0, total-cost: 6000000.0]
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$156, $$166, $$161, $$162, $$163,
$$177]) [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0, total-cost:
2.100009E7]
+ project ([$$156, $$166, $$161, $$162, $$163,
$$177]) [cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0, total-cost:
6000000.0]
-- STREAM_PROJECT |PARTITIONED|
- exchange [cardinality: 1.25E12, doc-size:
2.0, op-cost: 0.0, total-cost: 2.100009E7]
+ exchange [cardinality: 1.25E11, doc-size:
-2.0, op-cost: 0.0, total-cost: 6000000.0]
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (and(eq($$166, $$170), eq($$171,
$$172), eq($$173, $$174))) [cardinality: 1.25E12, doc-size: 2.0, op-cost:
1.4E7, total-cost: 2.100009E7]
- -- HYBRID_HASH_JOIN [$$170, $$172,
$$174][$$166, $$171, $$173] |PARTITIONED|
+ join (and(eq($$166, $$170), eq($$171,
$$172), eq($$173, $$174))) [cardinality: 1.25E11, doc-size: -2.0, op-cost:
2000000.0, total-cost: 6000000.0]
+ -- HYBRID_HASH_JOIN [$$166, $$171,
$$173][$$170, $$172, $$174] |PARTITIONED|
exchange [cardinality: 1000000.0,
doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$166,
$$171, $$173] |PARTITIONED|
+ assign [$$177, $$163, $$162, $$161,
$$173, $$171, $$166] <- [get-item(string-to-codepoint($$c.getField("c_state")),
0), $$c.getField("c_phone"), $$c.getField("c_city"), $$c.getField("c_last"),
$$c.getField("c_w_id"), $$c.getField("c_d_id"), $$c.getField("c_id")] project:
[$$166, $$161, $$162, $$163, $$177, $$171, $$173] [cardinality: 1000000.0,
doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- ASSIGN |PARTITIONED|
+ project ([$$c]) [cardinality:
1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange [cardinality:
1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
+ data-scan []<-[$$168, $$c] <-
test.customer [cardinality: 1000000.0, doc-size: -1.0, op-cost: 0.0,
total-cost: 1000000.0]
+ -- DATASOURCE_SCAN
|PARTITIONED|
+ exchange [cardinality: 0.0,
doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
+ empty-tuple-source
[cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- EMPTY_TUPLE_SOURCE
|PARTITIONED|
+ exchange [cardinality: 1000000.0,
doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- HASH_PARTITION_EXCHANGE [$$170,
$$172, $$174] |PARTITIONED|
assign [$$156] <-
[$$ol.getField("ol_amount")] project: [$$156, $$170, $$172, $$174]
[cardinality: 1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
-- ASSIGN |PARTITIONED|
unnest $$ol <-
scan-collection($$179) project: [$$174, $$172, $$170, $$ol] [cardinality:
1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
@@ -68,20 +82,6 @@
-- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
empty-tuple-source
[cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
--
EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange [cardinality: 1000000.0,
doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
- -- BROADCAST_EXCHANGE |PARTITIONED|
- assign [$$177, $$163, $$162, $$161,
$$173, $$171, $$166] <- [get-item(string-to-codepoint($$c.getField("c_state")),
0), $$c.getField("c_phone"), $$c.getField("c_city"), $$c.getField("c_last"),
$$c.getField("c_w_id"), $$c.getField("c_d_id"), $$c.getField("c_id")] project:
[$$166, $$161, $$162, $$163, $$177, $$171, $$173] [cardinality: 1000000.0,
doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
- -- ASSIGN |PARTITIONED|
- project ([$$c]) [cardinality:
1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
- -- STREAM_PROJECT |PARTITIONED|
- exchange [cardinality:
1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
- -- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
- data-scan []<-[$$168, $$c] <-
test.customer [cardinality: 1000000.0, doc-size: -1.0, op-cost: 0.0,
total-cost: 1000000.0]
- -- DATASOURCE_SCAN
|PARTITIONED|
- exchange [cardinality: 0.0,
doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
- empty-tuple-source
[cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- EMPTY_TUPLE_SOURCE
|PARTITIONED|
exchange [cardinality: 1000000.0, doc-size:
-1.0, op-cost: 0.0, total-cost: 1000000.0]
-- BROADCAST_EXCHANGE |PARTITIONED|
assign [$$164, $$176] <-
[$$n.getField("n_name"), $$n.getField("n_nationkey")] project: [$$164, $$176]
[cardinality: 1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q18.plan
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q18.plan
index cdead55..9de7f27 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q18.plan
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q18.plan
@@ -1,55 +1,55 @@
-distribute result [$$169] [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0,
total-cost: 2.100009E7]
+distribute result [$$169] [cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0,
total-cost: 6000000.0]
-- DISTRIBUTE_RESULT |UNPARTITIONED|
- exchange [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0, total-cost:
2.100009E7]
+ exchange [cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0, total-cost:
6000000.0]
-- ONE_TO_ONE_EXCHANGE |UNPARTITIONED|
- limit 100 [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0, total-cost:
2.100009E7]
+ limit 100 [cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0, total-cost:
6000000.0]
-- STREAM_LIMIT |UNPARTITIONED|
- assign [$$169] <- [{"c_last": $$c_last, "o_id": $$c_id, "o_entry_d":
$$o_entry_d, "o_ol_cnt": $$o_ol_cnt, "$1": $$192}] project: [$$169]
[cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0, total-cost: 2.100009E7]
+ assign [$$169] <- [{"c_last": $$c_last, "o_id": $$c_id, "o_entry_d":
$$o_entry_d, "o_ol_cnt": $$o_ol_cnt, "$1": $$192}] project: [$$169]
[cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0, total-cost: 6000000.0]
-- ASSIGN |PARTITIONED|
- project ([$$c_last, $$c_id, $$o_entry_d, $$o_ol_cnt, $$192])
[cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0, total-cost: 2.100009E7]
+ project ([$$c_last, $$c_id, $$o_entry_d, $$o_ol_cnt, $$192])
[cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0, total-cost: 6000000.0]
-- STREAM_PROJECT |PARTITIONED|
- exchange [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0,
total-cost: 2.100009E7]
+ exchange [cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0,
total-cost: 6000000.0]
-- SORT_MERGE_EXCHANGE [$$193(DESC), $$o_entry_d(ASC) ]
|PARTITIONED|
- limit 100 [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0,
total-cost: 2.100009E7]
+ limit 100 [cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0,
total-cost: 6000000.0]
-- STREAM_LIMIT |PARTITIONED|
- exchange [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0,
total-cost: 2.100009E7]
+ exchange [cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0,
total-cost: 6000000.0]
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (topK: 100) (DESC, $$193) (ASC, $$o_entry_d)
[cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0, total-cost: 2.100009E7]
+ order (topK: 100) (DESC, $$193) (ASC, $$o_entry_d)
[cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0, total-cost: 6000000.0]
-- STABLE_SORT [topK: 100] [$$193(DESC), $$o_entry_d(ASC)]
|PARTITIONED|
- exchange [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0,
total-cost: 2.100009E7]
+ exchange [cardinality: 1.25E11, doc-size: -2.0, op-cost:
0.0, total-cost: 6000000.0]
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- select (gt($$191, 200)) project: [$$c_last, $$c_id,
$$o_entry_d, $$o_ol_cnt, $$192, $$193] [cardinality: 1.25E12, doc-size: 2.0,
op-cost: 0.0, total-cost: 2.100009E7]
+ select (gt($$191, 200)) project: [$$c_last, $$c_id,
$$o_entry_d, $$o_ol_cnt, $$192, $$193] [cardinality: 1.25E11, doc-size: -2.0,
op-cost: 0.0, total-cost: 6000000.0]
-- STREAM_SELECT |PARTITIONED|
- project ([$$191, $$192, $$193, $$c_id, $$c_last,
$$o_entry_d, $$o_ol_cnt]) [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0,
total-cost: 2.100009E7]
+ project ([$$191, $$192, $$193, $$c_id, $$c_last,
$$o_entry_d, $$o_ol_cnt]) [cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0,
total-cost: 6000000.0]
-- STREAM_PROJECT |PARTITIONED|
- exchange [cardinality: 1.25E12, doc-size: 2.0,
op-cost: 0.0, total-cost: 2.100009E7]
+ exchange [cardinality: 1.25E11, doc-size: -2.0,
op-cost: 0.0, total-cost: 6000000.0]
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- group by ([$$o_id := $$201; $$o_w_id := $$202;
$$o_d_id := $$203; $$c_id := $$204; $$c_last := $$205; $$o_entry_d := $$206;
$$o_ol_cnt := $$207]) decor ([]) {
- aggregate [$$191, $$192, $$193] <-
[agg-global-sql-sum($$198), agg-global-sql-sum($$199),
agg-global-sql-sum($$200)] [cardinality: 0.0, doc-size: 0.0, op-cost: 0.0,
total-cost: 0.0]
+ group by ([$$o_id := $$199; $$o_w_id := $$200;
$$o_d_id := $$201; $$c_id := $$202; $$c_last := $$203; $$o_entry_d := $$204;
$$o_ol_cnt := $$205]) decor ([]) {
+ aggregate [$$191, $$192, $$193] <-
[agg-global-sql-sum($$196), agg-global-sql-sum($$197),
agg-global-sql-sum($$198)] [cardinality: 0.0, doc-size: 0.0, op-cost: 0.0,
total-cost: 0.0]
-- AGGREGATE |LOCAL|
nested tuple source [cardinality: 0.0,
doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
-- NESTED_TUPLE_SOURCE |LOCAL|
- } [cardinality: 1.25E12, doc-size: 2.0,
op-cost: 0.0, total-cost: 2.100009E7]
- -- SORT_GROUP_BY[$$201, $$202, $$203, $$204, $$205,
$$206, $$207] |PARTITIONED|
- exchange [cardinality: 1.25E12, doc-size: 2.0,
op-cost: 0.0, total-cost: 2.100009E7]
- -- HASH_PARTITION_EXCHANGE [$$201, $$202, $$203,
$$204, $$205, $$206, $$207] |PARTITIONED|
- group by ([$$201 := $$175; $$202 := $$183; $$203
:= $$184; $$204 := $$185; $$205 := $$179; $$206 := $$180; $$207 := $$181])
decor ([]) {
- aggregate [$$198, $$199, $$200] <-
[agg-local-sql-sum($$160), agg-local-sql-sum($$160), agg-local-sql-sum($$160)]
[cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+ } [cardinality: 1.25E11, doc-size: -2.0,
op-cost: 0.0, total-cost: 6000000.0]
+ -- SORT_GROUP_BY[$$199, $$200, $$201, $$202, $$203,
$$204, $$205] |PARTITIONED|
+ exchange [cardinality: 1.25E11, doc-size: -2.0,
op-cost: 0.0, total-cost: 6000000.0]
+ -- HASH_PARTITION_EXCHANGE [$$199, $$200, $$201,
$$202, $$203, $$204, $$205] |PARTITIONED|
+ group by ([$$199 := $$175; $$200 := $$183; $$201
:= $$184; $$202 := $$185; $$203 := $$179; $$204 := $$180; $$205 := $$181])
decor ([]) {
+ aggregate [$$196, $$197, $$198] <-
[agg-local-sql-sum($$160), agg-local-sql-sum($$160), agg-local-sql-sum($$160)]
[cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
-- AGGREGATE |LOCAL|
nested tuple source [cardinality:
0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
-- NESTED_TUPLE_SOURCE |LOCAL|
- } [cardinality: 1.25E12, doc-size: 2.0,
op-cost: 0.0, total-cost: 2.100009E7]
+ } [cardinality: 1.25E11, doc-size: -2.0,
op-cost: 0.0, total-cost: 6000000.0]
-- SORT_GROUP_BY[$$175, $$183, $$184, $$185,
$$179, $$180, $$181] |PARTITIONED|
- exchange [cardinality: 1.25E12, doc-size: 2.0,
op-cost: 0.0, total-cost: 2.100009E7]
+ exchange [cardinality: 1.25E11, doc-size:
-2.0, op-cost: 0.0, total-cost: 6000000.0]
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$160, $$175, $$183, $$184, $$185,
$$179, $$180, $$181]) [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0,
total-cost: 2.100009E7]
+ project ([$$160, $$175, $$183, $$184, $$185,
$$179, $$180, $$181]) [cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0,
total-cost: 6000000.0]
-- STREAM_PROJECT |PARTITIONED|
- exchange [cardinality: 1.25E12, doc-size:
2.0, op-cost: 0.0, total-cost: 2.100009E7]
+ exchange [cardinality: 1.25E11, doc-size:
-2.0, op-cost: 0.0, total-cost: 6000000.0]
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (and(eq($$185, $$188), eq($$189,
$$183), eq($$190, $$184))) [cardinality: 1.25E12, doc-size: 2.0, op-cost:
1.4E7, total-cost: 2.100009E7]
+ join (and(eq($$185, $$188), eq($$189,
$$183), eq($$190, $$184))) [cardinality: 1.25E11, doc-size: -2.0, op-cost:
2000000.0, total-cost: 6000000.0]
-- HYBRID_HASH_JOIN [$$188, $$183,
$$184][$$185, $$189, $$190] |PARTITIONED|
exchange [cardinality: 1000000.0,
doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$188,
$$183, $$184] |PARTITIONED|
assign [$$160] <-
[$$ol.getField("ol_amount")] project: [$$160, $$175, $$183, $$184, $$180,
$$181, $$188] [cardinality: 1000000.0, doc-size: -1.0, op-cost: 0.0,
total-cost: 1000000.0]
-- ASSIGN |PARTITIONED|
unnest $$ol <-
scan-collection($$194) project: [$$181, $$180, $$175, $$188, $$183, $$184,
$$ol] [cardinality: 1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost:
1000000.0]
@@ -67,7 +67,7 @@
empty-tuple-source
[cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
-- EMPTY_TUPLE_SOURCE
|PARTITIONED|
exchange [cardinality: 1000000.0,
doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
- -- BROADCAST_EXCHANGE |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$185,
$$189, $$190] |PARTITIONED|
assign [$$179, $$190, $$189, $$185]
<- [$$c.getField("c_last"), $$c.getField("c_d_id"), $$c.getField("c_w_id"),
$$c.getField("c_id")] project: [$$185, $$179, $$189, $$190] [cardinality:
1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
-- ASSIGN |PARTITIONED|
project ([$$c]) [cardinality:
1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20516?usp=email
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: asterixdb
Gerrit-Branch: phoenix
Gerrit-Change-Id: If5a1040e8b178612986b00b5e2add652cc2b749a
Gerrit-Change-Number: 20516
Gerrit-PatchSet: 1
Gerrit-Owner: [email protected]