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

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


The following commit(s) were added to refs/heads/alignbydevicevector by this 
push:
     new 045db6b  Implement vector align by device
045db6b is described below

commit 045db6be7813b945b1b538299994339724e49eac
Author: Alima777 <[email protected]>
AuthorDate: Mon Sep 6 20:16:40 2021 +0800

    Implement vector align by device
---
 .../apache/iotdb/cluster/metadata/CMManager.java   | 17 +-----
 .../iotdb/AlignedTimeseriesSessionExample.java     | 20 ++++----
 .../iotdb/HybridTimeseriesSessionExample.java      |  5 +-
 .../iotdb/tsfile/TsFileWriteVectorWithTablet.java  |  2 +-
 .../iotdb/db/engine/memtable/AbstractMemTable.java | 16 +++---
 .../db/engine/memtable/PrimitiveMemTable.java      |  3 +-
 .../db/engine/querycontext/ReadOnlyMemChunk.java   | 19 +++----
 .../engine/storagegroup/StorageGroupProcessor.java |  2 +-
 .../db/engine/storagegroup/TsFileProcessor.java    | 21 ++++----
 .../org/apache/iotdb/db/metadata/MManager.java     | 57 ++++++++++----------
 .../java/org/apache/iotdb/db/metadata/MTree.java   | 60 +++++++++++-----------
 .../iotdb/db/metadata/VectorPartialPath.java       |  8 +++
 .../iotdb/db/metadata/mnode/MeasurementMNode.java  |  2 +-
 .../iotdb/db/metadata/template/Template.java       |  2 +-
 .../iotdb/db/qp/logical/crud/QueryOperator.java    | 13 +++--
 .../iotdb/db/qp/physical/crud/InsertRowPlan.java   |  3 +-
 .../iotdb/db/qp/physical/crud/LastQueryPlan.java   |  2 -
 .../db/qp/physical/crud/RawDataQueryPlan.java      | 21 +-------
 .../db/query/dataset/AlignByDeviceDataSet.java     | 50 ++++++++++++++----
 .../iotdb/db/query/executor/QueryRouter.java       |  9 +---
 .../query/timegenerator/ServerTimeGenerator.java   |  7 ---
 .../java/org/apache/iotdb/db/utils/MemUtils.java   |  2 +-
 .../iotdb/db/writelog/recover/LogReplayer.java     |  4 +-
 .../java/org/apache/iotdb/session/Session.java     | 13 +++--
 .../org/apache/iotdb/session/SessionUtils.java     |  4 +-
 .../apache/iotdb/session/IoTDBSessionSimpleIT.java | 12 +++--
 .../apache/iotdb/session/IoTDBSessionVectorIT.java |  5 +-
 .../tsfile/write/chunk/ChunkGroupWriterImpl.java   |  2 +-
 .../tsfile/write/chunk/VectorChunkWriterImpl.java  |  8 +--
 .../apache/iotdb/tsfile/write/record/Tablet.java   | 14 ++---
 .../tsfile/write/schema/IMeasurementSchema.java    |  8 +--
 .../tsfile/write/schema/MeasurementSchema.java     |  8 +--
 .../write/schema/VectorMeasurementSchema.java      |  8 +--
 .../write/writer/VectorMeasurementSchemaStub.java  |  8 +--
 34 files changed, 218 insertions(+), 217 deletions(-)

diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/metadata/CMManager.java 
b/cluster/src/main/java/org/apache/iotdb/cluster/metadata/CMManager.java
index fa06e12..007d90a 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/metadata/CMManager.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/metadata/CMManager.java
@@ -79,7 +79,6 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
 import org.apache.iotdb.tsfile.utils.Pair;
 import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
-import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
 import org.apache.iotdb.tsfile.write.schema.VectorMeasurementSchema;
 
 import org.apache.thrift.TException;
@@ -227,7 +226,7 @@ public class CMManager extends MManager {
             new MeasurementMNode(
                 null, measurementSchema.getMeasurementId(), measurementSchema, 
null);
         if (measurementSchema instanceof VectorMeasurementSchema) {
-          for (String subSensorId : 
measurementSchema.getValueMeasurementIdList()) {
+          for (String subSensorId : 
measurementSchema.getSubMeasurementsList()) {
             cacheMeta(new PartialPath(path.getDevice(), subSensorId), 
measurementMNode, false);
           }
           cacheMeta(
@@ -263,20 +262,6 @@ public class CMManager extends MManager {
     return super.getSeriesSchema(fullPath, getMeasurementMNode(fullPath));
   }
 
-  /**
-   * Transform the PartialPath to VectorPartialPath if it is a sub sensor of 
one vector. otherwise,
-   * we don't change it.
-   */
-  @Override
-  public PartialPath transformPath(PartialPath partialPath) throws 
MetadataException {
-    IMeasurementMNode node = getMeasurementMNode(partialPath);
-    if (node.getSchema() instanceof MeasurementSchema) {
-      return partialPath;
-    } else {
-      return toVectorPath(partialPath);
-    }
-  }
-
   private IMeasurementMNode getMeasurementMNode(PartialPath fullPath) throws 
MetadataException {
     IMeasurementMNode node = null;
     // try remote cache first
diff --git 
a/example/session/src/main/java/org/apache/iotdb/AlignedTimeseriesSessionExample.java
 
b/example/session/src/main/java/org/apache/iotdb/AlignedTimeseriesSessionExample.java
index 2bbde9a..b64db80 100644
--- 
a/example/session/src/main/java/org/apache/iotdb/AlignedTimeseriesSessionExample.java
+++ 
b/example/session/src/main/java/org/apache/iotdb/AlignedTimeseriesSessionExample.java
@@ -52,13 +52,13 @@ public class AlignedTimeseriesSessionExample {
     // set session fetchSize
     session.setFetchSize(10000);
 
-    createTemplate();
-    createAlignedTimeseries();
-    insertAlignedRecord();
-
-    insertTabletWithAlignedTimeseriesMethod1();
-    insertTabletWithAlignedTimeseriesMethod2();
-    insertNullableTabletWithAlignedTimeseries();
+    //        createTemplate();
+    //        createAlignedTimeseries();
+    //        insertAlignedRecord();
+    //
+    //        insertTabletWithAlignedTimeseriesMethod1();
+    //        insertTabletWithAlignedTimeseriesMethod2();
+    //        insertNullableTabletWithAlignedTimeseries();
 
     selectTest();
     selectWithValueFilterTest();
@@ -67,7 +67,7 @@ public class AlignedTimeseriesSessionExample {
 
     selectWithAggregationTest();
 
-    // selectWithAlignByDeviceTest();
+    selectWithAlignByDeviceTest();
 
     session.close();
   }
@@ -255,11 +255,11 @@ public class AlignedTimeseriesSessionExample {
       int rowIndex = tablet.rowSize++;
       tablet.addTimestamp(rowIndex, timestamp);
       tablet.addValue(
-          schemaList.get(0).getValueMeasurementIdList().get(0),
+          schemaList.get(0).getSubMeasurementsList().get(0),
           rowIndex,
           new SecureRandom().nextLong());
       tablet.addValue(
-          schemaList.get(0).getValueMeasurementIdList().get(1),
+          schemaList.get(0).getSubMeasurementsList().get(1),
           rowIndex,
           new SecureRandom().nextInt());
 
diff --git 
a/example/session/src/main/java/org/apache/iotdb/HybridTimeseriesSessionExample.java
 
b/example/session/src/main/java/org/apache/iotdb/HybridTimeseriesSessionExample.java
index 993fcb3..c2a9ed9 100644
--- 
a/example/session/src/main/java/org/apache/iotdb/HybridTimeseriesSessionExample.java
+++ 
b/example/session/src/main/java/org/apache/iotdb/HybridTimeseriesSessionExample.java
@@ -86,10 +86,9 @@ public class HybridTimeseriesSessionExample {
     for (long row = minTime; row < maxTime; row++) {
       int rowIndex = tablet.rowSize++;
       tablet.addTimestamp(rowIndex, timestamp);
+      tablet.addValue(schemaList.get(0).getSubMeasurementsList().get(0), 
rowIndex, row * 10 + 1L);
       tablet.addValue(
-          schemaList.get(0).getValueMeasurementIdList().get(0), rowIndex, row 
* 10 + 1L);
-      tablet.addValue(
-          schemaList.get(0).getValueMeasurementIdList().get(1), rowIndex, 
(int) (row * 10 + 2));
+          schemaList.get(0).getSubMeasurementsList().get(1), rowIndex, (int) 
(row * 10 + 2));
 
       if (tablet.rowSize == tablet.getMaxRowNumber()) {
         session.insertTablet(tablet, true);
diff --git 
a/example/tsfile/src/main/java/org/apache/iotdb/tsfile/TsFileWriteVectorWithTablet.java
 
b/example/tsfile/src/main/java/org/apache/iotdb/tsfile/TsFileWriteVectorWithTablet.java
index b8b4a13..5f3e9ba 100644
--- 
a/example/tsfile/src/main/java/org/apache/iotdb/tsfile/TsFileWriteVectorWithTablet.java
+++ 
b/example/tsfile/src/main/java/org/apache/iotdb/tsfile/TsFileWriteVectorWithTablet.java
@@ -93,7 +93,7 @@ public class TsFileWriteVectorWithTablet {
           for (int i = 0; i < measurementSchemas.size(); i++) {
             IMeasurementSchema measurementSchema = measurementSchemas.get(i);
             if (measurementSchema instanceof VectorMeasurementSchema) {
-              for (String valueName : 
measurementSchema.getValueMeasurementIdList()) {
+              for (String valueName : 
measurementSchema.getSubMeasurementsList()) {
                 tablet.addValue(valueName, row, value);
               }
             }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
index 984ce32..fed4851 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
@@ -131,14 +131,14 @@ public abstract class AbstractMemTable implements 
IMemTable {
       if (measurementMNode != null) {
         // write vector
         Object[] vectorValue =
-            new 
Object[measurementMNode.getSchema().getValueTSDataTypeList().size()];
+            new 
Object[measurementMNode.getSchema().getSubMeasurementsTSDataTypeList().size()];
         for (int j = 0; j < vectorValue.length; j++) {
           vectorValue[j] = values[columnIndex];
           columnIndex++;
         }
         memSize +=
             MemUtils.getVectorRecordSize(
-                measurementMNode.getSchema().getValueTSDataTypeList(),
+                
measurementMNode.getSchema().getSubMeasurementsTSDataTypeList(),
                 vectorValue,
                 disableMemControl);
         write(
@@ -209,9 +209,9 @@ public abstract class AbstractMemTable implements IMemTable 
{
       if (insertTabletPlan.isAligned()) {
         VectorMeasurementSchema vectorSchema =
             (VectorMeasurementSchema) 
insertTabletPlan.getMeasurementMNodes()[i].getSchema();
-        Object[] columns = new 
Object[vectorSchema.getValueMeasurementIdList().size()];
-        BitMap[] bitMaps = new 
BitMap[vectorSchema.getValueMeasurementIdList().size()];
-        for (int j = 0; j < vectorSchema.getValueMeasurementIdList().size(); 
j++) {
+        Object[] columns = new 
Object[vectorSchema.getSubMeasurementsList().size()];
+        BitMap[] bitMaps = new 
BitMap[vectorSchema.getSubMeasurementsList().size()];
+        for (int j = 0; j < vectorSchema.getSubMeasurementsList().size(); j++) 
{
           columns[j] = insertTabletPlan.getColumns()[columnIndex];
           if (insertTabletPlan.getBitMaps() != null) {
             bitMaps[j] = insertTabletPlan.getBitMaps()[columnIndex];
@@ -321,11 +321,11 @@ public abstract class AbstractMemTable implements 
IMemTable {
         return null;
       }
 
-      List<String> measurementIdList = 
partialVectorSchema.getValueMeasurementIdList();
+      List<String> measurementIdList = 
partialVectorSchema.getSubMeasurementsList();
       List<Integer> columns = new ArrayList<>();
       IMeasurementSchema vectorSchema = vectorMemChunk.getSchema();
       for (String queryingMeasurement : measurementIdList) {
-        
columns.add(vectorSchema.getValueMeasurementIdList().indexOf(queryingMeasurement));
+        
columns.add(vectorSchema.getSubMeasurementsList().indexOf(queryingMeasurement));
       }
       // get sorted tv list is synchronized so different query can get right 
sorted list reference
       TVList vectorTvListCopy = 
vectorMemChunk.getSortedTvListForQuery(columns);
@@ -376,7 +376,7 @@ public abstract class AbstractMemTable implements IMemTable 
{
       // for vector type
       else if (schema.getType() == TSDataType.VECTOR) {
         List<String> measurements = 
MetaUtils.getMeasurementsInPartialPath(originalPath);
-        if (measurements.containsAll(schema.getValueMeasurementIdList())) {
+        if (measurements.containsAll(schema.getSubMeasurementsList())) {
           if (startTimestamp == Long.MIN_VALUE && endTimestamp == 
Long.MAX_VALUE) {
             iter.remove();
           }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/memtable/PrimitiveMemTable.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/memtable/PrimitiveMemTable.java
index e13bbf2..922cb12 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/memtable/PrimitiveMemTable.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/memtable/PrimitiveMemTable.java
@@ -42,7 +42,8 @@ public class PrimitiveMemTable extends AbstractMemTable {
   protected IWritableMemChunk genMemSeries(IMeasurementSchema schema) {
     if (schema.getType() == TSDataType.VECTOR) {
       return new WritableMemChunk(
-          schema, 
TVListAllocator.getInstance().allocate(schema.getValueTSDataTypeList()));
+          schema,
+          
TVListAllocator.getInstance().allocate(schema.getSubMeasurementsTSDataTypeList()));
     }
     return new WritableMemChunk(schema, 
TVListAllocator.getInstance().allocate(schema.getType()));
   }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java
index e7e83db..bdd9e3b 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java
@@ -173,13 +173,14 @@ public class ReadOnlyMemChunk {
     IChunkMetadata timeChunkMetadata =
         new ChunkMetadata(measurementUid, TSDataType.VECTOR, 0, 
timeStatistics);
     List<IChunkMetadata> valueChunkMetadataList = new ArrayList<>();
-    Statistics[] valueStatistics = new 
Statistics[schema.getValueTSDataTypeList().size()];
-    for (int i = 0; i < schema.getValueTSDataTypeList().size(); i++) {
-      valueStatistics[i] = 
Statistics.getStatsByType(schema.getValueTSDataTypeList().get(i));
+    Statistics[] valueStatistics = new 
Statistics[schema.getSubMeasurementsTSDataTypeList().size()];
+    for (int i = 0; i < schema.getSubMeasurementsTSDataTypeList().size(); i++) 
{
+      valueStatistics[i] =
+          
Statistics.getStatsByType(schema.getSubMeasurementsTSDataTypeList().get(i));
       IChunkMetadata valueChunkMetadata =
           new ChunkMetadata(
-              schema.getValueMeasurementIdList().get(i),
-              schema.getValueTSDataTypeList().get(i),
+              schema.getSubMeasurementsList().get(i),
+              schema.getSubMeasurementsTSDataTypeList().get(i),
               0,
               valueStatistics[i]);
       valueChunkMetadataList.add(valueChunkMetadata);
@@ -190,7 +191,7 @@ public class ReadOnlyMemChunk {
       while (iterator.hasNextTimeValuePair()) {
         TimeValuePair timeValuePair = iterator.nextTimeValuePair();
         timeStatistics.update(timeValuePair.getTimestamp());
-        if (schema.getValueTSDataTypeList().size() == 1) {
+        if (schema.getSubMeasurementsTSDataTypeList().size() == 1) {
           updateValueStatisticsForSingleColumn(schema, valueStatistics, 
timeValuePair);
         } else {
           updateValueStatistics(schema, valueStatistics, timeValuePair);
@@ -212,7 +213,7 @@ public class ReadOnlyMemChunk {
   private void updateValueStatisticsForSingleColumn(
       IMeasurementSchema schema, Statistics[] valueStatistics, TimeValuePair 
timeValuePair)
       throws QueryProcessException {
-    switch (schema.getValueTSDataTypeList().get(0)) {
+    switch (schema.getSubMeasurementsTSDataTypeList().get(0)) {
       case BOOLEAN:
         valueStatistics[0].update(
             timeValuePair.getTimestamp(), 
timeValuePair.getValue().getBoolean());
@@ -243,11 +244,11 @@ public class ReadOnlyMemChunk {
   private void updateValueStatistics(
       IMeasurementSchema schema, Statistics[] valueStatistics, TimeValuePair 
timeValuePair)
       throws QueryProcessException {
-    for (int i = 0; i < schema.getValueTSDataTypeList().size(); i++) {
+    for (int i = 0; i < schema.getSubMeasurementsTSDataTypeList().size(); i++) 
{
       if (timeValuePair.getValue().getVector()[i] == null) {
         continue;
       }
-      switch (schema.getValueTSDataTypeList().get(i)) {
+      switch (schema.getSubMeasurementsTSDataTypeList().get(i)) {
         case BOOLEAN:
           valueStatistics[i].update(
               timeValuePair.getTimestamp(), 
timeValuePair.getValue().getVector()[i].getBoolean());
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
index 297a80e..019219f 100755
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
@@ -1094,7 +1094,7 @@ public class StorageGroupProcessor {
     for (int i = 0; i < mNodes.length; i++) {
       // Don't update cached last value for vector type
       if (mNodes[i] != null && plan.isAligned()) {
-        columnIndex += 
mNodes[i].getSchema().getValueMeasurementIdList().size();
+        columnIndex += mNodes[i].getSchema().getSubMeasurementsList().size();
       } else {
         if (plan.getColumns()[i] == null) {
           columnIndex++;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
index 7745138..f6a9270 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
@@ -341,11 +341,12 @@ public class TsFileProcessor {
         IMeasurementSchema schema = 
insertRowPlan.getMeasurementMNodes()[i].getSchema();
         if (schema.getType() == TSDataType.VECTOR) {
           chunkMetadataIncrement +=
-              schema.getValueTSDataTypeList().size()
+              schema.getSubMeasurementsTSDataTypeList().size()
                   * ChunkMetadata.calculateRamSize(
-                      schema.getValueMeasurementIdList().get(0),
-                      schema.getValueTSDataTypeList().get(0));
-          memTableIncrement += 
TVList.vectorTvListArrayMemSize(schema.getValueTSDataTypeList());
+                      schema.getSubMeasurementsList().get(0),
+                      schema.getSubMeasurementsTSDataTypeList().get(0));
+          memTableIncrement +=
+              
TVList.vectorTvListArrayMemSize(schema.getSubMeasurementsTSDataTypeList());
         } else {
           chunkMetadataIncrement +=
               ChunkMetadata.calculateRamSize(
@@ -386,8 +387,8 @@ public class TsFileProcessor {
       if (insertTabletPlan.isAligned()) {
         VectorMeasurementSchema vectorSchema =
             (VectorMeasurementSchema) 
insertTabletPlan.getMeasurementMNodes()[i].getSchema();
-        Object[] columns = new 
Object[vectorSchema.getValueMeasurementIdList().size()];
-        for (int j = 0; j < vectorSchema.getValueMeasurementIdList().size(); 
j++) {
+        Object[] columns = new 
Object[vectorSchema.getSubMeasurementsList().size()];
+        for (int j = 0; j < vectorSchema.getSubMeasurementsList().size(); j++) 
{
           columns[j] = insertTabletPlan.getColumns()[columnIndex++];
         }
         updateVectorMemCost(vectorSchema, deviceId, start, end, memIncrements, 
columns);
@@ -459,8 +460,8 @@ public class TsFileProcessor {
       Object[] columns) {
     // memIncrements = [memTable, text, chunk metadata] respectively
 
-    List<String> measurementIds = vectorSchema.getValueMeasurementIdList();
-    List<TSDataType> dataTypes = vectorSchema.getValueTSDataTypeList();
+    List<String> measurementIds = vectorSchema.getSubMeasurementsList();
+    List<TSDataType> dataTypes = 
vectorSchema.getSubMeasurementsTSDataTypeList();
     if (workMemTable.checkIfChunkDoesNotExist(deviceId, 
vectorSchema.getMeasurementId())) {
       // ChunkMetadataIncrement
       memIncrements[2] +=
@@ -1252,8 +1253,8 @@ public class TsFileProcessor {
         List<ChunkMetadata> timeChunkMetadataList =
             writer.getVisibleMetadataList(deviceId, measurementId, 
schema.getType());
         List<List<ChunkMetadata>> valueChunkMetadataList = new ArrayList<>();
-        List<String> valueMeasurementIdList = 
schema.getValueMeasurementIdList();
-        List<TSDataType> valueDataTypeList = schema.getValueTSDataTypeList();
+        List<String> valueMeasurementIdList = schema.getSubMeasurementsList();
+        List<TSDataType> valueDataTypeList = 
schema.getSubMeasurementsTSDataTypeList();
         for (int i = 0; i < valueMeasurementIdList.size(); i++) {
           valueChunkMetadataList.add(
               writer.getVisibleMetadataList(
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
index 9368523..9e748a5 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
@@ -23,10 +23,23 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.StorageEngine;
 import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory;
 import org.apache.iotdb.db.engine.trigger.executor.TriggerEngine;
-import org.apache.iotdb.db.exception.metadata.*;
+import org.apache.iotdb.db.exception.metadata.AliasAlreadyExistException;
+import org.apache.iotdb.db.exception.metadata.AlignedTimeseriesException;
+import org.apache.iotdb.db.exception.metadata.DataTypeMismatchException;
+import org.apache.iotdb.db.exception.metadata.DeleteFailedException;
+import org.apache.iotdb.db.exception.metadata.IllegalPathException;
+import org.apache.iotdb.db.exception.metadata.MetadataException;
+import org.apache.iotdb.db.exception.metadata.PathAlreadyExistException;
+import org.apache.iotdb.db.exception.metadata.PathNotExistException;
+import org.apache.iotdb.db.exception.metadata.StorageGroupAlreadySetException;
+import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
 import org.apache.iotdb.db.metadata.logfile.MLogReader;
 import org.apache.iotdb.db.metadata.logfile.MLogWriter;
-import org.apache.iotdb.db.metadata.mnode.*;
+import org.apache.iotdb.db.metadata.mnode.IEntityMNode;
+import org.apache.iotdb.db.metadata.mnode.IMNode;
+import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
+import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode;
+import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
 import org.apache.iotdb.db.metadata.tag.TagManager;
 import org.apache.iotdb.db.metadata.template.Template;
 import org.apache.iotdb.db.metadata.template.TemplateManager;
@@ -590,7 +603,7 @@ public class MManager {
       if (lastNode.isMeasurement()) {
         IMeasurementSchema schema = ((IMeasurementMNode) lastNode).getSchema();
         if (schema instanceof VectorMeasurementSchema) {
-          if (schema.getValueMeasurementIdList().size() != 
allTimeseries.size()) {
+          if (schema.getSubMeasurementsList().size() != allTimeseries.size()) {
             throw new AlignedTimeseriesException(
                 "Not support deleting part of aligned timeseies!", 
prefixPath.getFullPath());
           } else {
@@ -652,7 +665,7 @@ public class MManager {
       removeFromTagInvertedIndex(pair.right);
       timeseriesNum = 1;
     } else if (schema instanceof VectorMeasurementSchema) {
-      timeseriesNum += schema.getValueTSDataTypeList().size();
+      timeseriesNum += schema.getSubMeasurementsTSDataTypeList().size();
     }
     PartialPath storageGroupPath = pair.left;
 
@@ -760,8 +773,10 @@ public class MManager {
     if (schema instanceof MeasurementSchema) {
       return schema.getType();
     } else {
-      List<String> measurements = schema.getValueMeasurementIdList();
-      return 
schema.getValueTSDataTypeList().get(measurements.indexOf(path.getMeasurement()));
+      List<String> measurements = schema.getSubMeasurementsList();
+      return schema
+          .getSubMeasurementsTSDataTypeList()
+          .get(measurements.indexOf(path.getMeasurement()));
     }
   }
 
@@ -1041,15 +1056,15 @@ public class MManager {
     if (schema == null || schema.getType() != TSDataType.VECTOR) {
       return schema;
     }
-    List<String> measurementsInLeaf = schema.getValueMeasurementIdList();
+    List<String> measurementsInLeaf = schema.getSubMeasurementsList();
     List<PartialPath> measurements = ((VectorPartialPath) 
fullPath).getSubSensorsPathList();
     TSDataType[] types = new TSDataType[measurements.size()];
     TSEncoding[] encodings = new TSEncoding[measurements.size()];
 
     for (int i = 0; i < measurements.size(); i++) {
       int index = 
measurementsInLeaf.indexOf(measurements.get(i).getMeasurement());
-      types[i] = schema.getValueTSDataTypeList().get(index);
-      encodings[i] = schema.getValueTSEncodingList().get(index);
+      types[i] = schema.getSubMeasurementsTSDataTypeList().get(index);
+      encodings[i] = schema.getSubMeasurementsTSEncodingList().get(index);
     }
     String[] array = new String[measurements.size()];
     for (int i = 0; i < array.length; i++) {
@@ -1060,26 +1075,6 @@ public class MManager {
   }
 
   /**
-   * Transform the PartialPath to VectorPartialPath if it is a sub sensor of 
one vector. otherwise,
-   * we don't change it.
-   */
-  public PartialPath transformPath(PartialPath partialPath) throws 
MetadataException {
-    IMeasurementMNode node = (IMeasurementMNode) getNodeByPath(partialPath);
-    if (node.getSchema() instanceof MeasurementSchema) {
-      return partialPath;
-    } else {
-      return toVectorPath(partialPath);
-    }
-  }
-
-  /** Convert the PartialPath to VectorPartialPath. */
-  protected VectorPartialPath toVectorPath(PartialPath partialPath) throws 
MetadataException {
-    List<PartialPath> subSensorsPathList = new ArrayList<>();
-    subSensorsPathList.add(partialPath);
-    return new VectorPartialPath(partialPath.getDevice(), subSensorsPathList);
-  }
-
-  /**
    * Get schema of partialPaths, in which aligned timeseries should only 
organized to one schema.
    * This method should be called when logical plan converts to physical plan.
    *
@@ -1770,7 +1765,7 @@ public class MManager {
         if (plan instanceof InsertRowPlan || plan instanceof InsertTabletPlan) 
{
           if (plan.isAligned()) {
             TSDataType dataTypeInNode =
-                measurementMNode.getSchema().getValueTSDataTypeList().get(i);
+                
measurementMNode.getSchema().getSubMeasurementsTSDataTypeList().get(i);
             insertDataType = plan.getDataTypes()[i];
             if (insertDataType == null) {
               insertDataType = dataTypeInNode;
@@ -1778,7 +1773,7 @@ public class MManager {
             if (dataTypeInNode != insertDataType) {
               logger.warn(
                   "DataType mismatch, Insert measurement {} in {} type {}, 
metadata tree type {}",
-                  
measurementMNode.getSchema().getValueMeasurementIdList().get(i),
+                  measurementMNode.getSchema().getSubMeasurementsList().get(i),
                   measurementList[i],
                   insertDataType,
                   dataTypeInNode);
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
index 755605f..0bdba44 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
@@ -1264,36 +1264,36 @@ public class MTree implements Serializable {
    */
   @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity 
warning
   private void findPath(
-      IMNode node,
+      IMNode curNode,
       String[] nodes,
-      int idx,
+      int childIndex,
       List<Pair<PartialPath, String[]>> timeseriesSchemaList,
       boolean hasLimit,
       boolean needLast,
       QueryContext queryContext,
       Template upperTemplate)
       throws MetadataException {
-    if (node.isMeasurement()) {
-      if ((nodes.length <= idx
-          || ((IMeasurementMNode) node).getSchema() instanceof 
VectorMeasurementSchema)) {
+    if (curNode.isMeasurement()) {
+      if ((nodes.length <= childIndex
+          || ((IMeasurementMNode) curNode).getSchema() instanceof 
VectorMeasurementSchema)) {
         if (hasLimit) {
           curOffset.set(curOffset.get() + 1);
           if (curOffset.get() < offset.get() || count.get().intValue() == 
limit.get().intValue()) {
             return;
           }
         }
-        IMeasurementSchema measurementSchema = ((IMeasurementMNode) 
node).getSchema();
+        IMeasurementSchema measurementSchema = ((IMeasurementMNode) 
curNode).getSchema();
         if (measurementSchema instanceof MeasurementSchema) {
           addMeasurementSchema(
-              node, timeseriesSchemaList, needLast, queryContext, 
measurementSchema, "*");
+              curNode, timeseriesSchemaList, needLast, queryContext, 
measurementSchema, "*");
         } else if (measurementSchema instanceof VectorMeasurementSchema) {
           addVectorMeasurementSchema(
-              node,
+              curNode,
               timeseriesSchemaList,
               needLast,
               queryContext,
               measurementSchema,
-              idx < nodes.length ? nodes[idx] : "*");
+              childIndex < nodes.length ? nodes[childIndex] : "*");
         }
         if (hasLimit) {
           count.set(count.get() + 1);
@@ -1302,19 +1302,19 @@ public class MTree implements Serializable {
       return;
     }
 
-    String nodeReg = MetaUtils.getNodeRegByIdx(idx, nodes);
-    if (node.getSchemaTemplate() != null) {
-      upperTemplate = node.getSchemaTemplate();
+    String nodeReg = MetaUtils.getNodeRegByIdx(childIndex, nodes);
+    if (curNode.getSchemaTemplate() != null) {
+      upperTemplate = curNode.getSchemaTemplate();
     }
 
-    // we should use template when all child is measurement or this node has 
no child
+    // we should use template when all child is measurement or this curNode 
has no child
     if (!nodeReg.contains(PATH_WILDCARD)) {
-      IMNode next = node.getChild(nodeReg);
+      IMNode next = curNode.getChild(nodeReg);
       if (next != null) {
         findPath(
             next,
             nodes,
-            idx + 1,
+            childIndex + 1,
             timeseriesSchemaList,
             hasLimit,
             needLast,
@@ -1322,14 +1322,14 @@ public class MTree implements Serializable {
             upperTemplate);
       }
     } else {
-      for (IMNode child : node.getChildren().values()) {
+      for (IMNode child : curNode.getChildren().values()) {
         if (!Pattern.matches(nodeReg.replace("*", ".*"), child.getName())) {
           continue;
         }
         findPath(
             child,
             nodes,
-            idx + 1,
+            childIndex + 1,
             timeseriesSchemaList,
             hasLimit,
             needLast,
@@ -1342,14 +1342,14 @@ public class MTree implements Serializable {
     }
 
     // template part
-    if (node.isUseTemplate()) {
+    if (curNode.isUseTemplate()) {
       if (upperTemplate != null) {
         HashSet<IMeasurementSchema> set = new HashSet<>();
         for (IMeasurementSchema schema : 
upperTemplate.getSchemaMap().values()) {
           if (set.add(schema)) {
             if (schema instanceof MeasurementSchema) {
               addMeasurementSchema(
-                  new MeasurementMNode(node, schema.getMeasurementId(), 
schema, null),
+                  new MeasurementMNode(curNode, schema.getMeasurementId(), 
schema, null),
                   timeseriesSchemaList,
                   needLast,
                   queryContext,
@@ -1359,14 +1359,14 @@ public class MTree implements Serializable {
               VectorMeasurementSchema vectorMeasurementSchema = 
(VectorMeasurementSchema) schema;
               if (Pattern.matches(
                   nodeReg.replace("*", ".*"), 
vectorMeasurementSchema.getMeasurementId())) {
-                String firstNode = schema.getValueMeasurementIdList().get(0);
+                String firstNode = schema.getSubMeasurementsList().get(0);
                 addVectorMeasurementSchemaForTemplate(
-                    new MeasurementMNode(node, firstNode, schema, null),
+                    new MeasurementMNode(curNode, firstNode, schema, null),
                     timeseriesSchemaList,
                     needLast,
                     queryContext,
                     schema,
-                    MetaUtils.getNodeRegByIdx(idx + 1, nodes),
+                    MetaUtils.getNodeRegByIdx(childIndex + 1, nodes),
                     vectorMeasurementSchema.getMeasurementId());
               }
             }
@@ -1410,7 +1410,7 @@ public class MTree implements Serializable {
       IMeasurementSchema schema,
       String reg)
       throws StorageGroupNotSetException, IllegalPathException {
-    List<String> measurements = schema.getValueMeasurementIdList();
+    List<String> measurements = schema.getSubMeasurementsList();
     for (int i = 0; i < measurements.size(); i++) {
       if (!Pattern.matches(reg.replace("*", ".*"), measurements.get(i))) {
         continue;
@@ -1419,8 +1419,8 @@ public class MTree implements Serializable {
       String[] tsRow = new String[7];
       tsRow[0] = null;
       tsRow[1] = getStorageGroupPath(devicePath).getFullPath();
-      tsRow[2] = schema.getValueTSDataTypeList().get(i).toString();
-      tsRow[3] = schema.getValueTSEncodingList().get(i).toString();
+      tsRow[2] = schema.getSubMeasurementsTSDataTypeList().get(i).toString();
+      tsRow[3] = schema.getSubMeasurementsTSEncodingList().get(i).toString();
       tsRow[4] = schema.getCompressor().toString();
       tsRow[5] = "-1";
       tsRow[6] =
@@ -1428,7 +1428,7 @@ public class MTree implements Serializable {
               ? String.valueOf(getLastTimeStamp((IMeasurementMNode) node, 
queryContext))
               : null;
       Pair<PartialPath, String[]> temp =
-          new Pair<>(new PartialPath(devicePath.getFullPath(), 
measurements.get(i)), tsRow);
+          new Pair<>(new VectorPartialPath(devicePath.getFullPath(), 
measurements.get(i)), tsRow);
       timeseriesSchemaList.add(temp);
     }
   }
@@ -1442,7 +1442,7 @@ public class MTree implements Serializable {
       String reg,
       String vectorId)
       throws StorageGroupNotSetException, IllegalPathException {
-    List<String> measurements = schema.getValueMeasurementIdList();
+    List<String> measurements = schema.getSubMeasurementsList();
     for (int i = 0; i < measurements.size(); i++) {
       if (!Pattern.matches(reg.replace("*", ".*"), measurements.get(i))) {
         continue;
@@ -1452,8 +1452,8 @@ public class MTree implements Serializable {
       String[] tsRow = new String[7];
       tsRow[0] = null;
       tsRow[1] = getStorageGroupPath(devicePath).getFullPath();
-      tsRow[2] = schema.getValueTSDataTypeList().get(i).toString();
-      tsRow[3] = schema.getValueTSEncodingList().get(i).toString();
+      tsRow[2] = schema.getSubMeasurementsTSDataTypeList().get(i).toString();
+      tsRow[3] = schema.getSubMeasurementsTSEncodingList().get(i).toString();
       tsRow[4] = schema.getCompressor().toString();
       tsRow[5] = "-1";
       tsRow[6] =
@@ -1461,7 +1461,7 @@ public class MTree implements Serializable {
               ? String.valueOf(getLastTimeStamp((IMeasurementMNode) node, 
queryContext))
               : null;
       Pair<PartialPath, String[]> temp =
-          new Pair<>(new PartialPath(devicePath.getFullPath(), 
measurements.get(i)), tsRow);
+          new Pair<>(new VectorPartialPath(devicePath.getFullPath(), 
measurements.get(i)), tsRow);
       timeseriesSchemaList.add(temp);
     }
   }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/VectorPartialPath.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/VectorPartialPath.java
index 65ef534..7f985e1 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/VectorPartialPath.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/VectorPartialPath.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.db.metadata;
 
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
 
+import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 
@@ -38,6 +39,13 @@ public class VectorPartialPath extends PartialPath {
       throws IllegalPathException {
     super(path);
     this.subSensorsPathList = subSensorsPathList;
+    if (subSensorsPathList.size() == 1) {
+      this.fullPath = subSensorsPathList.get(0).getFullPath();
+    }
+  }
+
+  public VectorPartialPath(String path, String subSensor) throws 
IllegalPathException {
+    this(path, Collections.singletonList(new PartialPath(path, subSensor)));
   }
 
   public List<PartialPath> getSubSensorsPathList() {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MeasurementMNode.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MeasurementMNode.java
index 27480e8..1899c1c 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MeasurementMNode.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MeasurementMNode.java
@@ -118,7 +118,7 @@ public class MeasurementMNode extends MNode implements 
IMeasurementMNode {
       return schema.getType();
     } else {
       int index = schema.getMeasurementIdColumnIndex(measurementId);
-      return schema.getValueTSDataTypeList().get(index);
+      return schema.getSubMeasurementsTSDataTypeList().get(index);
     }
   }
 
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java
index 5b769da..2d5b74b 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java
@@ -168,7 +168,7 @@ public class Template {
       if (schemaEntry.getValue() instanceof VectorMeasurementSchema) {
         VectorMeasurementSchema vectorMeasurementSchema =
             (VectorMeasurementSchema) schemaEntry.getValue();
-        res.put(schemaEntry.getKey(), 
vectorMeasurementSchema.getValueMeasurementIdList());
+        res.put(schemaEntry.getKey(), 
vectorMeasurementSchema.getSubMeasurementsList());
       } else {
         res.put(schemaEntry.getKey(), new ArrayList<>());
       }
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 d3dff46..0ef38df 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
@@ -25,6 +25,7 @@ import 
org.apache.iotdb.db.exception.query.LogicalOptimizeException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.index.common.IndexType;
 import org.apache.iotdb.db.metadata.PartialPath;
+import org.apache.iotdb.db.metadata.VectorPartialPath;
 import org.apache.iotdb.db.qp.constant.SQLConstant;
 import org.apache.iotdb.db.qp.logical.Operator;
 import org.apache.iotdb.db.qp.physical.PhysicalPlan;
@@ -260,14 +261,14 @@ public class QueryOperator extends Operator {
           }
 
           if (actualPaths.isEmpty()) {
-            String nonExistMeasurement = 
getMeasurementName(fullPath.getMeasurement(), aggregation);
+            String nonExistMeasurement = getMeasurementName(fullPath, 
aggregation);
             if (measurementSetOfGivenSuffix.add(nonExistMeasurement)) {
               measurementInfoMap.putIfAbsent(
                   nonExistMeasurement, new 
MeasurementInfo(MeasurementType.NonExist));
             }
           } else {
             for (PartialPath path : actualPaths) {
-              String measurementName = 
getMeasurementName(path.getMeasurement(), aggregation);
+              String measurementName = getMeasurementName(path, aggregation);
               TSDataType measurementDataType = 
IoTDB.metaManager.getSeriesType(path);
               TSDataType columnDataType = getAggregationType(aggregation);
               columnDataType = columnDataType == null ? measurementDataType : 
columnDataType;
@@ -372,7 +373,13 @@ public class QueryOperator extends Operator {
         : (((FunctionExpression) expression).getPaths().get(0));
   }
 
-  private String getMeasurementName(String initialMeasurement, String 
aggregation) {
+  private String getMeasurementName(PartialPath path, String aggregation) {
+    String initialMeasurement = path.getMeasurement();
+    if (path instanceof VectorPartialPath) {
+      String subMeasurement =
+          ((VectorPartialPath) 
path).getSubSensorsPathList().get(0).getMeasurement();
+      initialMeasurement += "." + subMeasurement;
+    }
     if (aggregation != null) {
       initialMeasurement = aggregation + "(" + initialMeasurement + ")";
     }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java 
b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java
index d201ae7..40ef6ca 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java
@@ -281,7 +281,8 @@ public class InsertRowPlan extends InsertPlan {
         }
         // for aligned timeseries
         else {
-          for (TSDataType dataType : 
measurementMNodes[i].getSchema().getValueTSDataTypeList()) {
+          for (TSDataType dataType :
+              
measurementMNodes[i].getSchema().getSubMeasurementsTSDataTypeList()) {
             dataTypes[columnIndex] = dataType;
             try {
               values[columnIndex] =
diff --git 
a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/LastQueryPlan.java 
b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/LastQueryPlan.java
index 4064364..21c3424 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/LastQueryPlan.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/LastQueryPlan.java
@@ -24,7 +24,6 @@ import 
org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.qp.logical.Operator;
 import org.apache.iotdb.db.qp.strategy.PhysicalGenerator;
 import org.apache.iotdb.db.query.expression.ResultColumn;
-import org.apache.iotdb.db.service.IoTDB;
 import org.apache.iotdb.tsfile.read.expression.IExpression;
 import org.apache.iotdb.tsfile.read.expression.impl.GlobalTimeExpression;
 import org.apache.iotdb.tsfile.read.filter.TimeFilter.TimeGt;
@@ -56,7 +55,6 @@ public class LastQueryPlan extends RawDataQueryPlan {
         columnForReaderSet.add(column);
       }
     }
-    transformPaths(IoTDB.metaManager);
     setResultColumns(deduplicatedResultColumns);
   }
 
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 796acc3..1cc9a56 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
@@ -20,12 +20,10 @@ package org.apache.iotdb.db.qp.physical.crud;
 
 import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
-import org.apache.iotdb.db.metadata.MManager;
 import org.apache.iotdb.db.metadata.PartialPath;
 import org.apache.iotdb.db.metadata.VectorPartialPath;
 import org.apache.iotdb.db.qp.logical.Operator;
 import org.apache.iotdb.db.qp.strategy.PhysicalGenerator;
-import org.apache.iotdb.db.service.IoTDB;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.Path;
 import org.apache.iotdb.tsfile.read.expression.IExpression;
@@ -95,16 +93,10 @@ public class RawDataQueryPlan extends QueryPlan {
       }
     }
 
-    // TODO Maybe we should get VectorPartialPath above from MTree
-    // Currently, the above processing will only produce PartialPath instead 
of VectorPartialPath
-    // even if the queried time series is vector
-    // So, we need to transform the PartialPath to VectorPartialPath if is is 
a vector.
-    if (!isRawQuery()) {
-      transformPaths(IoTDB.metaManager);
-    } else {
+    if (isRawQuery()) {
       // if it is a RawQueryWithoutValueFilter, we also need to group all the 
subSensors of one
       // vector into one VectorPartialPath
-      transformVectorPaths(physicalGenerator, columnForDisplaySet);
+      // transformVectorPaths(physicalGenerator, columnForDisplaySet);
     }
   }
 
@@ -177,15 +169,6 @@ public class RawDataQueryPlan extends QueryPlan {
     return deviceToMeasurements;
   }
 
-  public void transformPaths(MManager mManager) throws MetadataException {
-    for (int i = 0; i < deduplicatedPaths.size(); i++) {
-      PartialPath path = mManager.transformPath(deduplicatedPaths.get(i));
-      if (path instanceof VectorPartialPath) {
-        deduplicatedPaths.set(i, path);
-      }
-    }
-  }
-
   /**
    * Group all the subSensors of one vector into one VectorPartialPath save 
the grouped
    * VectorPartialPath in deduplicatedVectorPaths and 
deduplicatedVectorDataTypes instead of putting
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 923f459..e2fc477 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
@@ -23,7 +23,9 @@ import org.apache.iotdb.db.exception.StorageEngineException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.PartialPath;
+import org.apache.iotdb.db.metadata.VectorPartialPath;
 import org.apache.iotdb.db.metadata.mnode.IMNode;
+import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
 import org.apache.iotdb.db.metadata.template.Template;
 import org.apache.iotdb.db.qp.physical.crud.AggregationPlan;
 import org.apache.iotdb.db.qp.physical.crud.AlignByDevicePlan;
@@ -43,9 +45,13 @@ import org.apache.iotdb.tsfile.read.common.RowRecord;
 import org.apache.iotdb.tsfile.read.expression.IExpression;
 import org.apache.iotdb.tsfile.read.query.dataset.QueryDataSet;
 import org.apache.iotdb.tsfile.utils.Binary;
+import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
+import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
+import org.apache.iotdb.tsfile.write.schema.VectorMeasurementSchema;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -156,7 +162,7 @@ public class AlignByDeviceDataSet extends QueryDataSet {
         }
         if (measurementOfGivenDevice.contains(measurement)) {
           executeColumns.add(column);
-          executePaths.add(currentDevice.concatNode(measurement));
+          executePaths.add(transformPath(currentDevice, measurement));
           
tsDataTypes.add(measurementInfoMap.get(column).getMeasurementDataType());
         }
       }
@@ -177,7 +183,6 @@ public class AlignByDeviceDataSet extends QueryDataSet {
             groupByTimePlan.setDeduplicatedDataTypes(tsDataTypes);
             groupByTimePlan.setDeduplicatedAggregations(executeAggregations);
             groupByTimePlan.setExpression(expression);
-            groupByTimePlan.transformPaths(IoTDB.metaManager);
             currentDataSet = queryRouter.groupBy(groupByTimePlan, context);
             break;
           case AGGREGATE:
@@ -185,20 +190,17 @@ public class AlignByDeviceDataSet extends QueryDataSet {
             aggregationPlan.setDeduplicatedAggregations(executeAggregations);
             aggregationPlan.setDeduplicatedDataTypes(tsDataTypes);
             aggregationPlan.setExpression(expression);
-            aggregationPlan.transformPaths(IoTDB.metaManager);
             currentDataSet = queryRouter.aggregate(aggregationPlan, context);
             break;
           case FILL:
             fillQueryPlan.setDeduplicatedDataTypes(tsDataTypes);
             fillQueryPlan.setDeduplicatedPathsAndUpdate(executePaths);
-            fillQueryPlan.transformPaths(IoTDB.metaManager);
             currentDataSet = queryRouter.fill(fillQueryPlan, context);
             break;
           case QUERY:
             rawDataQueryPlan.setDeduplicatedPathsAndUpdate(executePaths);
             rawDataQueryPlan.setDeduplicatedDataTypes(tsDataTypes);
             rawDataQueryPlan.setExpression(expression);
-            rawDataQueryPlan.transformPaths(IoTDB.metaManager);
             currentDataSet = queryRouter.rawDataQuery(rawDataQueryPlan, 
context);
             break;
           default:
@@ -206,8 +208,7 @@ public class AlignByDeviceDataSet extends QueryDataSet {
         }
       } catch (QueryProcessException
           | QueryFilterOptimizationException
-          | StorageEngineException
-          | MetadataException e) {
+          | StorageEngineException e) {
         throw new IOException(e);
       }
 
@@ -230,14 +231,29 @@ public class AlignByDeviceDataSet extends QueryDataSet {
   protected Set<String> getDeviceMeasurements(PartialPath device) throws 
IOException {
     try {
       IMNode deviceNode = IoTDB.metaManager.getNodeByPath(device);
-      Set<String> res = new HashSet<>(deviceNode.getChildren().keySet());
+      Set<String> res = new HashSet<>();
       for (IMNode mnode : deviceNode.getChildren().values()) {
-        res.addAll(mnode.getChildren().keySet());
+        IMeasurementSchema measurementSchema = ((MeasurementMNode) 
mnode).getSchema();
+        if (measurementSchema instanceof VectorMeasurementSchema) {
+          for (String subMeasurement : 
measurementSchema.getSubMeasurementsList()) {
+            res.add(measurementSchema.getMeasurementId() + "." + 
subMeasurement);
+          }
+        } else {
+          res.add(mnode.getName());
+        }
       }
 
       Template template = deviceNode.getUpperTemplate();
       if (template != null) {
-        res.addAll(template.getSchemaMap().keySet());
+        for (IMeasurementSchema schema : template.getSchemaMap().values()) {
+          if (schema instanceof VectorMeasurementSchema) {
+            for (String subMeasurement : schema.getSubMeasurementsList()) {
+              res.add(schema.getMeasurementId() + "." + subMeasurement);
+            }
+          } else {
+            res.add(schema.getMeasurementId());
+          }
+        }
       }
 
       return res;
@@ -246,6 +262,20 @@ public class AlignByDeviceDataSet extends QueryDataSet {
     }
   }
 
+  private PartialPath transformPath(PartialPath device, String measurement) 
throws IOException {
+    try {
+      PartialPath fullPath = new PartialPath(device.getFullPath(), 
measurement);
+      MeasurementMNode node = (MeasurementMNode) 
IoTDB.metaManager.getNodeByPath(fullPath);
+      if (node.getSchema() instanceof MeasurementSchema) {
+        return fullPath;
+      } else {
+        return new VectorPartialPath(fullPath.getDevice(), 
Collections.singletonList(fullPath));
+      }
+    } catch (MetadataException e) {
+      throw new IOException("Cannot get node from " + device, e);
+    }
+  }
+
   @Override
   public RowRecord nextWithoutConstraint() throws IOException {
     RowRecord originRowRecord = currentDataSet.next();
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/executor/QueryRouter.java 
b/server/src/main/java/org/apache/iotdb/db/query/executor/QueryRouter.java
index 8d7c210..838b46d 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/executor/QueryRouter.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/executor/QueryRouter.java
@@ -20,7 +20,6 @@
 package org.apache.iotdb.db.query.executor;
 
 import org.apache.iotdb.db.exception.StorageEngineException;
-import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.PartialPath;
 import org.apache.iotdb.db.qp.physical.crud.AggregationPlan;
@@ -38,7 +37,6 @@ import 
org.apache.iotdb.db.query.dataset.groupby.GroupByTimeDataSet;
 import org.apache.iotdb.db.query.dataset.groupby.GroupByWithValueFilterDataSet;
 import 
org.apache.iotdb.db.query.dataset.groupby.GroupByWithoutValueFilterDataSet;
 import org.apache.iotdb.db.query.executor.fill.IFill;
-import org.apache.iotdb.db.service.IoTDB;
 import org.apache.iotdb.db.utils.TimeValuePairUtils;
 import 
org.apache.iotdb.tsfile.exception.filter.QueryFilterOptimizationException;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -95,11 +93,6 @@ public class QueryRouter implements IQueryRouter {
 
     if (optimizedExpression != null
         && optimizedExpression.getType() != ExpressionType.GLOBAL_TIME) {
-      try {
-        queryPlan.transformPaths(IoTDB.metaManager);
-      } catch (MetadataException e) {
-        throw new QueryProcessException(e);
-      }
       return rawDataQueryExecutor.executeWithValueFilter(context);
     } else if (optimizedExpression != null
         && optimizedExpression.getType() == ExpressionType.GLOBAL_TIME) {
@@ -112,7 +105,7 @@ public class QueryRouter implements IQueryRouter {
     }
 
     // Currently, we only group the vector partial paths for raw query without 
value filter
-    queryPlan.transformToVector();
+    // queryPlan.transformToVector();
     return rawDataQueryExecutor.executeWithoutValueFilter(context);
   }
 
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/timegenerator/ServerTimeGenerator.java
 
b/server/src/main/java/org/apache/iotdb/db/query/timegenerator/ServerTimeGenerator.java
index 645eb6b..4cd1f0b 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/timegenerator/ServerTimeGenerator.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/timegenerator/ServerTimeGenerator.java
@@ -22,7 +22,6 @@ import org.apache.iotdb.db.engine.StorageEngine;
 import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
 import org.apache.iotdb.db.engine.storagegroup.StorageGroupProcessor;
 import org.apache.iotdb.db.exception.StorageEngineException;
-import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.metadata.PartialPath;
 import org.apache.iotdb.db.qp.physical.crud.RawDataQueryPlan;
 import org.apache.iotdb.db.query.context.QueryContext;
@@ -94,12 +93,6 @@ public class ServerTimeGenerator extends TimeGenerator {
   @Override
   protected IBatchReader generateNewBatchReader(SingleSeriesExpression 
expression)
       throws IOException {
-    try {
-      expression.setSeriesPath(
-          IoTDB.metaManager.transformPath((PartialPath) 
expression.getSeriesPath()));
-    } catch (MetadataException e) {
-      throw new IOException(e);
-    }
     Filter valueFilter = expression.getFilter();
     PartialPath path = (PartialPath) expression.getSeriesPath();
     TSDataType dataType;
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/MemUtils.java 
b/server/src/main/java/org/apache/iotdb/db/utils/MemUtils.java
index 667a984..564c39d 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/MemUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/MemUtils.java
@@ -112,7 +112,7 @@ public class MemUtils {
         // time and index column memSize
         memSize += (end - start) * (8L + 4L);
         // value columns memSize
-        for (TSDataType type : schema.getValueTSDataTypeList()) {
+        for (TSDataType type : schema.getSubMeasurementsTSDataTypeList()) {
           if (type == TSDataType.TEXT && addingTextDataSize) {
             for (int j = start; j < end; j++) {
               memSize += getBinarySize(((Binary[]) 
insertTabletPlan.getColumns()[columnCount])[j]);
diff --git 
a/server/src/main/java/org/apache/iotdb/db/writelog/recover/LogReplayer.java 
b/server/src/main/java/org/apache/iotdb/db/writelog/recover/LogReplayer.java
index 61d7692..1e7c0a6 100644
--- a/server/src/main/java/org/apache/iotdb/db/writelog/recover/LogReplayer.java
+++ b/server/src/main/java/org/apache/iotdb/db/writelog/recover/LogReplayer.java
@@ -199,7 +199,7 @@ public class LogReplayer {
                     + tPlan.getMeasurements()[i]));
         columnIndex++;
       } else if (tPlan.isAligned()) {
-        List<TSDataType> datatypes = 
mNodes[i].getSchema().getValueTSDataTypeList();
+        List<TSDataType> datatypes = 
mNodes[i].getSchema().getSubMeasurementsTSDataTypeList();
         for (int j = 0; j < datatypes.size(); j++) {
           if (tPlan.getDataTypes()[columnIndex] == null) {
             tPlan.getDataTypes()[columnIndex] = datatypes.get(j);
@@ -207,7 +207,7 @@ public class LogReplayer {
             tPlan.markFailedMeasurementInsertion(
                 i,
                 new DataTypeMismatchException(
-                    mNodes[i].getSchema().getValueMeasurementIdList().get(j),
+                    mNodes[i].getSchema().getSubMeasurementsList().get(j),
                     tPlan.getDataTypes()[columnIndex],
                     datatypes.get(j)));
           }
diff --git a/session/src/main/java/org/apache/iotdb/session/Session.java 
b/session/src/main/java/org/apache/iotdb/session/Session.java
index 039c186..2336142 100644
--- a/session/src/main/java/org/apache/iotdb/session/Session.java
+++ b/session/src/main/java/org/apache/iotdb/session/Session.java
@@ -1328,10 +1328,10 @@ public class Session {
       request.setIsAligned(true);
       IMeasurementSchema measurementSchema = tablet.getSchemas().get(0);
       request.setPrefixPath(tablet.prefixPath);
-      int measurementsSize = 
measurementSchema.getValueMeasurementIdList().size();
+      int measurementsSize = measurementSchema.getSubMeasurementsList().size();
       for (int i = 0; i < measurementsSize; i++) {
-        
request.addToMeasurements(measurementSchema.getValueMeasurementIdList().get(i));
-        
request.addToTypes(measurementSchema.getValueTSDataTypeList().get(i).ordinal());
+        
request.addToMeasurements(measurementSchema.getSubMeasurementsList().get(i));
+        
request.addToTypes(measurementSchema.getSubMeasurementsTSDataTypeList().get(i).ordinal());
       }
       request.setIsAligned(true);
     } else {
@@ -1741,10 +1741,13 @@ public class Session {
         }
         columnIndex++;
       } else {
-        int measurementSize = schema.getValueMeasurementIdList().size();
+        int measurementSize = schema.getSubMeasurementsList().size();
         for (int j = 0; j < measurementSize; j++) {
           tablet.values[columnIndex] =
-              sortList(tablet.values[columnIndex], 
schema.getValueTSDataTypeList().get(j), index);
+              sortList(
+                  tablet.values[columnIndex],
+                  schema.getSubMeasurementsTSDataTypeList().get(j),
+                  index);
           if (tablet.bitMaps != null && tablet.bitMaps[columnIndex] != null) {
             tablet.bitMaps[columnIndex] = 
sortBitMap(tablet.bitMaps[columnIndex], index);
           }
diff --git a/session/src/main/java/org/apache/iotdb/session/SessionUtils.java 
b/session/src/main/java/org/apache/iotdb/session/SessionUtils.java
index f50ad52..4080688 100644
--- a/session/src/main/java/org/apache/iotdb/session/SessionUtils.java
+++ b/session/src/main/java/org/apache/iotdb/session/SessionUtils.java
@@ -58,9 +58,9 @@ public class SessionUtils {
         getValueBufferOfDataType(schema.getType(), tablet, indexOfValues, 
valueBuffer);
         indexOfValues++;
       } else {
-        for (int j = 0; j < schema.getValueTSDataTypeList().size(); j++) {
+        for (int j = 0; j < schema.getSubMeasurementsTSDataTypeList().size(); 
j++) {
           getValueBufferOfDataType(
-              schema.getValueTSDataTypeList().get(j), tablet, indexOfValues, 
valueBuffer);
+              schema.getSubMeasurementsTSDataTypeList().get(j), tablet, 
indexOfValues, valueBuffer);
           indexOfValues++;
         }
       }
diff --git 
a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java 
b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
index 2dd9230..fd14315 100644
--- a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
+++ b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
@@ -58,7 +58,11 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 public class IoTDBSessionSimpleIT {
 
@@ -392,15 +396,15 @@ public class IoTDBSessionSimpleIT {
       int rowIndex = tablet.rowSize++;
       tablet.addTimestamp(rowIndex, timestamp);
       tablet.addValue(
-          schemaList.get(0).getValueMeasurementIdList().get(0),
+          schemaList.get(0).getSubMeasurementsList().get(0),
           rowIndex,
           new SecureRandom().nextLong());
       tablet.addValue(
-          schemaList.get(0).getValueMeasurementIdList().get(1),
+          schemaList.get(0).getSubMeasurementsList().get(1),
           rowIndex,
           new SecureRandom().nextInt());
       tablet.addValue(
-          schemaList.get(0).getValueMeasurementIdList().get(2), rowIndex, new 
Binary("test"));
+          schemaList.get(0).getSubMeasurementsList().get(2), rowIndex, new 
Binary("test"));
       timestamp++;
     }
 
diff --git 
a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorIT.java 
b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorIT.java
index f3f781a..ac90003 100644
--- a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorIT.java
+++ b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorIT.java
@@ -170,10 +170,9 @@ public class IoTDBSessionVectorIT {
     for (long row = 0; row < 100; row++) {
       int rowIndex = tablet.rowSize++;
       tablet.addTimestamp(rowIndex, timestamp);
+      tablet.addValue(schemaList.get(0).getSubMeasurementsList().get(0), 
rowIndex, row * 10 + 1L);
       tablet.addValue(
-          schemaList.get(0).getValueMeasurementIdList().get(0), rowIndex, row 
* 10 + 1L);
-      tablet.addValue(
-          schemaList.get(0).getValueMeasurementIdList().get(1), rowIndex, 
(int) (row * 10 + 2));
+          schemaList.get(0).getSubMeasurementsList().get(1), rowIndex, (int) 
(row * 10 + 2));
 
       if (tablet.rowSize == tablet.getMaxRowNumber()) {
         session.insertTablet(tablet, true);
diff --git 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkGroupWriterImpl.java
 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkGroupWriterImpl.java
index 65bc9c7..4d82175 100644
--- 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkGroupWriterImpl.java
+++ 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkGroupWriterImpl.java
@@ -108,7 +108,7 @@ public class ChunkGroupWriterImpl implements 
IChunkGroupWriter {
     int batchSize = tablet.rowSize;
     VectorMeasurementSchema vectorMeasurementSchema =
         (VectorMeasurementSchema) tablet.getSchemas().get(index);
-    List<TSDataType> valueDataTypes = 
vectorMeasurementSchema.getValueTSDataTypeList();
+    List<TSDataType> valueDataTypes = 
vectorMeasurementSchema.getSubMeasurementsTSDataTypeList();
     IChunkWriter vectorChunkWriter = chunkWriters.get(measurement);
     for (int row = 0; row < batchSize; row++) {
       long time = tablet.timestamps[row];
diff --git 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/VectorChunkWriterImpl.java
 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/VectorChunkWriterImpl.java
index 83faad4..c661cbe 100644
--- 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/VectorChunkWriterImpl.java
+++ 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/VectorChunkWriterImpl.java
@@ -45,10 +45,10 @@ public class VectorChunkWriterImpl implements IChunkWriter {
             schema.getTimeTSEncoding(),
             schema.getTimeEncoder());
 
-    List<String> valueMeasurementIdList = schema.getValueMeasurementIdList();
-    List<TSDataType> valueTSDataTypeList = schema.getValueTSDataTypeList();
-    List<TSEncoding> valueTSEncodingList = schema.getValueTSEncodingList();
-    List<Encoder> valueEncoderList = schema.getValueEncoderList();
+    List<String> valueMeasurementIdList = schema.getSubMeasurementsList();
+    List<TSDataType> valueTSDataTypeList = 
schema.getSubMeasurementsTSDataTypeList();
+    List<TSEncoding> valueTSEncodingList = 
schema.getSubMeasurementsTSEncodingList();
+    List<Encoder> valueEncoderList = schema.getSubMeasurementsEncoderList();
 
     valueChunkWriterList = new ArrayList<>(valueMeasurementIdList.size());
     for (int i = 0; i < valueMeasurementIdList.size(); i++) {
diff --git 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/Tablet.java 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/Tablet.java
index 2c8d958..0e9d676 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/Tablet.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/Tablet.java
@@ -98,7 +98,7 @@ public class Tablet {
     int indexInSchema = 0;
     for (IMeasurementSchema schema : schemas) {
       if (schema.getType() == TSDataType.VECTOR) {
-        for (String measurementId : schema.getValueMeasurementIdList()) {
+        for (String measurementId : schema.getSubMeasurementsList()) {
           measurementIndex.put(measurementId, indexInSchema);
         }
       } else {
@@ -125,7 +125,7 @@ public class Tablet {
     IMeasurementSchema measurementSchema = schemas.get(indexOfSchema);
     if (measurementSchema.getType().equals(TSDataType.VECTOR)) {
       int indexInVector = 
measurementSchema.getMeasurementIdColumnIndex(measurementId);
-      TSDataType dataType = 
measurementSchema.getValueTSDataTypeList().get(indexInVector);
+      TSDataType dataType = 
measurementSchema.getSubMeasurementsTSDataTypeList().get(indexInVector);
       addValueOfDataType(dataType, rowIndex, indexInVector, value);
     } else {
       addValueOfDataType(measurementSchema.getType(), rowIndex, indexOfSchema, 
value);
@@ -210,7 +210,7 @@ public class Tablet {
     int valueColumnsSize = 0;
     for (IMeasurementSchema schema : schemas) {
       if (schema instanceof VectorMeasurementSchema) {
-        valueColumnsSize += schema.getValueMeasurementIdList().size();
+        valueColumnsSize += schema.getSubMeasurementsList().size();
       } else {
         valueColumnsSize++;
       }
@@ -231,8 +231,8 @@ public class Tablet {
   }
 
   private int buildVectorColumns(VectorMeasurementSchema schema, int idx) {
-    for (int i = 0; i < schema.getValueMeasurementIdList().size(); i++) {
-      TSDataType dataType = schema.getValueTSDataTypeList().get(i);
+    for (int i = 0; i < schema.getSubMeasurementsList().size(); i++) {
+      TSDataType dataType = schema.getSubMeasurementsTSDataTypeList().get(i);
       values[idx] = createValueColumnOfDataType(dataType);
       idx++;
     }
@@ -281,8 +281,8 @@ public class Tablet {
         valueOccupation += calOccupationOfOneColumn(schema.getType(), 
columnIndex);
         columnIndex++;
       } else {
-        for (int j = 0; j < schema.getValueTSDataTypeList().size(); j++) {
-          TSDataType dataType = schema.getValueTSDataTypeList().get(j);
+        for (int j = 0; j < schema.getSubMeasurementsTSDataTypeList().size(); 
j++) {
+          TSDataType dataType = 
schema.getSubMeasurementsTSDataTypeList().get(j);
           valueOccupation += calOccupationOfOneColumn(dataType, columnIndex);
           columnIndex++;
         }
diff --git 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/IMeasurementSchema.java
 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/IMeasurementSchema.java
index b689a12..685c6c7 100644
--- 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/IMeasurementSchema.java
+++ 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/IMeasurementSchema.java
@@ -49,13 +49,13 @@ public interface IMeasurementSchema {
 
   Map<String, String> getProps();
 
-  List<String> getValueMeasurementIdList();
+  List<String> getSubMeasurementsList();
 
-  List<TSDataType> getValueTSDataTypeList();
+  List<TSDataType> getSubMeasurementsTSDataTypeList();
 
-  List<TSEncoding> getValueTSEncodingList();
+  List<TSEncoding> getSubMeasurementsTSEncodingList();
 
-  List<Encoder> getValueEncoderList();
+  List<Encoder> getSubMeasurementsEncoderList();
 
   int getMeasurementIdColumnIndex(String measurementId);
 
diff --git 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/MeasurementSchema.java
 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/MeasurementSchema.java
index 6a5e2a6..df87387 100644
--- 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/MeasurementSchema.java
+++ 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/MeasurementSchema.java
@@ -222,22 +222,22 @@ public class MeasurementSchema
   }
 
   @Override
-  public List<String> getValueMeasurementIdList() {
+  public List<String> getSubMeasurementsList() {
     throw new UnsupportedOperationException("unsupported method for 
MeasurementSchema");
   }
 
   @Override
-  public List<TSDataType> getValueTSDataTypeList() {
+  public List<TSDataType> getSubMeasurementsTSDataTypeList() {
     throw new UnsupportedOperationException("unsupported method for 
MeasurementSchema");
   }
 
   @Override
-  public List<TSEncoding> getValueTSEncodingList() {
+  public List<TSEncoding> getSubMeasurementsTSEncodingList() {
     throw new UnsupportedOperationException("unsupported method for 
MeasurementSchema");
   }
 
   @Override
-  public List<Encoder> getValueEncoderList() {
+  public List<Encoder> getSubMeasurementsEncoderList() {
     throw new UnsupportedOperationException("unsupported method for 
MeasurementSchema");
   }
 
diff --git 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/VectorMeasurementSchema.java
 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/VectorMeasurementSchema.java
index 280ba25..eb41b7a 100644
--- 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/VectorMeasurementSchema.java
+++ 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/VectorMeasurementSchema.java
@@ -158,7 +158,7 @@ public class VectorMeasurementSchema
   }
 
   @Override
-  public List<String> getValueMeasurementIdList() {
+  public List<String> getSubMeasurementsList() {
     String[] measurements = new String[measurementsToIndexMap.size()];
     for (Map.Entry<String, Integer> entry : measurementsToIndexMap.entrySet()) 
{
       measurements[entry.getValue()] = entry.getKey();
@@ -167,7 +167,7 @@ public class VectorMeasurementSchema
   }
 
   @Override
-  public List<TSDataType> getValueTSDataTypeList() {
+  public List<TSDataType> getSubMeasurementsTSDataTypeList() {
     List<TSDataType> dataTypeList = new ArrayList<>();
     for (byte dataType : types) {
       dataTypeList.add(TSDataType.deserialize(dataType));
@@ -176,7 +176,7 @@ public class VectorMeasurementSchema
   }
 
   @Override
-  public List<TSEncoding> getValueTSEncodingList() {
+  public List<TSEncoding> getSubMeasurementsTSEncodingList() {
     List<TSEncoding> encodingList = new ArrayList<>();
     for (byte encoding : encodings) {
       encodingList.add(TSEncoding.deserialize(encoding));
@@ -185,7 +185,7 @@ public class VectorMeasurementSchema
   }
 
   @Override
-  public List<Encoder> getValueEncoderList() {
+  public List<Encoder> getSubMeasurementsEncoderList() {
     List<Encoder> encoderList = new ArrayList<>();
     for (int i = 0; i < encodings.length; i++) {
       TSEncoding encoding = TSEncoding.deserialize(encodings[i]);
diff --git 
a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorMeasurementSchemaStub.java
 
b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorMeasurementSchemaStub.java
index de9c4a0..032835b 100644
--- 
a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorMeasurementSchemaStub.java
+++ 
b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorMeasurementSchemaStub.java
@@ -79,22 +79,22 @@ public class VectorMeasurementSchemaStub implements 
IMeasurementSchema {
   }
 
   @Override
-  public List<String> getValueMeasurementIdList() {
+  public List<String> getSubMeasurementsList() {
     return Arrays.asList("s1", "s2", "s3");
   }
 
   @Override
-  public List<TSDataType> getValueTSDataTypeList() {
+  public List<TSDataType> getSubMeasurementsTSDataTypeList() {
     return Arrays.asList(TSDataType.FLOAT, TSDataType.INT32, 
TSDataType.DOUBLE);
   }
 
   @Override
-  public List<TSEncoding> getValueTSEncodingList() {
+  public List<TSEncoding> getSubMeasurementsTSEncodingList() {
     return Arrays.asList(TSEncoding.PLAIN, TSEncoding.PLAIN, TSEncoding.PLAIN);
   }
 
   @Override
-  public List<Encoder> getValueEncoderList() {
+  public List<Encoder> getSubMeasurementsEncoderList() {
     return Arrays.asList(
         new PlainEncoder(TSDataType.FLOAT, 0),
         new PlainEncoder(TSDataType.INT32, 0),

Reply via email to