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;
         }