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 2024/01/19 14:32:20 UTC

(iotdb) branch master updated: Change partial aggregation symbols for variance and standard deviation aggregators

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 f94f99a4828 Change partial aggregation symbols for variance and standard deviation aggregators
f94f99a4828 is described below

commit f94f99a48281519ddf156ba67cd1825d1491557c
Author: Zhihao Shen <zh...@qq.com>
AuthorDate: Fri Jan 19 22:32:13 2024 +0800

    Change partial aggregation symbols for variance and standard deviation aggregators
---
 .../execution/operator/AggregationUtil.java        |  6 +++++
 .../plan/planner/LogicalPlanBuilder.java           | 19 +++++++--------
 .../plan/parameter/AggregationDescriptor.java      | 14 ++++++-----
 .../org/apache/iotdb/db/utils/SchemaUtils.java     | 27 ++++++++++++----------
 4 files changed, 37 insertions(+), 29 deletions(-)

diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/AggregationUtil.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/AggregationUtil.java
index 4c8debb1da7..0f2c0075c62 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/AggregationUtil.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/AggregationUtil.java
@@ -56,6 +56,8 @@ public class AggregationUtil {
 
   private static final int INVALID_END_TIME = -1;
 
+  private static final String PARTIAL_SUFFIX = "_partial";
+
   private AggregationUtil() {
     // Forbidding instantiation
   }
@@ -254,4 +256,8 @@ public class AggregationUtil {
         throw new UnsupportedOperationException("Unknown data type " + tsDataType);
     }
   }
+
+  public static String addPartialSuffix(String aggregationName) {
+    return aggregationName + PARTIAL_SUFFIX;
+  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
index 038149b2b9a..15fb330bab2 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
@@ -19,7 +19,6 @@
 
 package org.apache.iotdb.db.queryengine.plan.planner;
 
-import org.apache.iotdb.common.rpc.thrift.TAggregationType;
 import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
 import org.apache.iotdb.common.rpc.thrift.TSchemaNode;
 import org.apache.iotdb.commons.exception.IllegalPathException;
@@ -698,29 +697,27 @@ public class LogicalPlanBuilder {
 
   public static void updateTypeProviderByPartialAggregation(
       AggregationDescriptor aggregationDescriptor, TypeProvider typeProvider) {
-    List<TAggregationType> splitAggregations =
+    List<String> partialAggregationsNames =
         SchemaUtils.splitPartialAggregation(aggregationDescriptor.getAggregationType());
     String inputExpressionStr =
         aggregationDescriptor.getInputExpressions().get(0).getExpressionString();
-    for (TAggregationType aggregation : splitAggregations) {
-      String functionName = aggregation.toString().toLowerCase();
-      TSDataType aggregationType = SchemaUtils.getAggregationType(functionName);
+    for (String partialAggregationName : partialAggregationsNames) {
+      TSDataType aggregationType = SchemaUtils.getAggregationType(partialAggregationName);
       typeProvider.setType(
-          String.format("%s(%s)", functionName, inputExpressionStr),
+          String.format("%s(%s)", partialAggregationName, inputExpressionStr),
           aggregationType == null ? typeProvider.getType(inputExpressionStr) : aggregationType);
     }
   }
 
   public static void updateTypeProviderByPartialAggregation(
       CrossSeriesAggregationDescriptor aggregationDescriptor, TypeProvider typeProvider) {
-    List<TAggregationType> splitAggregations =
+    List<String> partialAggregationsNames =
         SchemaUtils.splitPartialAggregation(aggregationDescriptor.getAggregationType());
     PartialPath path = ((TimeSeriesOperand) aggregationDescriptor.getOutputExpression()).getPath();
-    for (TAggregationType aggregationType : splitAggregations) {
-      String functionName = aggregationType.toString().toLowerCase();
+    for (String partialAggregationName : partialAggregationsNames) {
       typeProvider.setType(
-          String.format("%s(%s)", functionName, path.getFullPath()),
-          SchemaUtils.getSeriesTypeByPath(path, functionName));
+          String.format("%s(%s)", partialAggregationName, path.getFullPath()),
+          SchemaUtils.getSeriesTypeByPath(path, partialAggregationName));
     }
   }
 
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/parameter/AggregationDescriptor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/parameter/AggregationDescriptor.java
index 190d3d3767a..3b32baef3fa 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/parameter/AggregationDescriptor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/parameter/AggregationDescriptor.java
@@ -35,6 +35,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
+import static org.apache.iotdb.db.queryengine.execution.operator.AggregationUtil.addPartialSuffix;
+
 public class AggregationDescriptor {
 
   // aggregation function type
@@ -146,22 +148,22 @@ public class AggregationDescriptor {
           outputAggregationNames.add(SqlConstant.MIN_TIME);
           break;
         case STDDEV:
-          outputAggregationNames.add(SqlConstant.STDDEV);
+          outputAggregationNames.add(addPartialSuffix(SqlConstant.STDDEV));
           break;
         case STDDEV_POP:
-          outputAggregationNames.add(SqlConstant.STDDEV_POP);
+          outputAggregationNames.add(addPartialSuffix(SqlConstant.STDDEV_POP));
           break;
         case STDDEV_SAMP:
-          outputAggregationNames.add(SqlConstant.STDDEV_SAMP);
+          outputAggregationNames.add(addPartialSuffix(SqlConstant.STDDEV_SAMP));
           break;
         case VARIANCE:
-          outputAggregationNames.add(SqlConstant.VARIANCE);
+          outputAggregationNames.add(addPartialSuffix(SqlConstant.VARIANCE));
           break;
         case VAR_POP:
-          outputAggregationNames.add(SqlConstant.VAR_POP);
+          outputAggregationNames.add(addPartialSuffix(SqlConstant.VAR_POP));
           break;
         case VAR_SAMP:
-          outputAggregationNames.add(SqlConstant.VAR_SAMP);
+          outputAggregationNames.add(addPartialSuffix(SqlConstant.VAR_SAMP));
           break;
         default:
           outputAggregationNames.add(aggregationFuncName);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
index 21a8e1070b3..ddddec125d1 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
@@ -34,6 +34,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import static org.apache.iotdb.db.queryengine.execution.operator.AggregationUtil.addPartialSuffix;
+
 public class SchemaUtils {
 
   private SchemaUtils() {}
@@ -136,8 +138,9 @@ public class SchemaUtils {
       case SqlConstant.MIN_VALUE:
       case SqlConstant.MAX_VALUE:
       case SqlConstant.MODE:
-      default:
         return null;
+      default:
+        return TSDataType.TEXT;
     }
   }
 
@@ -184,28 +187,28 @@ public class SchemaUtils {
     }
   }
 
-  public static List<TAggregationType> splitPartialAggregation(TAggregationType aggregationType) {
+  public static List<String> splitPartialAggregation(TAggregationType aggregationType) {
     switch (aggregationType) {
       case FIRST_VALUE:
-        return Collections.singletonList(TAggregationType.MIN_TIME);
+        return Collections.singletonList(SqlConstant.MIN_TIME);
       case LAST_VALUE:
-        return Collections.singletonList(TAggregationType.MAX_TIME);
+        return Collections.singletonList(SqlConstant.MAX_TIME);
       case STDDEV:
-        return Collections.singletonList(TAggregationType.STDDEV);
+        return Collections.singletonList(addPartialSuffix(SqlConstant.STDDEV));
       case STDDEV_POP:
-        return Collections.singletonList(TAggregationType.STDDEV_POP);
+        return Collections.singletonList(addPartialSuffix(SqlConstant.STDDEV_POP));
       case STDDEV_SAMP:
-        return Collections.singletonList(TAggregationType.STDDEV_SAMP);
+        return Collections.singletonList(addPartialSuffix(SqlConstant.STDDEV_SAMP));
       case VARIANCE:
-        return Collections.singletonList(TAggregationType.VARIANCE);
+        return Collections.singletonList(addPartialSuffix(SqlConstant.VARIANCE));
       case VAR_POP:
-        return Collections.singletonList(TAggregationType.VAR_POP);
+        return Collections.singletonList(addPartialSuffix(SqlConstant.VAR_POP));
       case VAR_SAMP:
-        return Collections.singletonList(TAggregationType.VAR_SAMP);
+        return Collections.singletonList(addPartialSuffix(SqlConstant.VAR_SAMP));
       case AVG:
-        return Arrays.asList(TAggregationType.COUNT, TAggregationType.SUM);
+        return Arrays.asList(SqlConstant.COUNT, SqlConstant.SUM);
       case TIME_DURATION:
-        return Arrays.asList(TAggregationType.MAX_TIME, TAggregationType.MIN_TIME);
+        return Arrays.asList(SqlConstant.MAX_TIME, SqlConstant.MIN_TIME);
       case SUM:
       case MIN_VALUE:
       case MAX_VALUE: