This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new f16df817848 Add new optimization rule: remove `Project` under
`RawDataAggregation`
f16df817848 is described below
commit f16df8178483e69dd8e3f8c1a59f9935d4b6211c
Author: liuminghui233 <[email protected]>
AuthorDate: Tue May 14 14:07:19 2024 +0800
Add new optimization rule: remove `Project` under `RawDataAggregation`
---
.../plan/optimization/AggregationPushDown.java | 18 +-
.../source/AlignedSeriesAggregationScanNode.java | 6 +-
.../plan/optimization/AggregationPushDownTest.java | 69 +++++
.../plan/optimization/TestPlanBuilder.java | 20 ++
.../distribution/AggregationAlignByDeviceTest.java | 44 ---
.../planner/distribution/AlignedByDeviceTest.java | 328 ++-------------------
6 files changed, 136 insertions(+), 349 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDown.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDown.java
index 344572be2b3..cf4b3461955 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDown.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDown.java
@@ -46,6 +46,7 @@ import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SingleDevi
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SlidingWindowAggregationNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.FullOuterTimeJoinNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.AlignedSeriesAggregationScanNode;
+import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.AlignedSeriesScanNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.SeriesAggregationScanNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.SeriesAggregationSourceNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.SeriesScanSourceNode;
@@ -225,6 +226,11 @@ public class AggregationPushDown implements PlanOptimizer {
@Override
public PlanNode visitRawDataAggregation(RawDataAggregationNode node,
RewriterContext context) {
PlanNode child = node.getChild();
+ if (child instanceof ProjectNode) {
+ // remove ProjectNode
+ node.setChild(((ProjectNode) child).getChild());
+ return visitRawDataAggregation(node, context);
+ }
if (child instanceof FullOuterTimeJoinNode || child instanceof
SeriesScanSourceNode) {
boolean isSingleSource = child instanceof SeriesScanSourceNode;
boolean needCheckAscending = node.getGroupByTimeParameter() == null;
@@ -269,9 +275,15 @@ public class AggregationPushDown implements PlanOptimizer {
if (isSingleSource && ((SeriesScanSourceNode)
child).getPushDownPredicate() != null) {
Expression pushDownPredicate = ((SeriesScanSourceNode)
child).getPushDownPredicate();
sourceNodeList.forEach(
- sourceNode ->
- ((SeriesAggregationSourceNode) sourceNode)
- .setPushDownPredicate(pushDownPredicate));
+ sourceNode -> {
+ SeriesAggregationSourceNode aggregationSourceNode =
+ (SeriesAggregationSourceNode) sourceNode;
+ aggregationSourceNode.setPushDownPredicate(pushDownPredicate);
+ if (aggregationSourceNode instanceof
AlignedSeriesAggregationScanNode) {
+ ((AlignedSeriesAggregationScanNode) aggregationSourceNode)
+ .setAlignedPath(((AlignedSeriesScanNode)
child).getAlignedPath());
+ }
+ });
}
PlanNode resultNode = convergeWithTimeJoin(sourceNodeList,
node.getScanOrder(), context);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java
index 06392041ed9..2b69cdb0bc4 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java
@@ -49,7 +49,7 @@ import java.util.Objects;
public class AlignedSeriesAggregationScanNode extends
SeriesAggregationSourceNode {
// The paths of the target series which will be aggregated.
- private final AlignedPath alignedPath;
+ private AlignedPath alignedPath;
// The id of DataRegion where the node will run
private TRegionReplicaSet regionReplicaSet;
@@ -112,6 +112,10 @@ public class AlignedSeriesAggregationScanNode extends
SeriesAggregationSourceNod
return alignedPath;
}
+ public void setAlignedPath(AlignedPath alignedPath) {
+ this.alignedPath = alignedPath;
+ }
+
@Override
public Ordering getScanOrder() {
return scanOrder;
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDownTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDownTest.java
index d43d17c1384..d8e92ab3625 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDownTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDownTest.java
@@ -34,6 +34,9 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import static
org.apache.iotdb.db.queryengine.plan.expression.ExpressionFactory.gt;
+import static
org.apache.iotdb.db.queryengine.plan.expression.ExpressionFactory.intValue;
+import static
org.apache.iotdb.db.queryengine.plan.expression.ExpressionFactory.timeSeries;
import static
org.apache.iotdb.db.queryengine.plan.optimization.OptimizationTestUtil.getAggregationDescriptor;
import static
org.apache.iotdb.db.queryengine.plan.optimization.OptimizationTestUtil.schemaMap;
@@ -246,6 +249,72 @@ public class AggregationPushDownTest {
.getRoot());
}
+ @Test
+ public void testRemoveProject() {
+ GroupByTimeParameter groupByTimeParameter =
+ new GroupByTimeParameter(0, 100, new TimeDuration(0, 10), new
TimeDuration(0, 10), true);
+ List<AggregationDescriptor> aggregationDescriptorList1 =
+ Collections.singletonList(
+ getAggregationDescriptor(AggregationStep.SINGLE,
"root.sg.d2.a.s1"));
+
+ checkPushDown(
+ "select count(s1) from root.sg.d2.a where s2 > 1 group by ([0, 100),
10ms);",
+ new TestPlanBuilder()
+ .scanAligned(
+ "0",
+ schemaMap.get("root.sg.d2.a"),
+ ExpressionFactory.gt(
+
ExpressionFactory.timeSeries(schemaMap.get("root.sg.d2.a.s2")),
+ ExpressionFactory.intValue("1")))
+ .project("3", Collections.singletonList("root.sg.d2.a.s1"))
+ .rawDataAggregation("2", aggregationDescriptorList1,
groupByTimeParameter, false)
+ .getRoot(),
+ new TestPlanBuilder()
+ .alignedAggregationScan(
+ "4",
+ schemaMap.get("root.sg.d2.a"),
+ aggregationDescriptorList1,
+ groupByTimeParameter,
+ false,
+ ExpressionFactory.gt(
+
ExpressionFactory.timeSeries(schemaMap.get("root.sg.d2.a.s2")),
+ ExpressionFactory.intValue("1")))
+ .getRoot());
+
+ List<AggregationDescriptor> aggregationDescriptorList2 =
+ Collections.singletonList(
+ getAggregationDescriptor(AggregationStep.SINGLE, "root.sg.d1.s1"));
+ checkPushDown(
+ "select count(s1) from root.sg.d1 where time > 100 and s2 > 10 group
by ([0, 100), 10ms);",
+ new TestPlanBuilder()
+ .leftOuterTimeJoin(
+ "5",
+ Ordering.ASC,
+ new TestPlanBuilder()
+ .scan(
+ "1",
+ schemaMap.get("root.sg.d1.s2"),
+ gt(timeSeries(schemaMap.get("root.sg.d1.s2")),
intValue("10")))
+ .getRoot(),
+ new TestPlanBuilder().scan("0",
schemaMap.get("root.sg.d1.s1")).getRoot())
+ .project("6", Collections.singletonList("root.sg.d1.s1"))
+ .rawDataAggregation("4", aggregationDescriptorList2,
groupByTimeParameter, false)
+ .getRoot(),
+ new TestPlanBuilder()
+ .leftOuterTimeJoin(
+ "5",
+ Ordering.ASC,
+ new TestPlanBuilder()
+ .scan(
+ "1",
+ schemaMap.get("root.sg.d1.s2"),
+ gt(timeSeries(schemaMap.get("root.sg.d1.s2")),
intValue("10")))
+ .getRoot(),
+ new TestPlanBuilder().scan("0",
schemaMap.get("root.sg.d1.s1")).getRoot())
+ .rawDataAggregation("4", aggregationDescriptorList2,
groupByTimeParameter, false)
+ .getRoot());
+ }
+
private void checkPushDown(String sql, PlanNode rawPlan, PlanNode optPlan) {
OptimizationTestUtil.checkPushDown(
Collections.singletonList(new PredicatePushDown()),
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/TestPlanBuilder.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/TestPlanBuilder.java
index b5f82ddc7a6..0ca53b7b84c 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/TestPlanBuilder.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/TestPlanBuilder.java
@@ -170,6 +170,26 @@ public class TestPlanBuilder {
return this;
}
+ public TestPlanBuilder alignedAggregationScan(
+ String id,
+ PartialPath path,
+ List<AggregationDescriptor> aggregationDescriptors,
+ GroupByTimeParameter groupByTimeParameter,
+ boolean outputEndTime,
+ Expression pushDownPredicate) {
+ AlignedSeriesAggregationScanNode aggregationScanNode =
+ new AlignedSeriesAggregationScanNode(
+ new PlanNodeId(id),
+ (AlignedPath) path,
+ aggregationDescriptors,
+ Ordering.ASC,
+ groupByTimeParameter);
+ aggregationScanNode.setOutputEndTime(outputEndTime);
+ aggregationScanNode.setPushDownPredicate(pushDownPredicate);
+ this.root = aggregationScanNode;
+ return this;
+ }
+
public TestPlanBuilder rawDataAggregation(
String id,
List<AggregationDescriptor> aggregationDescriptors,
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AggregationAlignByDeviceTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AggregationAlignByDeviceTest.java
index 1753102d812..f6bb0deea1c 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AggregationAlignByDeviceTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AggregationAlignByDeviceTest.java
@@ -209,17 +209,6 @@ public class AggregationAlignByDeviceTest {
firstFiTopNode.getChildren().get(0).getChildren().get(0) instanceof
RawDataAggregationNode);
assertTrue(
firstFiTopNode.getChildren().get(0).getChildren().get(0).getChildren().get(0)
- instanceof ProjectNode);
- assertTrue(
- firstFiTopNode
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
instanceof LeftOuterTimeJoinNode);
secondFiRoot = plan.getInstances().get(1).getFragment().getPlanNodeTree();
@@ -229,17 +218,6 @@ public class AggregationAlignByDeviceTest {
secondFiRoot.getChildren().get(0).getChildren().get(0) instanceof
RawDataAggregationNode);
assertTrue(
secondFiRoot.getChildren().get(0).getChildren().get(0).getChildren().get(0)
- instanceof ProjectNode);
- assertTrue(
- secondFiRoot
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
instanceof LeftOuterTimeJoinNode);
// two aggregation measurement, two devices, with filter
@@ -260,17 +238,6 @@ public class AggregationAlignByDeviceTest {
firstFiTopNode.getChildren().get(0).getChildren().get(0) instanceof
RawDataAggregationNode);
assertTrue(
firstFiTopNode.getChildren().get(0).getChildren().get(0).getChildren().get(0)
- instanceof ProjectNode);
- assertTrue(
- firstFiTopNode
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
instanceof LeftOuterTimeJoinNode);
secondFiRoot = plan.getInstances().get(1).getFragment().getPlanNodeTree();
@@ -280,17 +247,6 @@ public class AggregationAlignByDeviceTest {
secondFiRoot.getChildren().get(0).getChildren().get(0) instanceof
RawDataAggregationNode);
assertTrue(
secondFiRoot.getChildren().get(0).getChildren().get(0).getChildren().get(0)
- instanceof ProjectNode);
- assertTrue(
- secondFiRoot
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
instanceof LeftOuterTimeJoinNode);
}
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AlignedByDeviceTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AlignedByDeviceTest.java
index 80a024ce7f6..9788584e217 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AlignedByDeviceTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AlignedByDeviceTest.java
@@ -137,14 +137,16 @@ public class AlignedByDeviceTest {
assertTrue(f1Root.getChildren().get(0).getChildren().get(0) instanceof
DeviceViewNode);
assertTrue(
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0)
- instanceof RawDataAggregationNode);
+ instanceof SeriesAggregationScanNode);
assertTrue(
-
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(0)
- instanceof ProjectNode);
+ f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(1)
+ instanceof SeriesAggregationScanNode);
assertTrue(f2Root instanceof IdentitySinkNode);
assertTrue(f2Root.getChildren().get(0) instanceof DeviceViewNode);
- assertTrue(f2Root.getChildren().get(0).getChildren().get(0) instanceof
RawDataAggregationNode);
- assertTrue(f2Root.getChildren().get(0).getChildren().get(1) instanceof
RawDataAggregationNode);
+ assertTrue(
+ f2Root.getChildren().get(0).getChildren().get(0) instanceof
SeriesAggregationScanNode);
+ assertTrue(
+ f2Root.getChildren().get(0).getChildren().get(1) instanceof
SeriesAggregationScanNode);
// test of MULTI_SERIES
sql =
@@ -163,17 +165,7 @@ public class AlignedByDeviceTest {
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0)
instanceof RawDataAggregationNode);
assertTrue(
- f1Root
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
+
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(0)
instanceof LeftOuterTimeJoinNode);
assertTrue(
f1Root
@@ -187,8 +179,6 @@ public class AlignedByDeviceTest {
.get(0)
.getChildren()
.get(0)
- .getChildren()
- .get(0)
instanceof SeriesSourceNode);
assertTrue(f1Root.getChildren().get(0).getChildren().get(1) instanceof
ExchangeNode);
assertTrue(
@@ -371,106 +361,26 @@ public class AlignedByDeviceTest {
assertTrue(f1Root.getChildren().get(0).getChildren().get(0) instanceof
SingleDeviceViewNode);
assertTrue(
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0)
- instanceof RawDataAggregationNode);
+ instanceof AggregationNode);
assertTrue(
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(0)
- instanceof ProjectNode);
- assertTrue(
- f1Root
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- instanceof FullOuterTimeJoinNode);
- assertTrue(
- f1Root
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- instanceof SeriesScanNode);
+ instanceof SeriesAggregationScanNode);
assertTrue(
- f1Root
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(1)
+
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(1)
instanceof ExchangeNode);
assertTrue(f1Root.getChildren().get(0).getChildren().get(1) instanceof
SingleDeviceViewNode);
assertTrue(
f1Root.getChildren().get(0).getChildren().get(1).getChildren().get(0)
- instanceof RawDataAggregationNode);
+ instanceof AggregationNode);
assertTrue(
f1Root.getChildren().get(0).getChildren().get(1).getChildren().get(0).getChildren().get(0)
- instanceof ProjectNode);
- assertTrue(
- f1Root
- .getChildren()
- .get(0)
- .getChildren()
- .get(1)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- instanceof FullOuterTimeJoinNode);
- assertTrue(
- f1Root
- .getChildren()
- .get(0)
- .getChildren()
- .get(1)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- instanceof SeriesScanNode);
+ instanceof SeriesAggregationScanNode);
assertTrue(
- f1Root
- .getChildren()
- .get(0)
- .getChildren()
- .get(1)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(1)
+
f1Root.getChildren().get(0).getChildren().get(1).getChildren().get(0).getChildren().get(1)
instanceof ExchangeNode);
assertTrue(f2Root instanceof ShuffleSinkNode);
- assertTrue(f2Root.getChildren().get(0) instanceof SeriesSourceNode);
- assertTrue(f2Root.getChildren().get(1) instanceof SeriesSourceNode);
+ assertTrue(f2Root.getChildren().get(0) instanceof
SeriesAggregationScanNode);
+ assertTrue(f2Root.getChildren().get(1) instanceof
SeriesAggregationScanNode);
// test of MULTI_SERIES
sql =
@@ -490,19 +400,6 @@ public class AlignedByDeviceTest {
instanceof RawDataAggregationNode);
assertTrue(
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(0)
- instanceof ProjectNode);
- assertTrue(
- f1Root
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
instanceof LeftOuterTimeJoinNode);
assertTrue(
f1Root
@@ -516,8 +413,6 @@ public class AlignedByDeviceTest {
.get(0)
.getChildren()
.get(0)
- .getChildren()
- .get(0)
instanceof FullOuterTimeJoinNode);
assertTrue(
f1Root
@@ -533,8 +428,6 @@ public class AlignedByDeviceTest {
.get(0)
.getChildren()
.get(0)
- .getChildren()
- .get(0)
instanceof SeriesSourceNode);
assertTrue(
f1Root
@@ -549,8 +442,6 @@ public class AlignedByDeviceTest {
.getChildren()
.get(0)
.getChildren()
- .get(0)
- .getChildren()
.get(1)
instanceof ExchangeNode);
assertTrue(f1Root.getChildren().get(0).getChildren().get(1) instanceof
SingleDeviceViewNode);
@@ -559,19 +450,6 @@ public class AlignedByDeviceTest {
instanceof RawDataAggregationNode);
assertTrue(
f1Root.getChildren().get(0).getChildren().get(1).getChildren().get(0).getChildren().get(0)
- instanceof ProjectNode);
- assertTrue(
- f1Root
- .getChildren()
- .get(0)
- .getChildren()
- .get(1)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
instanceof LeftOuterTimeJoinNode);
assertTrue(
f1Root
@@ -585,8 +463,6 @@ public class AlignedByDeviceTest {
.get(0)
.getChildren()
.get(0)
- .getChildren()
- .get(0)
instanceof FullOuterTimeJoinNode);
assertTrue(
f1Root
@@ -602,8 +478,6 @@ public class AlignedByDeviceTest {
.get(0)
.getChildren()
.get(0)
- .getChildren()
- .get(0)
instanceof SeriesSourceNode);
assertTrue(
f1Root
@@ -618,8 +492,6 @@ public class AlignedByDeviceTest {
.getChildren()
.get(0)
.getChildren()
- .get(0)
- .getChildren()
.get(1)
instanceof ExchangeNode);
assertTrue(f2Root instanceof ShuffleSinkNode);
@@ -739,23 +611,7 @@ public class AlignedByDeviceTest {
assertTrue(f1Root.getChildren().get(0).getChildren().get(0) instanceof
DeviceViewNode);
assertTrue(
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0)
- instanceof RawDataAggregationNode);
- assertTrue(
-
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(0)
- instanceof ProjectNode);
- assertTrue(
- f1Root
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- instanceof SeriesScanNode);
+ instanceof SeriesAggregationScanNode);
assertTrue(f2Root instanceof IdentitySinkNode);
assertTrue(f2Root.getChildren().get(0) instanceof DeviceViewNode);
assertTrue(f3Root instanceof IdentitySinkNode);
@@ -778,8 +634,8 @@ public class AlignedByDeviceTest {
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0)
instanceof RawDataAggregationNode);
assertTrue(
-
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(0)
- instanceof ProjectNode);
+ f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(1)
+ instanceof RawDataAggregationNode);
assertTrue(f2Root instanceof IdentitySinkNode);
assertTrue(f2Root.getChildren().get(0) instanceof DeviceViewNode);
assertTrue(f3Root instanceof IdentitySinkNode);
@@ -961,107 +817,27 @@ public class AlignedByDeviceTest {
assertTrue(f1Root.getChildren().get(0).getChildren().get(0) instanceof
SingleDeviceViewNode);
assertTrue(
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0)
- instanceof RawDataAggregationNode);
+ instanceof AggregationNode);
assertTrue(
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(0)
- instanceof ProjectNode);
- assertTrue(
- f1Root
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- instanceof FullOuterTimeJoinNode);
- assertTrue(
- f1Root
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- instanceof SeriesScanNode);
+ instanceof SeriesAggregationScanNode);
assertTrue(
- f1Root
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(1)
+
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(1)
instanceof ExchangeNode);
assertTrue(f1Root.getChildren().get(0).getChildren().get(1) instanceof
SingleDeviceViewNode);
assertTrue(
f1Root.getChildren().get(0).getChildren().get(1).getChildren().get(0)
- instanceof RawDataAggregationNode);
+ instanceof AggregationNode);
assertTrue(
f1Root.getChildren().get(0).getChildren().get(1).getChildren().get(0).getChildren().get(0)
- instanceof ProjectNode);
- assertTrue(
- f1Root
- .getChildren()
- .get(0)
- .getChildren()
- .get(1)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- instanceof FullOuterTimeJoinNode);
- assertTrue(
- f1Root
- .getChildren()
- .get(0)
- .getChildren()
- .get(1)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- instanceof SeriesScanNode);
+ instanceof SeriesAggregationScanNode);
assertTrue(
- f1Root
- .getChildren()
- .get(0)
- .getChildren()
- .get(1)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(1)
+
f1Root.getChildren().get(0).getChildren().get(1).getChildren().get(0).getChildren().get(1)
instanceof ExchangeNode);
assertTrue(f2Root instanceof ShuffleSinkNode);
- assertTrue(f2Root.getChildren().get(0) instanceof SeriesScanNode);
+ assertTrue(f2Root.getChildren().get(0) instanceof
SeriesAggregationScanNode);
assertTrue(f3Root instanceof ShuffleSinkNode);
- assertTrue(f3Root.getChildren().get(0) instanceof SeriesScanNode);
+ assertTrue(f3Root.getChildren().get(0) instanceof
SeriesAggregationScanNode);
// test of MULTI_SERIES
sql =
@@ -1082,19 +858,6 @@ public class AlignedByDeviceTest {
instanceof RawDataAggregationNode);
assertTrue(
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(0)
- instanceof ProjectNode);
- assertTrue(
- f1Root
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
instanceof LeftOuterTimeJoinNode);
assertTrue(
f1Root
@@ -1108,8 +871,6 @@ public class AlignedByDeviceTest {
.get(0)
.getChildren()
.get(0)
- .getChildren()
- .get(0)
instanceof FullOuterTimeJoinNode);
assertTrue(
f1Root
@@ -1125,8 +886,6 @@ public class AlignedByDeviceTest {
.get(0)
.getChildren()
.get(0)
- .getChildren()
- .get(0)
instanceof SeriesSourceNode);
assertTrue(
f1Root
@@ -1141,8 +900,6 @@ public class AlignedByDeviceTest {
.getChildren()
.get(0)
.getChildren()
- .get(0)
- .getChildren()
.get(1)
instanceof ExchangeNode);
assertTrue(
@@ -1156,8 +913,6 @@ public class AlignedByDeviceTest {
.getChildren()
.get(0)
.getChildren()
- .get(0)
- .getChildren()
.get(1)
instanceof FullOuterTimeJoinNode);
assertTrue(
@@ -1171,8 +926,6 @@ public class AlignedByDeviceTest {
.getChildren()
.get(0)
.getChildren()
- .get(0)
- .getChildren()
.get(1)
.getChildren()
.get(0)
@@ -1188,8 +941,6 @@ public class AlignedByDeviceTest {
.getChildren()
.get(0)
.getChildren()
- .get(0)
- .getChildren()
.get(1)
.getChildren()
.get(1)
@@ -1200,19 +951,6 @@ public class AlignedByDeviceTest {
instanceof RawDataAggregationNode);
assertTrue(
f1Root.getChildren().get(0).getChildren().get(1).getChildren().get(0).getChildren().get(0)
- instanceof ProjectNode);
- assertTrue(
- f1Root
- .getChildren()
- .get(0)
- .getChildren()
- .get(1)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
- .getChildren()
- .get(0)
instanceof LeftOuterTimeJoinNode);
assertTrue(
f1Root
@@ -1226,8 +964,6 @@ public class AlignedByDeviceTest {
.get(0)
.getChildren()
.get(0)
- .getChildren()
- .get(0)
instanceof FullOuterTimeJoinNode);
assertTrue(
f1Root
@@ -1243,8 +979,6 @@ public class AlignedByDeviceTest {
.get(0)
.getChildren()
.get(0)
- .getChildren()
- .get(0)
instanceof SeriesSourceNode);
assertTrue(
f1Root
@@ -1259,8 +993,6 @@ public class AlignedByDeviceTest {
.getChildren()
.get(0)
.getChildren()
- .get(0)
- .getChildren()
.get(1)
instanceof ExchangeNode);
assertTrue(
@@ -1274,8 +1006,6 @@ public class AlignedByDeviceTest {
.getChildren()
.get(0)
.getChildren()
- .get(0)
- .getChildren()
.get(1)
instanceof FullOuterTimeJoinNode);
assertTrue(
@@ -1289,8 +1019,6 @@ public class AlignedByDeviceTest {
.getChildren()
.get(0)
.getChildren()
- .get(0)
- .getChildren()
.get(1)
.getChildren()
.get(0)
@@ -1306,8 +1034,6 @@ public class AlignedByDeviceTest {
.getChildren()
.get(0)
.getChildren()
- .get(0)
- .getChildren()
.get(1)
.getChildren()
.get(1)