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 2021/03/17 09:31:59 UTC

[iotdb] branch optimizeDDP updated (0fb72c3 -> abae113)

This is an automated email from the ASF dual-hosted git repository.

xiangweiwei pushed a change to branch optimizeDDP
in repository https://gitbox.apache.org/repos/asf/iotdb.git.


    from 0fb72c3  remove unused exception
     new 36e3b5e  abstract method to getColumnForReaderAndDisplay
     new abae113  Fix some bugs

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../iotdb/db/qp/physical/crud/AggregationPlan.java | 24 ++++++++++
 .../iotdb/db/qp/physical/crud/QueryPlan.java       | 15 +++++++
 .../apache/iotdb/db/qp/physical/crud/UDTFPlan.java |  8 ++++
 .../iotdb/db/qp/strategy/PhysicalGenerator.java    | 51 ++++------------------
 4 files changed, 55 insertions(+), 43 deletions(-)


[iotdb] 02/02: Fix some bugs

Posted by xi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

xiangweiwei pushed a commit to branch optimizeDDP
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit abae1139a10316d1fe698c5c8ae683039b57ea19
Author: Alima777 <wx...@gmail.com>
AuthorDate: Wed Mar 17 17:31:22 2021 +0800

    Fix some bugs
---
 .../org/apache/iotdb/db/qp/physical/crud/AggregationPlan.java |  6 +++---
 .../java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java  |  3 +--
 .../java/org/apache/iotdb/db/qp/physical/crud/UDTFPlan.java   |  5 ++++-
 .../org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java    | 11 +++++------
 4 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/AggregationPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/AggregationPlan.java
index 4e523b2..600c5db 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/AggregationPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/AggregationPlan.java
@@ -111,9 +111,9 @@ public class AggregationPlan extends RawDataQueryPlan {
   }
 
   @Override
-  public String getColumnForReaderFromPath(int pathIndex) {
-    String columnForReader = super.getColumnForReaderFromPath(pathIndex);
-    if (columnForReader == null) {
+  public String getColumnForReaderFromPath(PartialPath path, int pathIndex) {
+    String columnForReader = super.getColumnForReaderFromPath(path, pathIndex);
+    if (!path.isTsAliasExists()) {
       columnForReader = this.getAggregations().get(pathIndex) + "(" + columnForReader + ")";
     }
     return columnForReader;
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java
index 12ab4cd..bcd5b05 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java
@@ -113,8 +113,7 @@ public abstract class QueryPlan extends PhysicalPlan {
     this.ascending = ascending;
   }
 
-  public String getColumnForReaderFromPath(int pathIndex) {
-    PartialPath path = paths.get(pathIndex);
+  public String getColumnForReaderFromPath(PartialPath path, int pathIndex) {
     String columnForReader = path.isTsAliasExists() ? path.getTsAlias() : null;
     if (columnForReader == null) {
       columnForReader =
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/UDTFPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/UDTFPlan.java
index 8a587fc..5192bbc 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/UDTFPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/UDTFPlan.java
@@ -133,6 +133,9 @@ public class UDTFPlan extends RawDataQueryPlan implements UDFPlan {
 
   @Override
   public String getColumnForDisplay(String columnForReader, int pathIndex) {
-    return this.getExecutorByOriginalOutputColumnIndex(pathIndex).getContext().getColumnName();
+    if (paths.get(pathIndex) == null) {
+      return this.getExecutorByOriginalOutputColumnIndex(pathIndex).getContext().getColumnName();
+    }
+    return columnForReader;
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
index ce4f3b8..47f781e 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
@@ -840,7 +840,7 @@ public class PhysicalGenerator {
     if (queryPlan instanceof LastQueryPlan) {
       for (int i = 0; i < paths.size(); i++) {
         PartialPath path = paths.get(i);
-        String column = queryPlan.getColumnForReaderFromPath(i);
+        String column = queryPlan.getColumnForReaderFromPath(path, i);
         if (!columnForReaderSet.contains(column)) {
           TSDataType seriesType = dataTypes.get(i);
           rawDataQueryPlan.addDeduplicatedPaths(path);
@@ -873,7 +873,7 @@ public class PhysicalGenerator {
       PartialPath originalPath = indexedPath.left;
       Integer originalIndex = indexedPath.right;
 
-      String columnForReader = queryPlan.getColumnForReaderFromPath(originalIndex);
+      String columnForReader = queryPlan.getColumnForReaderFromPath(originalPath, originalIndex);
       boolean isUdf = queryPlan instanceof UDTFPlan && paths.get(originalIndex) == null;
 
       if (!columnForReaderSet.contains(columnForReader)) {
@@ -914,10 +914,9 @@ public class PhysicalGenerator {
 
     // check parameter range
     if (seriesOffset >= size) {
-      throw new QueryProcessException(
-          String.format(
-              "The value of SOFFSET (%d) is equal to or exceeds the number of sequences (%d) that can actually be returned.",
-              seriesOffset, size));
+      String errorMessage =
+          "The value of SOFFSET (%d) is equal to or exceeds the number of sequences (%d) that can actually be returned.";
+      throw new QueryProcessException(String.format(errorMessage, seriesOffset, size));
     }
     int endPosition = seriesOffset + seriesLimit;
     if (endPosition > size) {


[iotdb] 01/02: abstract method to getColumnForReaderAndDisplay

Posted by xi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

xiangweiwei pushed a commit to branch optimizeDDP
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 36e3b5eb8a94b1a0a5e68a36aba55c5a4490a1a2
Author: Alima777 <wx...@gmail.com>
AuthorDate: Wed Mar 17 17:10:54 2021 +0800

    abstract method to getColumnForReaderAndDisplay
---
 .../iotdb/db/qp/physical/crud/AggregationPlan.java | 24 ++++++++++++
 .../iotdb/db/qp/physical/crud/QueryPlan.java       | 16 ++++++++
 .../apache/iotdb/db/qp/physical/crud/UDTFPlan.java |  5 +++
 .../iotdb/db/qp/strategy/PhysicalGenerator.java    | 44 +++-------------------
 4 files changed, 50 insertions(+), 39 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/AggregationPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/AggregationPlan.java
index b91b6db..4e523b2 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/AggregationPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/AggregationPlan.java
@@ -109,4 +109,28 @@ public class AggregationPlan extends RawDataQueryPlan {
           getOperatorType().name() + " doesn't support disable align clause.");
     }
   }
+
+  @Override
+  public String getColumnForReaderFromPath(int pathIndex) {
+    String columnForReader = super.getColumnForReaderFromPath(pathIndex);
+    if (columnForReader == null) {
+      columnForReader = this.getAggregations().get(pathIndex) + "(" + columnForReader + ")";
+    }
+    return columnForReader;
+  }
+
+  @Override
+  public String getColumnForDisplay(String columnForReader, int pathIndex)
+      throws IllegalPathException {
+    String columnForDisplay = columnForReader;
+    if (level >= 0) {
+      PartialPath path = paths.get(pathIndex);
+      String aggregatePath =
+          path.isMeasurementAliasExists()
+              ? FilePathUtils.generatePartialPathByLevel(path.getFullPathWithAlias(), level)
+              : FilePathUtils.generatePartialPathByLevel(path.toString(), level);
+      columnForDisplay = aggregations.get(pathIndex) + "(" + aggregatePath + ")";
+    }
+    return columnForDisplay;
+  }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java
index 5dd756a..12ab4cd 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.qp.physical.crud;
 
+import org.apache.iotdb.db.exception.metadata.IllegalPathException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.PartialPath;
 import org.apache.iotdb.db.qp.logical.Operator;
@@ -111,4 +112,19 @@ public abstract class QueryPlan extends PhysicalPlan {
   public void setAscending(boolean ascending) {
     this.ascending = ascending;
   }
+
+  public String getColumnForReaderFromPath(int pathIndex) {
+    PartialPath path = paths.get(pathIndex);
+    String columnForReader = path.isTsAliasExists() ? path.getTsAlias() : null;
+    if (columnForReader == null) {
+      columnForReader =
+          path.isMeasurementAliasExists() ? path.getFullPathWithAlias() : path.toString();
+    }
+    return columnForReader;
+  }
+
+  public String getColumnForDisplay(String columnForReader, int pathIndex)
+      throws IllegalPathException {
+    return columnForReader;
+  }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/UDTFPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/UDTFPlan.java
index 080d060..8a587fc 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/UDTFPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/UDTFPlan.java
@@ -130,4 +130,9 @@ public class UDTFPlan extends RawDataQueryPlan implements UDFPlan {
   public void setPathNameToReaderIndex(Map<String, Integer> pathNameToReaderIndex) {
     this.pathNameToReaderIndex = pathNameToReaderIndex;
   }
+
+  @Override
+  public String getColumnForDisplay(String columnForReader, int pathIndex) {
+    return this.getExecutorByOriginalOutputColumnIndex(pathIndex).getContext().getColumnName();
+  }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
index c99f5dc..ce4f3b8 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
@@ -22,7 +22,6 @@ import org.apache.iotdb.db.auth.AuthException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.query.LogicalOperatorException;
 import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
-import org.apache.iotdb.db.exception.query.PathNumOverLimitException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.exception.runtime.SQLParserException;
 import org.apache.iotdb.db.metadata.PartialPath;
@@ -125,7 +124,6 @@ import org.apache.iotdb.db.qp.physical.sys.StopTriggerPlan;
 import org.apache.iotdb.db.qp.physical.sys.TracingPlan;
 import org.apache.iotdb.db.query.udf.core.context.UDFContext;
 import org.apache.iotdb.db.service.IoTDB;
-import org.apache.iotdb.db.utils.FilePathUtils;
 import org.apache.iotdb.db.utils.SchemaUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.expression.IExpression;
@@ -825,8 +823,7 @@ public class PhysicalGenerator {
   }
 
   @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning
-  private void deduplicate(QueryPlan queryPlan)
-      throws MetadataException, PathNumOverLimitException {
+  private void deduplicate(QueryPlan queryPlan) throws MetadataException {
     // generate dataType first
     List<PartialPath> paths = queryPlan.getPaths();
     List<TSDataType> dataTypes = getSeriesTypes(paths);
@@ -843,12 +840,7 @@ public class PhysicalGenerator {
     if (queryPlan instanceof LastQueryPlan) {
       for (int i = 0; i < paths.size(); i++) {
         PartialPath path = paths.get(i);
-        String column;
-        if (path.isTsAliasExists()) {
-          column = path.getTsAlias();
-        } else {
-          column = path.isMeasurementAliasExists() ? path.getFullPathWithAlias() : path.toString();
-        }
+        String column = queryPlan.getColumnForReaderFromPath(i);
         if (!columnForReaderSet.contains(column)) {
           TSDataType seriesType = dataTypes.get(i);
           rawDataQueryPlan.addDeduplicatedPaths(path);
@@ -881,18 +873,7 @@ public class PhysicalGenerator {
       PartialPath originalPath = indexedPath.left;
       Integer originalIndex = indexedPath.right;
 
-      String columnForReader = originalPath.isTsAliasExists() ? originalPath.getTsAlias() : null;
-      if (columnForReader == null) {
-        columnForReader =
-            originalPath.isMeasurementAliasExists()
-                ? originalPath.getFullPathWithAlias()
-                : originalPath.toString();
-        if (queryPlan instanceof AggregationPlan) {
-          columnForReader =
-              queryPlan.getAggregations().get(originalIndex) + "(" + columnForReader + ")";
-        }
-      }
-
+      String columnForReader = queryPlan.getColumnForReaderFromPath(originalIndex);
       boolean isUdf = queryPlan instanceof UDTFPlan && paths.get(originalIndex) == null;
 
       if (!columnForReaderSet.contains(columnForReader)) {
@@ -907,23 +888,8 @@ public class PhysicalGenerator {
         columnForReaderSet.add(columnForReader);
       }
 
-      String columnForDisplay =
-          isUdf
-              ? ((UDTFPlan) queryPlan)
-                  .getExecutorByOriginalOutputColumnIndex(originalIndex)
-                  .getContext()
-                  .getColumnName()
-              : columnForReader;
-      if (queryPlan instanceof AggregationPlan && ((AggregationPlan) queryPlan).getLevel() >= 0) {
-        String aggregatePath =
-            originalPath.isMeasurementAliasExists()
-                ? FilePathUtils.generatePartialPathByLevel(
-                    originalPath.getFullPathWithAlias(), ((AggregationPlan) queryPlan).getLevel())
-                : FilePathUtils.generatePartialPathByLevel(
-                    originalPath.toString(), ((AggregationPlan) queryPlan).getLevel());
-        columnForDisplay =
-            queryPlan.getAggregations().get(originalIndex) + "(" + aggregatePath + ")";
-      }
+      String columnForDisplay = queryPlan.getColumnForDisplay(columnForReader, originalIndex);
+
       if (!columnForDisplaySet.contains(columnForDisplay)) {
         queryPlan.addPathToIndex(columnForDisplay, queryPlan.getPathToIndex().size());
         if (queryPlan instanceof UDTFPlan) {