You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2023/02/01 04:47:45 UTC
[iotdb] branch geely_car updated: optimize group by level distribution plan sourceRewriter
This is an automated email from the ASF dual-hosted git repository.
xingtanzjr pushed a commit to branch geely_car
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/geely_car by this push:
new 522363d391 optimize group by level distribution plan sourceRewriter
522363d391 is described below
commit 522363d391bb403da498c445c835b01a1bf0aa12
Author: Jinrui.Zhang <xi...@gmail.com>
AuthorDate: Wed Feb 1 12:47:32 2023 +0800
optimize group by level distribution plan sourceRewriter
---
.../plan/planner/distribution/SourceRewriter.java | 53 ++++++++++++++++++----
1 file changed, 43 insertions(+), 10 deletions(-)
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 f8db8163a4..3ed9416d8b 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
@@ -953,21 +953,54 @@ 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());
+ }
+
+ Set<Expression> childrenExpressionMap = new HashSet<>();
+ for (String childColumn : childrenOutputColumns) {
+ Expression childExpression =
+ columnNameToExpression.get(
+ childColumn.substring(childColumn.indexOf("(") + 1, childColumn.lastIndexOf(")")));
+ childrenExpressionMap.add(childExpression);
+ }
+
for (CrossSeriesAggregationDescriptor originalDescriptor :
handle.getGroupByLevelDescriptors()) {
Set<Expression> descriptorExpressions = new HashSet<>();
- for (String childColumn : childrenOutputColumns) {
- // If this condition matched, the childColumn should come from GroupByLevelNode
- if (isAggColumnMatchExpression(childColumn, originalDescriptor.getOutputExpression())) {
- descriptorExpressions.add(originalDescriptor.getOutputExpression());
- continue;
- }
- for (Expression exp : originalDescriptor.getInputExpressions()) {
- if (isAggColumnMatchExpression(childColumn, exp)) {
- descriptorExpressions.add(exp);
- }
+
+ if (childrenExpressionMap.contains(originalDescriptor.getOutputExpression())) {
+ descriptorExpressions.add(originalDescriptor.getOutputExpression());
+ }
+
+ for (Expression exp : originalDescriptor.getInputExpressions()) {
+ if (childrenExpressionMap.contains(exp)) {
+ descriptorExpressions.add(exp);
}
}
+
+ // for (String childColumn : childrenOutputColumns) {
+ // // If this condition matched, the childColumn should come from GroupByLevelNode
+ // if (isAggColumnMatchExpression(childColumn,
+ // originalDescriptor.getOutputExpression())) {
+ // descriptorExpressions.add(originalDescriptor.getOutputExpression());
+ // continue;
+ // }
+ // for (Expression exp : originalDescriptor.getInputExpressions()) {
+ // if (isAggColumnMatchExpression(childColumn, exp)) {
+ // descriptorExpressions.add(exp);
+ // }
+ // }
+ // }
+
if (descriptorExpressions.isEmpty()) {
continue;
}