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:32:00 UTC
[iotdb] 01/02: abstract method to getColumnForReaderAndDisplay
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) {