You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2023/02/01 05:11:02 UTC
[iotdb] 01/02: Optimize group by level
This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch geely_car
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 562191607093b76832eb914b807e0cee49ccb3bd
Author: JackieTien97 <ja...@gmail.com>
AuthorDate: Wed Feb 1 13:10:40 2023 +0800
Optimize group by level
---
.../distribution/DistributionPlanContext.java | 14 ++++++++++++
.../plan/planner/distribution/SourceRewriter.java | 25 +++++++++++-----------
2 files changed, 27 insertions(+), 12 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/DistributionPlanContext.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/DistributionPlanContext.java
index 32de442e65..c35c4a72ac 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/DistributionPlanContext.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/DistributionPlanContext.java
@@ -20,6 +20,9 @@
package org.apache.iotdb.db.mpp.plan.planner.distribution;
import org.apache.iotdb.db.mpp.common.MPPQueryContext;
+import org.apache.iotdb.db.mpp.plan.expression.Expression;
+
+import java.util.Map;
public class DistributionPlanContext {
protected boolean isRoot;
@@ -32,6 +35,9 @@ public class DistributionPlanContext {
// DataRegions
protected boolean queryMultiRegion;
+ // used by group by level
+ private Map<String, Expression> columnNameToExpression;
+
protected DistributionPlanContext(MPPQueryContext queryContext) {
this.isRoot = true;
this.queryContext = queryContext;
@@ -62,4 +68,12 @@ public class DistributionPlanContext {
public void setQueryMultiRegion(boolean queryMultiRegion) {
this.queryMultiRegion = queryMultiRegion;
}
+
+ public Map<String, Expression> getColumnNameToExpression() {
+ return columnNameToExpression;
+ }
+
+ public void setColumnNameToExpression(Map<String, Expression> columnNameToExpression) {
+ this.columnNameToExpression = columnNameToExpression;
+ }
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/SourceRewriter.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/SourceRewriter.java
index 3ed9416d8b..f06081d21b 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/SourceRewriter.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/SourceRewriter.java
@@ -814,6 +814,18 @@ public class SourceRewriter extends SimplePlanNodeRewriter<DistributionPlanConte
: groupSourcesForGroupByLevel(root, sourceGroup, context);
// Then, we calculate the attributes for GroupByLevelNode in each level
+ Map<String, Expression> columnNameToExpression = new HashMap<>();
+ for (CrossSeriesAggregationDescriptor originalDescriptor :
+ newRoot.getGroupByLevelDescriptors()) {
+ for (Expression exp : originalDescriptor.getInputExpressions()) {
+ columnNameToExpression.put(exp.getExpressionString(), exp);
+ }
+ columnNameToExpression.put(
+ originalDescriptor.getOutputExpression().getExpressionString(),
+ originalDescriptor.getOutputExpression());
+ }
+
+ context.setColumnNameToExpression(columnNameToExpression);
calculateGroupByLevelNodeAttributes(newRoot, 0, context);
return Collections.singletonList(newRoot);
}
@@ -953,18 +965,7 @@ public class SourceRewriter extends SimplePlanNodeRewriter<DistributionPlanConte
// Check every OutputColumn of GroupByLevelNode and set the Expression of corresponding
// AggregationDescriptor
List<CrossSeriesAggregationDescriptor> descriptorList = new ArrayList<>();
-
- Map<String, Expression> columnNameToExpression = new HashMap<>();
- for (CrossSeriesAggregationDescriptor originalDescriptor :
- handle.getGroupByLevelDescriptors()) {
- for (Expression exp : originalDescriptor.getInputExpressions()) {
- columnNameToExpression.put(exp.getExpressionString(), exp);
- }
- columnNameToExpression.put(
- originalDescriptor.getOutputExpression().getExpressionString(),
- originalDescriptor.getOutputExpression());
- }
-
+ Map<String, Expression> columnNameToExpression = context.getColumnNameToExpression();
Set<Expression> childrenExpressionMap = new HashSet<>();
for (String childColumn : childrenOutputColumns) {
Expression childExpression =