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/09/14 07:26:29 UTC

[iotdb] 01/01: add comments for align by device

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

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

commit 42d5bfd2a0cc80b67a96c77b1923457c564caf9b
Author: Alima777 <wx...@gmail.com>
AuthorDate: Tue Sep 14 15:25:42 2021 +0800

    add comments for align by device
---
 .../apache/iotdb/db/qp/logical/crud/QueryOperator.java    |  7 ++++++-
 .../iotdb/db/qp/physical/crud/RawDataQueryPlan.java       |  1 +
 .../iotdb/db/query/dataset/AlignByDeviceDataSet.java      | 15 +++++++++++++--
 3 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/QueryOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/QueryOperator.java
index 842850a..720aed7 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/QueryOperator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/QueryOperator.java
@@ -41,6 +41,7 @@ import org.apache.iotdb.db.query.expression.ResultColumn;
 import org.apache.iotdb.db.query.expression.unary.FunctionExpression;
 import org.apache.iotdb.db.query.expression.unary.TimeSeriesOperand;
 import org.apache.iotdb.db.service.IoTDB;
+import org.apache.iotdb.tsfile.common.constant.TsFileConstant;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.expression.IExpression;
 
@@ -373,11 +374,15 @@ public class QueryOperator extends Operator {
         : (((FunctionExpression) expression).getPaths().get(0));
   }
 
+  /**
+   * If path is a vectorPartialPath, we return its measurementId + subMeasurement as the final
+   * measurement. e.g. path: root.sg.d1.vector1[s1], return "vector1.s1".
+   */
   private String getMeasurementName(PartialPath path, String aggregation) {
     String initialMeasurement = path.getMeasurement();
     if (path instanceof VectorPartialPath) {
       String subMeasurement = ((VectorPartialPath) path).getSubSensor(0);
-      initialMeasurement += "." + subMeasurement;
+      initialMeasurement += TsFileConstant.PATH_SEPARATOR + subMeasurement;
     }
     if (aggregation != null) {
       initialMeasurement = aggregation + "(" + initialMeasurement + ")";
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/RawDataQueryPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/RawDataQueryPlan.java
index 5936633..b81ddec 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/RawDataQueryPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/RawDataQueryPlan.java
@@ -44,6 +44,7 @@ public class RawDataQueryPlan extends QueryPlan {
   private IExpression expression = null;
   private Map<String, Set<String>> deviceToMeasurements = new HashMap<>();
 
+  // TODO: remove this when all types of query supporting vector
   /** used to group all the sub sensors of one vector into VectorPartialPath */
   private List<PartialPath> deduplicatedVectorPaths = new ArrayList<>();
 
diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/AlignByDeviceDataSet.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/AlignByDeviceDataSet.java
index 86008d1..7ab4095 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/dataset/AlignByDeviceDataSet.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/AlignByDeviceDataSet.java
@@ -35,6 +35,7 @@ import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.executor.IQueryRouter;
 import org.apache.iotdb.db.service.IoTDB;
 import org.apache.iotdb.rpc.RedirectException;
+import org.apache.iotdb.tsfile.common.constant.TsFileConstant;
 import org.apache.iotdb.tsfile.exception.filter.QueryFilterOptimizationException;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.Field;
@@ -224,6 +225,11 @@ public class AlignByDeviceDataSet extends QueryDataSet {
     return false;
   }
 
+  /**
+   * Get all measurements under given device. For a vectorMeasurementSchema, we return its
+   * measurementId + all subMeasurement. e.g. schema: vector1[s1, s2], return ["vector1.s1",
+   * "vector1.s2"].
+   */
   protected Set<String> getMeasurementsUnderGivenDevice(PartialPath device) throws IOException {
     try {
       Set<String> res = new HashSet<>();
@@ -233,7 +239,7 @@ public class AlignByDeviceDataSet extends QueryDataSet {
       for (IMeasurementSchema schema : measurementSchemas) {
         if (schema instanceof VectorMeasurementSchema) {
           for (String subMeasurement : schema.getSubMeasurementsList()) {
-            res.add(schema.getMeasurementId() + "." + subMeasurement);
+            res.add(schema.getMeasurementId() + TsFileConstant.PATH_SEPARATOR + subMeasurement);
           }
         } else {
           res.add(schema.getMeasurementId());
@@ -246,6 +252,10 @@ public class AlignByDeviceDataSet extends QueryDataSet {
     }
   }
 
+  /**
+   * Attention. For a vectorPath(root.sg.d1.vector1.s1), device is root.sg.d1, measurement is
+   * "vector1.s1".
+   */
   private PartialPath transformPath(PartialPath device, String measurement) throws IOException {
     try {
       PartialPath fullPath = new PartialPath(device.getFullPath(), measurement);
@@ -253,7 +263,8 @@ public class AlignByDeviceDataSet extends QueryDataSet {
       if (schema instanceof MeasurementSchema) {
         return fullPath;
       } else {
-        return new VectorPartialPath(fullPath.getDevice(), fullPath.getMeasurement());
+        String vectorPath = fullPath.getDevice();
+        return new VectorPartialPath(vectorPath, fullPath.getMeasurement());
       }
     } catch (MetadataException e) {
       throw new IOException("Cannot get node from " + device, e);