This is an automated email from the ASF dual-hosted git repository.
mblow 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 bfc06d9220 [ASTERIXDB-3665]: Follow up - Compute RangeMap at Compile
time
bfc06d9220 is described below
commit bfc06d9220e31df918967c939d7c71812fa6cdeb
Author: Janhavi Tripurwar <[email protected]>
AuthorDate: Mon Dec 15 15:50:57 2025 +0530
[ASTERIXDB-3665]: Follow up - Compute RangeMap at Compile time
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
- Fix test issue
- code cleanup
Ext-ref: MB-68941
Change-Id: Id85ab39b9d6b84db18a73eb3977b38e5516c045d
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20663
Integration-Tests: Jenkins <[email protected]>
Tested-by: Jenkins <[email protected]>
Tested-by: Janhavi Tripurwar <[email protected]>
Reviewed-by: Ali Alsuliman <[email protected]>
---
.../asterix/optimizer/rules/cbo/RangeMapUtil.java | 1 -
.../apache/asterix/api/java/AsterixJavaClient.java | 20 ++-
.../asterix/drivers/AsterixClientDriver.java | 2 +-
.../java/org/apache/asterix/test/dml/DmlTest.java | 4 +-
.../asterix/test/jsonplan/JsonLogicalPlanTest.java | 4 +-
.../asterix/test/optimizer/OptimizerTest.java | 2 +-
.../src/test/resources/optimizerts/ignore.txt | 9 +-
.../distinct_mixed/distinct_mixed.10.plan | 100 ++++++------
.../distinct_mixed/distinct_mixed.11.plan | 130 ++++++++--------
.../distinct_mixed/distinct_mixed.12.plan | 112 +++++++-------
.../distinct_mixed/distinct_mixed.13.plan | 148 +++++++++---------
.../distinct_mixed/distinct_mixed.14.plan | 172 ++++++++++-----------
.../distinct_mixed/distinct_mixed.9.plan | 100 ++++++------
13 files changed, 388 insertions(+), 416 deletions(-)
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/RangeMapUtil.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/RangeMapUtil.java
index 5b44375ad1..e31636ae4b 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/RangeMapUtil.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/RangeMapUtil.java
@@ -230,7 +230,6 @@ public final class RangeMapUtil {
List<OrderColumn> partitionFields) throws AlgebricksException {
IOptimizationContext newCtx =
ctx.getOptimizationContextFactory().cloneOptimizationContext(ctx);
- // copySchema is false because we will re-compute schema later
ILogicalOperator newRoot =
OperatorManipulationUtil.bottomUpCopyOperators(logicalOperator);
replaceAllScansWithSamples(newRoot, newCtx);
OperatorPropertiesUtil.typeOpRec(new MutableObject<>(newRoot), newCtx);
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java
index 6f224640d0..d6fb8d3141 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java
@@ -70,12 +70,10 @@ public class AsterixJavaClient {
private ICcApplicationContext appCtx;
private Map<String, IAObject> statementParams;
private ExecutionPlans executionPlans;
- private final boolean addAnalyzeForOptimizerTests;
public AsterixJavaClient(ICcApplicationContext appCtx,
IHyracksClientConnection hcc, Reader queryText,
PrintWriter writer, ILangCompilationProvider compilationProvider,
- IStatementExecutorFactory statementExecutorFactory,
IStorageComponentProvider storageComponentProvider,
- boolean addAnalyzeForOptimizerTests) {
+ IStatementExecutorFactory statementExecutorFactory,
IStorageComponentProvider storageComponentProvider) {
this.appCtx = appCtx;
this.hcc = hcc;
this.queryText = queryText;
@@ -85,7 +83,6 @@ public class AsterixJavaClient {
this.storageComponentProvider = storageComponentProvider;
apiFramework = new APIFramework(compilationProvider);
parserFactory = compilationProvider.getParserFactory();
- this.addAnalyzeForOptimizerTests = addAnalyzeForOptimizerTests;
}
public AsterixJavaClient(ICcApplicationContext appCtx,
IHyracksClientConnection hcc, Reader queryText,
@@ -94,7 +91,7 @@ public class AsterixJavaClient {
this(appCtx, hcc, queryText,
// This is a commandline client and so System.out is
appropriate
new PrintWriter(System.out, true), // NOSONAR
- compilationProvider, statementExecutorFactory,
storageComponentProvider, false);
+ compilationProvider, statementExecutorFactory,
storageComponentProvider);
}
public void setStatementParameters(Map<String, IAObject> statementParams) {
@@ -102,14 +99,21 @@ public class AsterixJavaClient {
}
public void compile() throws Exception {
- compile(true, false, true, false, false, false, false,
addAnalyzeForOptimizerTests);
+ compile(true, false, true, false, false, false, false);
}
public void compile(boolean optimize, boolean printRewrittenExpressions,
boolean printLogicalPlan,
boolean printOptimizedPlan, boolean printPhysicalOpsOnly, boolean
generateBinaryRuntime, boolean printJob,
- boolean addAnalyzeForOptimizerTests) throws Exception {
+ PlanFormat pformat) throws Exception {
compile(optimize, printRewrittenExpressions, printLogicalPlan,
printOptimizedPlan, printPhysicalOpsOnly,
- generateBinaryRuntime, printJob, PlanFormat.STRING,
addAnalyzeForOptimizerTests);
+ generateBinaryRuntime, printJob, pformat, false);
+ }
+
+ public void compile(boolean optimize, boolean printRewrittenExpressions,
boolean printLogicalPlan,
+ boolean printOptimizedPlan, boolean printPhysicalOpsOnly, boolean
generateBinaryRuntime, boolean printJob)
+ throws Exception {
+ compile(optimize, printRewrittenExpressions, printLogicalPlan,
printOptimizedPlan, printPhysicalOpsOnly,
+ generateBinaryRuntime, printJob, PlanFormat.STRING, false);
}
public void compile(boolean optimize, boolean printRewrittenExpressions,
boolean printLogicalPlan,
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/drivers/AsterixClientDriver.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/drivers/AsterixClientDriver.java
index 07f1d3d23c..4b5261b374 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/drivers/AsterixClientDriver.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/drivers/AsterixClientDriver.java
@@ -67,7 +67,7 @@ public class AsterixClientDriver {
FileReader reader = new FileReader(filename);
AsterixJavaClient q = new AsterixJavaClient(null, hcc, reader,
compilationProvider,
new DefaultStatementExecutorFactory(), new
StorageComponentProvider());
- q.compile(optimize, true, true, true, onlyPhysical,
createBinaryRuntime, createBinaryRuntime, false);
+ q.compile(optimize, true, true, true, onlyPhysical,
createBinaryRuntime, createBinaryRuntime);
return q;
}
diff --git
a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dml/DmlTest.java
b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dml/DmlTest.java
index 5556a85119..c7bf3b4a14 100644
---
a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dml/DmlTest.java
+++
b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dml/DmlTest.java
@@ -69,9 +69,9 @@ public class DmlTest {
new AsterixJavaClient((ICcApplicationContext)
integrationUtil.cc.getApplicationContext(),
integrationUtil.getHyracksClientConnection(),
loadReader, ERR,
new SqlppCompilationProvider(new
NamespaceResolver(false)),
- new DefaultStatementExecutorFactory(), new
StorageComponentProvider(), false);
+ new DefaultStatementExecutorFactory(), new
StorageComponentProvider());
try {
- asterixLoad.compile(true, false, false, false, false, true, false,
false);
+ asterixLoad.compile(true, false, false, false, false, true, false);
} catch (AsterixException e) {
throw new Exception("Compile ERROR for " + LOAD_FOR_ENLIST_FILE +
": " + e.getMessage(), e);
} finally {
diff --git
a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/jsonplan/JsonLogicalPlanTest.java
b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/jsonplan/JsonLogicalPlanTest.java
index 37f3cfaa73..d68586a7ba 100644
---
a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/jsonplan/JsonLogicalPlanTest.java
+++
b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/jsonplan/JsonLogicalPlanTest.java
@@ -86,9 +86,9 @@ public class JsonLogicalPlanTest extends
AbstractOptimizerTest {
try (PrintWriter plan = new PrintWriter(actualFile)) {
AsterixJavaClient asterix = new AsterixJavaClient(
(ICcApplicationContext)
integrationUtil.cc.getApplicationContext(), hcc, new StringReader(query),
- plan, provider, statementExecutorFactory,
storageComponentProvider, false);
+ plan, provider, statementExecutorFactory,
storageComponentProvider);
asterix.setStatementParameters(queryParams);
- asterix.compile(true, false, !optimized, optimized, false, false,
false, PlanFormat.JSON, false);
+ asterix.compile(true, false, !optimized, optimized, false, false,
false, PlanFormat.JSON);
ExecutionPlans executionPlans = asterix.getExecutionPlans();
planStr = optimized ? executionPlans.getOptimizedLogicalPlan() :
executionPlans.getLogicalPlan();
plan.write(planStr);
diff --git
a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/optimizer/OptimizerTest.java
b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/optimizer/OptimizerTest.java
index cfe5445c23..32bb651f61 100644
---
a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/optimizer/OptimizerTest.java
+++
b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/optimizer/OptimizerTest.java
@@ -83,7 +83,7 @@ public class OptimizerTest extends AbstractOptimizerTest {
try (PrintWriter plan = new PrintWriter(actualFile)) {
AsterixJavaClient asterix = new AsterixJavaClient(
(ICcApplicationContext)
integrationUtil.cc.getApplicationContext(), hcc, new StringReader(query),
- plan, provider, statementExecutorFactory,
storageComponentProvider, true);
+ plan, provider, statementExecutorFactory,
storageComponentProvider);
asterix.setStatementParameters(queryParams);
asterix.compile(true, false, true, true, false, false, false,
SessionConfig.PlanFormat.STRING, false);
ExecutionPlans executionPlans = asterix.getExecutionPlans();
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/ignore.txt
b/asterixdb/asterix-app/src/test/resources/optimizerts/ignore.txt
index 7e6fde4af6..efc2e39427 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/ignore.txt
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/ignore.txt
@@ -18,11 +18,4 @@
#
distinct_aggregate.aql
unnest_list_in_subplan.aql
-fj-phase2-with-hints.aql
-//TODO(janhavi): enable tests later
-aggregate-sql-sugar/distinct_mixed/distinct_mixed.9.sqlpp
-aggregate-sql-sugar/distinct_mixed/distinct_mixed.10.sqlpp
-aggregate-sql-sugar/distinct_mixed/distinct_mixed.11.sqlpp
-aggregate-sql-sugar/distinct_mixed/distinct_mixed.12.sqlpp
-aggregate-sql-sugar/distinct_mixed/distinct_mixed.13.sqlpp
-aggregate-sql-sugar/distinct_mixed/distinct_mixed.14.sqlpp
\ No newline at end of file
+fj-phase2-with-hints.aql
\ No newline at end of file
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.10.plan
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.10.plan
index 29ceba9d0f..6d59cf8b10 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.10.plan
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.10.plan
@@ -1,69 +1,65 @@
-distribute result [$$79]
+distribute result [$$89]
-- DISTRIBUTE_RESULT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$79] <- [{"g": $$g, "count_distinct_x": $$82, "sum_distinct_x":
$$83}] project: [$$79]
+ assign [$$89] <- [{"g": $$g, "count_distinct_x": $$92, "sum_distinct_x":
$$93}] project: [$$89]
-- ASSIGN |PARTITIONED|
exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (ASC, $$g)
- -- STABLE_SORT [$$g(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$g(ASC) ] |PARTITIONED|
+ group by ([$$g := $$g]) decor ([]) {
+ aggregate [$$92, $$93] <- [agg-sql-count($$82),
agg-sql-sum($$82)]
+ -- AGGREGATE |LOCAL|
+ distinct ([$$82])
+ -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
+ order (ASC, $$82)
+ -- MICRO_STABLE_SORT [$$82(ASC)] |LOCAL|
+ project ([$$82])
+ -- STREAM_PROJECT |LOCAL|
+ nested tuple source
+ -- NESTED_TUPLE_SOURCE |LOCAL|
+ }
+ -- PRE_CLUSTERED_GROUP_BY[$$g] |PARTITIONED|
exchange
- -- RANGE_PARTITION_EXCHANGE [$$g(ASC)] RANGE_MAP:{SPLIT:1}
|PARTITIONED|
- group by ([$$g := $$g]) decor ([]) {
- aggregate [$$82, $$83] <- [agg-sql-count($$72),
agg-sql-sum($$72)]
- -- AGGREGATE |LOCAL|
- distinct ([$$72])
- -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
- order (ASC, $$72)
- -- MICRO_STABLE_SORT [$$72(ASC)] |LOCAL|
- project ([$$72])
- -- STREAM_PROJECT |LOCAL|
- nested tuple source
- -- NESTED_TUPLE_SOURCE |LOCAL|
- }
- -- PRE_CLUSTERED_GROUP_BY[$$g] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ order (ASC, $$g)
+ -- STABLE_SORT [$$g(ASC)] |PARTITIONED|
exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (ASC, $$g)
- -- STABLE_SORT [$$g(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$g] |PARTITIONED|
+ join (true)
+ -- NESTED_LOOP |PARTITIONED|
exchange
- -- HASH_PARTITION_EXCHANGE [$$g] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
join (true)
-- NESTED_LOOP |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (true)
- -- NESTED_LOOP |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$72] <- [$$x.getField(1)] project: [$$72]
- -- ASSIGN |PARTITIONED|
- project ([$$x])
- -- STREAM_PROJECT |PARTITIONED|
+ assign [$$82] <- [$$x.getField(1)] project: [$$82]
+ -- ASSIGN |PARTITIONED|
+ project ([$$x])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$90, $$x] <- test.d1
+ -- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$80, $$x] <- test.d1
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ project ([])
+ -- STREAM_PROJECT |PARTITIONED|
exchange
- -- BROADCAST_EXCHANGE |PARTITIONED|
- project ([])
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$91, $$y] <- test.d2
+ -- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$81, $$y] <- test.d2
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange
- -- BROADCAST_EXCHANGE |PARTITIONED|
- unnest $$g <- range(1, 3)
- -- UNNEST |UNPARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ unnest $$g <- range(1, 3)
+ -- UNNEST |UNPARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.11.plan
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.11.plan
index 6af79fa52b..da59da4adb 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.11.plan
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.11.plan
@@ -1,83 +1,79 @@
-distribute result [$$79]
+distribute result [$$89]
-- DISTRIBUTE_RESULT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$79] <- [{"g": $$g, "sum_distinct_x": $$82, "sum_distinct_y":
$$83}] project: [$$79]
+ assign [$$89] <- [{"g": $$g, "sum_distinct_x": $$92, "sum_distinct_y":
$$93}] project: [$$89]
-- ASSIGN |PARTITIONED|
exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (ASC, $$g)
- -- STABLE_SORT [$$g(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$g(ASC) ] |PARTITIONED|
+ group by ([$$g := $$g]) decor ([]) {
+ aggregate [$$92] <- [agg-sql-sum($$82)]
+ -- AGGREGATE |LOCAL|
+ distinct ([$$82])
+ -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
+ order (ASC, $$82)
+ -- MICRO_STABLE_SORT [$$82(ASC)] |LOCAL|
+ project ([$$82])
+ -- STREAM_PROJECT |LOCAL|
+ nested tuple source
+ -- NESTED_TUPLE_SOURCE |LOCAL|
+ }
+ {
+ aggregate [$$93] <- [agg-sql-sum($$87)]
+ -- AGGREGATE |LOCAL|
+ distinct ([$$87])
+ -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
+ order (ASC, $$87)
+ -- MICRO_STABLE_SORT [$$87(ASC)] |LOCAL|
+ project ([$$87])
+ -- STREAM_PROJECT |LOCAL|
+ nested tuple source
+ -- NESTED_TUPLE_SOURCE |LOCAL|
+ }
+ -- PRE_CLUSTERED_GROUP_BY[$$g] |PARTITIONED|
exchange
- -- RANGE_PARTITION_EXCHANGE [$$g(ASC)] RANGE_MAP:{SPLIT:1}
|PARTITIONED|
- group by ([$$g := $$g]) decor ([]) {
- aggregate [$$82] <- [agg-sql-sum($$72)]
- -- AGGREGATE |LOCAL|
- distinct ([$$72])
- -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
- order (ASC, $$72)
- -- MICRO_STABLE_SORT [$$72(ASC)] |LOCAL|
- project ([$$72])
- -- STREAM_PROJECT |LOCAL|
- nested tuple source
- -- NESTED_TUPLE_SOURCE |LOCAL|
- }
- {
- aggregate [$$83] <- [agg-sql-sum($$77)]
- -- AGGREGATE |LOCAL|
- distinct ([$$77])
- -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
- order (ASC, $$77)
- -- MICRO_STABLE_SORT [$$77(ASC)] |LOCAL|
- project ([$$77])
- -- STREAM_PROJECT |LOCAL|
- nested tuple source
- -- NESTED_TUPLE_SOURCE |LOCAL|
- }
- -- PRE_CLUSTERED_GROUP_BY[$$g] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ order (ASC, $$g)
+ -- STABLE_SORT [$$g(ASC)] |PARTITIONED|
exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (ASC, $$g)
- -- STABLE_SORT [$$g(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$g] |PARTITIONED|
+ join (true)
+ -- NESTED_LOOP |PARTITIONED|
exchange
- -- HASH_PARTITION_EXCHANGE [$$g] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
join (true)
-- NESTED_LOOP |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (true)
- -- NESTED_LOOP |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$72] <- [$$x.getField(1)] project: [$$72]
- -- ASSIGN |PARTITIONED|
- project ([$$x])
- -- STREAM_PROJECT |PARTITIONED|
+ assign [$$82] <- [$$x.getField(1)] project: [$$82]
+ -- ASSIGN |PARTITIONED|
+ project ([$$x])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$90, $$x] <- test.d1
+ -- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$80, $$x] <- test.d1
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange
- -- BROADCAST_EXCHANGE |PARTITIONED|
- assign [$$77] <- [$$y.getField(1)] project: [$$77]
- -- ASSIGN |PARTITIONED|
- project ([$$y])
- -- STREAM_PROJECT |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$81, $$y] <- test.d2
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
exchange
-- BROADCAST_EXCHANGE |PARTITIONED|
- unnest $$g <- range(1, 3)
- -- UNNEST |UNPARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
+ assign [$$87] <- [$$y.getField(1)] project: [$$87]
+ -- ASSIGN |PARTITIONED|
+ project ([$$y])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$91, $$y] <- test.d2
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ unnest $$g <- range(1, 3)
+ -- UNNEST |UNPARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.12.plan
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.12.plan
index 8eff992fca..32f1965c4a 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.12.plan
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.12.plan
@@ -1,75 +1,71 @@
-distribute result [$$88]
+distribute result [$$98]
-- DISTRIBUTE_RESULT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$88] <- [{"g": $$g, "sum_x": $$91, "sum_distinct_x": $$92,
"sum_distinct_y": $$93}] project: [$$88]
+ assign [$$98] <- [{"g": $$g, "sum_x": $$101, "sum_distinct_x": $$102,
"sum_distinct_y": $$103}] project: [$$98]
-- ASSIGN |PARTITIONED|
exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (ASC, $$g)
- -- STABLE_SORT [$$g(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$g(ASC) ] |PARTITIONED|
+ group by ([$$g := $$g]) decor ([]) {
+ aggregate [$$101] <- [agg-sql-sum($$86)]
+ -- AGGREGATE |LOCAL|
+ nested tuple source
+ -- NESTED_TUPLE_SOURCE |LOCAL|
+ }
+ {
+ aggregate [$$102, $$103] <- [agg-sql-sum($$86),
agg-sql-sum($$86)]
+ -- AGGREGATE |LOCAL|
+ distinct ([$$86])
+ -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
+ order (ASC, $$86)
+ -- MICRO_STABLE_SORT [$$86(ASC)] |LOCAL|
+ project ([$$86])
+ -- STREAM_PROJECT |LOCAL|
+ nested tuple source
+ -- NESTED_TUPLE_SOURCE |LOCAL|
+ }
+ -- PRE_CLUSTERED_GROUP_BY[$$g] |PARTITIONED|
exchange
- -- RANGE_PARTITION_EXCHANGE [$$g(ASC)] RANGE_MAP:{SPLIT:1}
|PARTITIONED|
- group by ([$$g := $$g]) decor ([]) {
- aggregate [$$91] <- [agg-sql-sum($$76)]
- -- AGGREGATE |LOCAL|
- nested tuple source
- -- NESTED_TUPLE_SOURCE |LOCAL|
- }
- {
- aggregate [$$92, $$93] <- [agg-sql-sum($$76),
agg-sql-sum($$76)]
- -- AGGREGATE |LOCAL|
- distinct ([$$76])
- -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
- order (ASC, $$76)
- -- MICRO_STABLE_SORT [$$76(ASC)] |LOCAL|
- project ([$$76])
- -- STREAM_PROJECT |LOCAL|
- nested tuple source
- -- NESTED_TUPLE_SOURCE |LOCAL|
- }
- -- PRE_CLUSTERED_GROUP_BY[$$g] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ order (ASC, $$g)
+ -- STABLE_SORT [$$g(ASC)] |PARTITIONED|
exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (ASC, $$g)
- -- STABLE_SORT [$$g(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$g] |PARTITIONED|
+ join (true)
+ -- NESTED_LOOP |PARTITIONED|
exchange
- -- HASH_PARTITION_EXCHANGE [$$g] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
join (true)
-- NESTED_LOOP |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (true)
- -- NESTED_LOOP |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$76] <- [$$x.getField(1)] project: [$$76]
- -- ASSIGN |PARTITIONED|
- project ([$$x])
- -- STREAM_PROJECT |PARTITIONED|
+ assign [$$86] <- [$$x.getField(1)] project: [$$86]
+ -- ASSIGN |PARTITIONED|
+ project ([$$x])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$99, $$x] <- test.d1
+ -- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$89, $$x] <- test.d1
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ project ([])
+ -- STREAM_PROJECT |PARTITIONED|
exchange
- -- BROADCAST_EXCHANGE |PARTITIONED|
- project ([])
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$100, $$y] <- test.d2
+ -- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$90, $$y] <- test.d2
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange
- -- BROADCAST_EXCHANGE |PARTITIONED|
- unnest $$g <- range(1, 3)
- -- UNNEST |UNPARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ unnest $$g <- range(1, 3)
+ -- UNNEST |UNPARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.13.plan
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.13.plan
index 486c0ecd11..af7c8343de 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.13.plan
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.13.plan
@@ -1,52 +1,52 @@
-distribute result [$$100]
+distribute result [$$112]
-- DISTRIBUTE_RESULT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$100] <- [{"g": $$g, "sum_distinct_x": $$104, "sum_y": $$105,
"sum_distinct_z": $$106}] project: [$$100]
+ assign [$$112] <- [{"g": $$g, "sum_distinct_x": $$116, "sum_y": $$117,
"sum_distinct_z": $$118}] project: [$$112]
-- ASSIGN |PARTITIONED|
exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (ASC, $$g)
- -- STABLE_SORT [$$g(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$g(ASC) ] |PARTITIONED|
+ group by ([$$g := $$g]) decor ([]) {
+ aggregate [$$116] <- [agg-sql-sum($$100)]
+ -- AGGREGATE |LOCAL|
+ distinct ([$$100])
+ -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
+ order (ASC, $$100)
+ -- MICRO_STABLE_SORT [$$100(ASC)] |LOCAL|
+ project ([$$100])
+ -- STREAM_PROJECT |LOCAL|
+ nested tuple source
+ -- NESTED_TUPLE_SOURCE |LOCAL|
+ }
+ {
+ aggregate [$$117] <- [agg-sql-sum($$105)]
+ -- AGGREGATE |LOCAL|
+ nested tuple source
+ -- NESTED_TUPLE_SOURCE |LOCAL|
+ }
+ {
+ aggregate [$$118] <- [agg-sql-sum($$110)]
+ -- AGGREGATE |LOCAL|
+ distinct ([$$110])
+ -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
+ order (ASC, $$110)
+ -- MICRO_STABLE_SORT [$$110(ASC)] |LOCAL|
+ project ([$$110])
+ -- STREAM_PROJECT |LOCAL|
+ nested tuple source
+ -- NESTED_TUPLE_SOURCE |LOCAL|
+ }
+ -- PRE_CLUSTERED_GROUP_BY[$$g] |PARTITIONED|
exchange
- -- RANGE_PARTITION_EXCHANGE [$$g(ASC)] RANGE_MAP:{SPLIT:1}
|PARTITIONED|
- group by ([$$g := $$g]) decor ([]) {
- aggregate [$$104] <- [agg-sql-sum($$88)]
- -- AGGREGATE |LOCAL|
- distinct ([$$88])
- -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
- order (ASC, $$88)
- -- MICRO_STABLE_SORT [$$88(ASC)] |LOCAL|
- project ([$$88])
- -- STREAM_PROJECT |LOCAL|
- nested tuple source
- -- NESTED_TUPLE_SOURCE |LOCAL|
- }
- {
- aggregate [$$105] <- [agg-sql-sum($$93)]
- -- AGGREGATE |LOCAL|
- nested tuple source
- -- NESTED_TUPLE_SOURCE |LOCAL|
- }
- {
- aggregate [$$106] <- [agg-sql-sum($$98)]
- -- AGGREGATE |LOCAL|
- distinct ([$$98])
- -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
- order (ASC, $$98)
- -- MICRO_STABLE_SORT [$$98(ASC)] |LOCAL|
- project ([$$98])
- -- STREAM_PROJECT |LOCAL|
- nested tuple source
- -- NESTED_TUPLE_SOURCE |LOCAL|
- }
- -- PRE_CLUSTERED_GROUP_BY[$$g] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ order (ASC, $$g)
+ -- STABLE_SORT [$$g(ASC)] |PARTITIONED|
exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (ASC, $$g)
- -- STABLE_SORT [$$g(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$g] |PARTITIONED|
+ join (true)
+ -- NESTED_LOOP |PARTITIONED|
exchange
- -- HASH_PARTITION_EXCHANGE [$$g] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
join (true)
-- NESTED_LOOP |PARTITIONED|
exchange
@@ -55,45 +55,27 @@ distribute result [$$100]
-- NESTED_LOOP |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (true)
- -- NESTED_LOOP |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$88] <- [$$x.getField(1)] project:
[$$88]
- -- ASSIGN |PARTITIONED|
- project ([$$x])
- -- STREAM_PROJECT |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$101, $$x] <- test.d1
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange
- -- BROADCAST_EXCHANGE |PARTITIONED|
- assign [$$93] <- [$$y.getField(1)] project:
[$$93]
- -- ASSIGN |PARTITIONED|
- project ([$$y])
- -- STREAM_PROJECT |PARTITIONED|
+ assign [$$100] <- [$$x.getField(1)] project:
[$$100]
+ -- ASSIGN |PARTITIONED|
+ project ([$$x])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$113, $$x] <- test.d1
+ -- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$102, $$y] <- test.d2
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
exchange
-- BROADCAST_EXCHANGE |PARTITIONED|
- assign [$$98] <- [$$z.getField(1)] project: [$$98]
+ assign [$$105] <- [$$y.getField(1)] project:
[$$105]
-- ASSIGN |PARTITIONED|
- project ([$$z])
+ project ([$$y])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$103, $$z] <- test.d3
+ data-scan []<-[$$114, $$y] <- test.d2
-- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -101,7 +83,21 @@ distribute result [$$100]
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
exchange
-- BROADCAST_EXCHANGE |PARTITIONED|
- unnest $$g <- range(1, 3)
- -- UNNEST |UNPARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
+ assign [$$110] <- [$$z.getField(1)] project: [$$110]
+ -- ASSIGN |PARTITIONED|
+ project ([$$z])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$115, $$z] <- test.d3
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ unnest $$g <- range(1, 3)
+ -- UNNEST |UNPARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.14.plan
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.14.plan
index 8ff30293ad..21e98f45d6 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.14.plan
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.14.plan
@@ -1,64 +1,64 @@
-distribute result [$$154]
+distribute result [$$166]
-- DISTRIBUTE_RESULT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$154] <- [{"g": $$g, "sum_distinct_x": $$158, "sum_y": $$159,
"sum_distinct_z": $$160, "avg_distinct_x": $$161, "avg_distinct_y": $$162,
"count_x": $$163, "count_distinct_y": $$164, "avg_z": $$165,
"count_distinct_z": $$166}] project: [$$154]
+ assign [$$166] <- [{"g": $$g, "sum_distinct_x": $$170, "sum_y": $$171,
"sum_distinct_z": $$172, "avg_distinct_x": $$173, "avg_distinct_y": $$174,
"count_x": $$175, "count_distinct_y": $$176, "avg_z": $$177,
"count_distinct_z": $$178}] project: [$$166]
-- ASSIGN |PARTITIONED|
exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (ASC, $$g)
- -- STABLE_SORT [$$g(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$g(ASC) ] |PARTITIONED|
+ group by ([$$g := $$g]) decor ([]) {
+ aggregate [$$170, $$173] <- [agg-sql-sum($$124),
agg-sql-avg($$124)]
+ -- AGGREGATE |LOCAL|
+ distinct ([$$124])
+ -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
+ order (ASC, $$124)
+ -- MICRO_STABLE_SORT [$$124(ASC)] |LOCAL|
+ project ([$$124])
+ -- STREAM_PROJECT |LOCAL|
+ nested tuple source
+ -- NESTED_TUPLE_SOURCE |LOCAL|
+ }
+ {
+ aggregate [$$171, $$175, $$177] <- [agg-sql-sum($$129),
agg-sql-count($$124), agg-sql-avg($$134)]
+ -- AGGREGATE |LOCAL|
+ nested tuple source
+ -- NESTED_TUPLE_SOURCE |LOCAL|
+ }
+ {
+ aggregate [$$172, $$178] <- [agg-sql-sum($$134),
agg-sql-count($$134)]
+ -- AGGREGATE |LOCAL|
+ distinct ([$$134])
+ -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
+ order (ASC, $$134)
+ -- MICRO_STABLE_SORT [$$134(ASC)] |LOCAL|
+ project ([$$134])
+ -- STREAM_PROJECT |LOCAL|
+ nested tuple source
+ -- NESTED_TUPLE_SOURCE |LOCAL|
+ }
+ {
+ aggregate [$$174, $$176] <- [agg-sql-avg($$129),
agg-sql-count($$129)]
+ -- AGGREGATE |LOCAL|
+ distinct ([$$129])
+ -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
+ order (ASC, $$129)
+ -- MICRO_STABLE_SORT [$$129(ASC)] |LOCAL|
+ project ([$$129])
+ -- STREAM_PROJECT |LOCAL|
+ nested tuple source
+ -- NESTED_TUPLE_SOURCE |LOCAL|
+ }
+ -- PRE_CLUSTERED_GROUP_BY[$$g] |PARTITIONED|
exchange
- -- RANGE_PARTITION_EXCHANGE [$$g(ASC)] RANGE_MAP:{SPLIT:1}
|PARTITIONED|
- group by ([$$g := $$g]) decor ([]) {
- aggregate [$$158, $$161] <- [agg-sql-sum($$112),
agg-sql-avg($$112)]
- -- AGGREGATE |LOCAL|
- distinct ([$$112])
- -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
- order (ASC, $$112)
- -- MICRO_STABLE_SORT [$$112(ASC)] |LOCAL|
- project ([$$112])
- -- STREAM_PROJECT |LOCAL|
- nested tuple source
- -- NESTED_TUPLE_SOURCE |LOCAL|
- }
- {
- aggregate [$$159, $$163, $$165] <- [agg-sql-sum($$117),
agg-sql-count($$112), agg-sql-avg($$122)]
- -- AGGREGATE |LOCAL|
- nested tuple source
- -- NESTED_TUPLE_SOURCE |LOCAL|
- }
- {
- aggregate [$$160, $$166] <- [agg-sql-sum($$122),
agg-sql-count($$122)]
- -- AGGREGATE |LOCAL|
- distinct ([$$122])
- -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
- order (ASC, $$122)
- -- MICRO_STABLE_SORT [$$122(ASC)] |LOCAL|
- project ([$$122])
- -- STREAM_PROJECT |LOCAL|
- nested tuple source
- -- NESTED_TUPLE_SOURCE |LOCAL|
- }
- {
- aggregate [$$162, $$164] <- [agg-sql-avg($$117),
agg-sql-count($$117)]
- -- AGGREGATE |LOCAL|
- distinct ([$$117])
- -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
- order (ASC, $$117)
- -- MICRO_STABLE_SORT [$$117(ASC)] |LOCAL|
- project ([$$117])
- -- STREAM_PROJECT |LOCAL|
- nested tuple source
- -- NESTED_TUPLE_SOURCE |LOCAL|
- }
- -- PRE_CLUSTERED_GROUP_BY[$$g] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ order (ASC, $$g)
+ -- STABLE_SORT [$$g(ASC)] |PARTITIONED|
exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (ASC, $$g)
- -- STABLE_SORT [$$g(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$g] |PARTITIONED|
+ join (true)
+ -- NESTED_LOOP |PARTITIONED|
exchange
- -- HASH_PARTITION_EXCHANGE [$$g] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
join (true)
-- NESTED_LOOP |PARTITIONED|
exchange
@@ -67,45 +67,27 @@ distribute result [$$154]
-- NESTED_LOOP |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (true)
- -- NESTED_LOOP |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$112] <- [$$x.getField(1)] project:
[$$112]
- -- ASSIGN |PARTITIONED|
- project ([$$x])
- -- STREAM_PROJECT |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$155, $$x] <- test.d1
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange
- -- BROADCAST_EXCHANGE |PARTITIONED|
- assign [$$117] <- [$$y.getField(1)] project:
[$$117]
- -- ASSIGN |PARTITIONED|
- project ([$$y])
- -- STREAM_PROJECT |PARTITIONED|
+ assign [$$124] <- [$$x.getField(1)] project:
[$$124]
+ -- ASSIGN |PARTITIONED|
+ project ([$$x])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$167, $$x] <- test.d1
+ -- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$156, $$y] <- test.d2
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
exchange
-- BROADCAST_EXCHANGE |PARTITIONED|
- assign [$$122] <- [$$z.getField(1)] project:
[$$122]
+ assign [$$129] <- [$$y.getField(1)] project:
[$$129]
-- ASSIGN |PARTITIONED|
- project ([$$z])
+ project ([$$y])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$157, $$z] <- test.d3
+ data-scan []<-[$$168, $$y] <- test.d2
-- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -113,7 +95,21 @@ distribute result [$$154]
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
exchange
-- BROADCAST_EXCHANGE |PARTITIONED|
- unnest $$g <- range(1, 3)
- -- UNNEST |UNPARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
+ assign [$$134] <- [$$z.getField(1)] project: [$$134]
+ -- ASSIGN |PARTITIONED|
+ project ([$$z])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$169, $$z] <- test.d3
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ unnest $$g <- range(1, 3)
+ -- UNNEST |UNPARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.9.plan
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.9.plan
index 946edcbe67..8b4c22350d 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.9.plan
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/aggregate-sql-sugar/distinct_mixed/distinct_mixed.9.plan
@@ -1,69 +1,65 @@
-distribute result [$$70]
+distribute result [$$80]
-- DISTRIBUTE_RESULT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$70] <- [{"g": $$g, "count_distinct_x": $$73}] project: [$$70]
+ assign [$$80] <- [{"g": $$g, "count_distinct_x": $$83}] project: [$$80]
-- ASSIGN |PARTITIONED|
exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (ASC, $$g)
- -- STABLE_SORT [$$g(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$g(ASC) ] |PARTITIONED|
+ group by ([$$g := $$g]) decor ([]) {
+ aggregate [$$83] <- [agg-sql-count($$78)]
+ -- AGGREGATE |LOCAL|
+ distinct ([$$78])
+ -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
+ order (ASC, $$78)
+ -- MICRO_STABLE_SORT [$$78(ASC)] |LOCAL|
+ project ([$$78])
+ -- STREAM_PROJECT |LOCAL|
+ nested tuple source
+ -- NESTED_TUPLE_SOURCE |LOCAL|
+ }
+ -- PRE_CLUSTERED_GROUP_BY[$$g] |PARTITIONED|
exchange
- -- RANGE_PARTITION_EXCHANGE [$$g(ASC)] RANGE_MAP:{SPLIT:1}
|PARTITIONED|
- group by ([$$g := $$g]) decor ([]) {
- aggregate [$$73] <- [agg-sql-count($$68)]
- -- AGGREGATE |LOCAL|
- distinct ([$$68])
- -- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
- order (ASC, $$68)
- -- MICRO_STABLE_SORT [$$68(ASC)] |LOCAL|
- project ([$$68])
- -- STREAM_PROJECT |LOCAL|
- nested tuple source
- -- NESTED_TUPLE_SOURCE |LOCAL|
- }
- -- PRE_CLUSTERED_GROUP_BY[$$g] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ order (ASC, $$g)
+ -- STABLE_SORT [$$g(ASC)] |PARTITIONED|
exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (ASC, $$g)
- -- STABLE_SORT [$$g(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$g] |PARTITIONED|
+ join (true)
+ -- NESTED_LOOP |PARTITIONED|
exchange
- -- HASH_PARTITION_EXCHANGE [$$g] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
join (true)
-- NESTED_LOOP |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (true)
- -- NESTED_LOOP |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$68] <- [$$x.getField(1)] project: [$$68]
- -- ASSIGN |PARTITIONED|
- project ([$$x])
- -- STREAM_PROJECT |PARTITIONED|
+ assign [$$78] <- [$$x.getField(1)] project: [$$78]
+ -- ASSIGN |PARTITIONED|
+ project ([$$x])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$81, $$x] <- test.d1
+ -- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$71, $$x] <- test.d1
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ project ([])
+ -- STREAM_PROJECT |PARTITIONED|
exchange
- -- BROADCAST_EXCHANGE |PARTITIONED|
- project ([])
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$82, $$y] <- test.d2
+ -- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$72, $$y] <- test.d2
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange
- -- BROADCAST_EXCHANGE |PARTITIONED|
- unnest $$g <- range(1, 3)
- -- UNNEST |UNPARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ unnest $$g <- range(1, 3)
+ -- UNNEST |UNPARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |UNPARTITIONED|