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

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


The following commit(s) were added to refs/heads/master by this push:
     new a966f82d953 Fix duplicated time in result set bug
a966f82d953 is described below

commit a966f82d953f429e2146e8a19faca2e4dcded757
Author: Jackie Tien <[email protected]>
AuthorDate: Thu Feb 6 14:07:57 2025 +0800

    Fix duplicated time in result set bug
---
 .../relational/it/db/it/IoTDBDeletionTableIT.java  |  3 -
 .../it/query/recent/IoTDBNullValueIT.java          | 75 ++++++++++++++++++++++
 .../execution/operator/source/FileLoaderUtils.java |  4 +-
 .../schemaregion/utils/ResourceByPathUtils.java    | 31 ++++++---
 .../impl/ReadChunkCompactionPerformer.java         | 11 ++--
 .../execute/utils/MultiTsFileDeviceIterator.java   | 14 ++--
 ...BatchedFastAlignedSeriesCompactionExecutor.java | 26 ++++----
 ...edReadChunkAlignedSeriesCompactionExecutor.java | 40 ++++++------
 .../utils/AlignedSeriesBatchCompactionUtils.java   | 28 ++++----
 .../fast/FastAlignedSeriesCompactionExecutor.java  | 23 ++++---
 .../executor/fast/SeriesCompactionExecutor.java    | 10 +--
 .../ReadChunkAlignedSeriesCompactionExecutor.java  | 31 +++++----
 .../utils/writer/FastCrossCompactionWriter.java    | 10 +--
 .../utils/writer/FastInnerCompactionWriter.java    | 10 +--
 .../memtable/AlignedReadOnlyMemChunk.java          | 10 ++-
 .../dataregion/memtable/TsFileProcessor.java       |  7 +-
 .../read/reader/chunk/DiskAlignedChunkLoader.java  |  5 +-
 .../read/reader/chunk/MemAlignedChunkReader.java   |  4 +-
 .../read/reader/chunk/MemAlignedPageReader.java    |  6 +-
 .../metadata/DiskAlignedChunkMetadataLoader.java   |  4 +-
 .../apache/iotdb/db/utils/ErrorHandlingUtils.java  |  6 +-
 .../apache/iotdb/db/utils/ModificationUtils.java   |  9 +--
 ...InconsistentCompressionTypeAndEncodingTest.java |  6 +-
 .../FastInnerCompactionPerformerTest.java          |  6 +-
 .../repair/RepairUnsortedFileCompactionTest.java   |  8 +--
 .../compaction/utils/BatchCompactionUtilsTest.java | 39 +++++------
 pom.xml                                            |  2 +-
 27 files changed, 271 insertions(+), 157 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBDeletionTableIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBDeletionTableIT.java
index 95eee41d007..2449a35653c 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBDeletionTableIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBDeletionTableIT.java
@@ -24,8 +24,6 @@ import org.apache.iotdb.isession.ITableSession;
 import org.apache.iotdb.isession.SessionDataSet;
 import org.apache.iotdb.it.env.EnvFactory;
 import org.apache.iotdb.it.framework.IoTDBTestRunner;
-import org.apache.iotdb.itbase.category.ClusterIT;
-import org.apache.iotdb.itbase.category.LocalStandaloneIT;
 import org.apache.iotdb.itbase.category.ManualIT;
 import org.apache.iotdb.itbase.category.TableClusterIT;
 import org.apache.iotdb.itbase.category.TableLocalStandaloneIT;
@@ -1647,7 +1645,6 @@ public class IoTDBDeletionTableIT {
   }
 
   @Test
-  @Category({LocalStandaloneIT.class, ClusterIT.class})
   public void deleteTableOfTheSameNameTest()
       throws IoTDBConnectionException, StatementExecutionException {
     int testNum = 24;
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/IoTDBNullValueIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/IoTDBNullValueIT.java
new file mode 100644
index 00000000000..531d88101ba
--- /dev/null
+++ 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/IoTDBNullValueIT.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.relational.it.query.recent;
+
+import org.apache.iotdb.it.env.EnvFactory;
+import org.apache.iotdb.it.framework.IoTDBTestRunner;
+import org.apache.iotdb.itbase.category.TableClusterIT;
+import org.apache.iotdb.itbase.category.TableLocalStandaloneIT;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
+import static org.apache.iotdb.db.it.utils.TestUtils.prepareTableData;
+import static org.apache.iotdb.db.it.utils.TestUtils.tableResultSetEqualTest;
+
+@RunWith(IoTDBTestRunner.class)
+@Category({TableLocalStandaloneIT.class, TableClusterIT.class})
+public class IoTDBNullValueIT {
+  private static final String DATABASE_NAME = "test";
+
+  private static final String[] createSqls =
+      new String[] {
+        "CREATE DATABASE " + DATABASE_NAME,
+        "USE " + DATABASE_NAME,
+        "create table table1(id1 tag, s1 string)",
+        "insert into table1 values(0, 'd1', null), (1,'d1', 1)",
+        "flush",
+        "insert into table1 values(0, 'd1', 0)",
+        "flush"
+      };
+
+  @BeforeClass
+  public static void setUp() throws Exception {
+    
EnvFactory.getEnv().getConfig().getCommonConfig().setEnableCrossSpaceCompaction(false);
+    EnvFactory.getEnv().initClusterEnvironment();
+    prepareTableData(createSqls);
+  }
+
+  @AfterClass
+  public static void tearDown() {
+    EnvFactory.getEnv().cleanClusterEnvironment();
+  }
+
+  @Test
+  public void nullTest() {
+
+    // case 1: all without time filter using previous fill without timeDuration
+    String[] expectedHeader = new String[] {"time", "id1", "s1"};
+    String[] retArray =
+        new String[] {
+          "1970-01-01T00:00:00.000Z,d1,0,", "1970-01-01T00:00:00.001Z,d1,1,",
+        };
+    tableResultSetEqualTest("select * from table1", expectedHeader, retArray, 
DATABASE_NAME);
+  }
+}
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
index cd00aa5e419..213e4990a5f 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
@@ -41,7 +41,7 @@ import 
org.apache.tsfile.file.metadata.AlignedTimeSeriesMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
 import org.apache.tsfile.file.metadata.IDeviceID;
 import org.apache.tsfile.file.metadata.ITimeSeriesMetadata;
-import org.apache.tsfile.file.metadata.TableDeviceMetadata;
+import org.apache.tsfile.file.metadata.TableDeviceTimeSeriesMetadata;
 import org.apache.tsfile.file.metadata.TimeseriesMetadata;
 import org.apache.tsfile.read.controller.IChunkLoader;
 import org.apache.tsfile.read.filter.basic.Filter;
@@ -395,7 +395,7 @@ public class FileLoaderUtils {
     AbstractAlignedTimeSeriesMetadata alignedTimeSeriesMetadata =
         ignoreAllNullRows
             ? new AlignedTimeSeriesMetadata(timeColumnMetadata, 
valueColumnMetadataList)
-            : new TableDeviceMetadata(timeColumnMetadata, 
valueColumnMetadataList);
+            : new TableDeviceTimeSeriesMetadata(timeColumnMetadata, 
valueColumnMetadataList);
 
     alignedTimeSeriesMetadata.setChunkMetadataLoader(
         new DiskAlignedChunkMetadataLoader(
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/ResourceByPathUtils.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/ResourceByPathUtils.java
index dbd32b47276..12393fb2a20 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/ResourceByPathUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/ResourceByPathUtils.java
@@ -37,12 +37,16 @@ import org.apache.iotdb.db.utils.ModificationUtils;
 import org.apache.iotdb.db.utils.datastructure.TVList;
 
 import org.apache.tsfile.enums.TSDataType;
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
+import org.apache.tsfile.file.metadata.AbstractAlignedTimeSeriesMetadata;
 import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.AlignedTimeSeriesMetadata;
 import org.apache.tsfile.file.metadata.ChunkMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
 import org.apache.tsfile.file.metadata.IDeviceID;
 import org.apache.tsfile.file.metadata.ITimeSeriesMetadata;
+import org.apache.tsfile.file.metadata.TableDeviceChunkMetadata;
+import org.apache.tsfile.file.metadata.TableDeviceTimeSeriesMetadata;
 import org.apache.tsfile.file.metadata.TimeseriesMetadata;
 import org.apache.tsfile.file.metadata.enums.CompressionType;
 import org.apache.tsfile.file.metadata.enums.TSEncoding;
@@ -108,7 +112,7 @@ class AlignedResourceByPathUtils extends 
ResourceByPathUtils {
    * have chunkMetadata, but query will use these, so we need to generate it 
for them.
    */
   @Override
-  public AlignedTimeSeriesMetadata generateTimeSeriesMetadata(
+  public AbstractAlignedTimeSeriesMetadata generateTimeSeriesMetadata(
       List<ReadOnlyMemChunk> readOnlyMemChunk, List<IChunkMetadata> 
chunkMetadataList) {
     TimeseriesMetadata timeTimeSeriesMetadata = new TimeseriesMetadata();
     timeTimeSeriesMetadata.setDataSizeOfChunkMetaDataList(-1);
@@ -131,8 +135,11 @@ class AlignedResourceByPathUtils extends 
ResourceByPathUtils {
 
     boolean[] exist = new boolean[alignedFullPath.getSchemaList().size()];
     boolean modified = false;
+    boolean isTable = false;
     for (IChunkMetadata chunkMetadata : chunkMetadataList) {
-      AlignedChunkMetadata alignedChunkMetadata = (AlignedChunkMetadata) 
chunkMetadata;
+      AbstractAlignedChunkMetadata alignedChunkMetadata =
+          (AbstractAlignedChunkMetadata) chunkMetadata;
+      isTable = isTable || (alignedChunkMetadata instanceof 
TableDeviceChunkMetadata);
       modified = (modified || alignedChunkMetadata.isModified());
       
timeStatistics.mergeStatistics(alignedChunkMetadata.getTimeChunkMetadata().getStatistics());
       for (int i = 0; i < valueTimeSeriesMetadataList.size(); i++) {
@@ -149,8 +156,9 @@ class AlignedResourceByPathUtils extends 
ResourceByPathUtils {
 
     for (ReadOnlyMemChunk memChunk : readOnlyMemChunk) {
       if (!memChunk.isEmpty()) {
-        AlignedChunkMetadata alignedChunkMetadata =
-            (AlignedChunkMetadata) memChunk.getChunkMetaData();
+        AbstractAlignedChunkMetadata alignedChunkMetadata =
+            (AbstractAlignedChunkMetadata) memChunk.getChunkMetaData();
+        isTable = isTable || (alignedChunkMetadata instanceof 
TableDeviceChunkMetadata);
         
timeStatistics.mergeStatistics(alignedChunkMetadata.getTimeChunkMetadata().getStatistics());
         for (int i = 0; i < valueTimeSeriesMetadataList.size(); i++) {
           if (alignedChunkMetadata.getValueChunkMetadataList().get(i) != null) 
{
@@ -174,7 +182,9 @@ class AlignedResourceByPathUtils extends 
ResourceByPathUtils {
       }
     }
 
-    return new AlignedTimeSeriesMetadata(timeTimeSeriesMetadata, 
valueTimeSeriesMetadataList);
+    return isTable
+        ? new TableDeviceTimeSeriesMetadata(timeTimeSeriesMetadata, 
valueTimeSeriesMetadataList)
+        : new AlignedTimeSeriesMetadata(timeTimeSeriesMetadata, 
valueTimeSeriesMetadataList);
   }
 
   @Override
@@ -268,7 +278,7 @@ class AlignedResourceByPathUtils extends 
ResourceByPathUtils {
       QueryContext context,
       long timeLowerBound) {
 
-    List<AlignedChunkMetadata> chunkMetadataList = new ArrayList<>();
+    List<AbstractAlignedChunkMetadata> chunkMetadataList = new ArrayList<>();
     List<ChunkMetadata> timeChunkMetadataList =
         writer.getVisibleMetadataList(
             alignedFullPath.getDeviceId(), AlignedFullPath.VECTOR_PLACEHOLDER, 
TSDataType.VECTOR);
@@ -285,7 +295,10 @@ class AlignedResourceByPathUtils extends 
ResourceByPathUtils {
       // only need time column
       if (alignedFullPath.getMeasurementList().isEmpty()) {
         chunkMetadataList.add(
-            new AlignedChunkMetadata(timeChunkMetadataList.get(i), 
Collections.emptyList()));
+            context.isIgnoreAllNullRows()
+                ? new AlignedChunkMetadata(timeChunkMetadataList.get(i), 
Collections.emptyList())
+                : new TableDeviceChunkMetadata(
+                    timeChunkMetadataList.get(i), Collections.emptyList()));
       } else {
         List<IChunkMetadata> valueChunkMetadata = new ArrayList<>();
         // if all the sub sensors doesn't exist, it will be false
@@ -298,7 +311,9 @@ class AlignedResourceByPathUtils extends 
ResourceByPathUtils {
         }
         if (!context.isIgnoreAllNullRows() || exits) {
           chunkMetadataList.add(
-              new AlignedChunkMetadata(timeChunkMetadataList.get(i), 
valueChunkMetadata));
+              context.isIgnoreAllNullRows()
+                  ? new AlignedChunkMetadata(timeChunkMetadataList.get(i), 
valueChunkMetadata)
+                  : new TableDeviceChunkMetadata(timeChunkMetadataList.get(i), 
valueChunkMetadata));
         }
       }
     }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/ReadChunkCompactionPerformer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/ReadChunkCompactionPerformer.java
index ca592939976..c86c02e51b2 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/ReadChunkCompactionPerformer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/ReadChunkCompactionPerformer.java
@@ -36,7 +36,7 @@ import 
org.apache.iotdb.db.storageengine.rescon.memory.SystemInfo;
 
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.exception.write.PageException;
-import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.ChunkMetadata;
 import org.apache.tsfile.file.metadata.IDeviceID;
 import org.apache.tsfile.read.TsFileSequenceReader;
@@ -179,8 +179,9 @@ public class ReadChunkCompactionPerformer implements 
ISeqCompactionPerformer {
       MultiTsFileDeviceIterator deviceIterator)
       throws IOException, InterruptedException, IllegalPathException, 
PageException {
     checkThreadInterrupted();
-    LinkedList<Pair<TsFileSequenceReader, List<AlignedChunkMetadata>>> 
readerAndChunkMetadataList =
-        deviceIterator.getReaderAndChunkMetadataForCurrentAlignedSeries();
+    LinkedList<Pair<TsFileSequenceReader, List<AbstractAlignedChunkMetadata>>>
+        readerAndChunkMetadataList =
+            deviceIterator.getReaderAndChunkMetadataForCurrentAlignedSeries();
     if (!checkAlignedSeriesExists(readerAndChunkMetadataList)) {
       return;
     }
@@ -212,9 +213,9 @@ public class ReadChunkCompactionPerformer implements 
ISeqCompactionPerformer {
   }
 
   private boolean checkAlignedSeriesExists(
-      LinkedList<Pair<TsFileSequenceReader, List<AlignedChunkMetadata>>>
+      LinkedList<Pair<TsFileSequenceReader, 
List<AbstractAlignedChunkMetadata>>>
           readerAndChunkMetadataList) {
-    for (Pair<TsFileSequenceReader, List<AlignedChunkMetadata>> readerListPair 
:
+    for (Pair<TsFileSequenceReader, List<AbstractAlignedChunkMetadata>> 
readerListPair :
         readerAndChunkMetadataList) {
       if (!readerListPair.right.isEmpty()) {
         return true;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/MultiTsFileDeviceIterator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/MultiTsFileDeviceIterator.java
index 32a1593c4a6..1c8aed4ca62 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/MultiTsFileDeviceIterator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/MultiTsFileDeviceIterator.java
@@ -34,7 +34,7 @@ import 
org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
 import org.apache.iotdb.db.utils.ModificationUtils;
 
 import org.apache.tsfile.enums.TSDataType;
-import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.ChunkMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
 import org.apache.tsfile.file.metadata.IDeviceID;
@@ -384,14 +384,14 @@ public class MultiTsFileDeviceIterator implements 
AutoCloseable {
    * @throws IOException if io errors occurred
    */
   @SuppressWarnings({"squid:S1319", "squid:S135"})
-  public LinkedList<Pair<TsFileSequenceReader, List<AlignedChunkMetadata>>>
+  public LinkedList<Pair<TsFileSequenceReader, 
List<AbstractAlignedChunkMetadata>>>
       getReaderAndChunkMetadataForCurrentAlignedSeries() throws IOException, 
IllegalPathException {
     if (currentDevice == null || !currentDevice.right) {
       return new LinkedList<>();
     }
 
-    LinkedList<Pair<TsFileSequenceReader, List<AlignedChunkMetadata>>> 
readerAndChunkMetadataList =
-        new LinkedList<>();
+    LinkedList<Pair<TsFileSequenceReader, List<AbstractAlignedChunkMetadata>>>
+        readerAndChunkMetadataList = new LinkedList<>();
     for (TsFileResource tsFileResource : tsFileResourcesSortedByAsc) {
       if (!deviceIteratorMap.containsKey(tsFileResource)) {
         continue;
@@ -403,7 +403,7 @@ public class MultiTsFileDeviceIterator implements 
AutoCloseable {
       MetadataIndexNode firstMeasurementNodeOfCurrentDevice =
           iterator.getFirstMeasurementNodeOfCurrentDevice();
       TsFileSequenceReader reader = readerMap.get(tsFileResource);
-      List<AlignedChunkMetadata> alignedChunkMetadataList =
+      List<AbstractAlignedChunkMetadata> alignedChunkMetadataList =
           reader.getAlignedChunkMetadataByMetadataIndexNode(
               currentDevice.left, firstMeasurementNodeOfCurrentDevice, 
ignoreAllNullRows);
       applyModificationForAlignedChunkMetadataList(tsFileResource, 
alignedChunkMetadataList);
@@ -420,7 +420,7 @@ public class MultiTsFileDeviceIterator implements 
AutoCloseable {
    * @param alignedChunkMetadataList list of aligned chunk metadata
    */
   private void applyModificationForAlignedChunkMetadataList(
-      TsFileResource tsFileResource, List<AlignedChunkMetadata> 
alignedChunkMetadataList)
+      TsFileResource tsFileResource, List<AbstractAlignedChunkMetadata> 
alignedChunkMetadataList)
       throws IllegalPathException {
     if (alignedChunkMetadataList.isEmpty()) {
       // all the value chunks is empty chunk
@@ -437,7 +437,7 @@ public class MultiTsFileDeviceIterator implements 
AutoCloseable {
             tsFileResource, r -> new 
ArrayList<>(tsFileResource.getAllModEntries()));
 
     // construct the input params List<List<Modification>> for 
QueryUtils.modifyAlignedChunkMetaData
-    AlignedChunkMetadata alignedChunkMetadata = 
alignedChunkMetadataList.get(0);
+    AbstractAlignedChunkMetadata alignedChunkMetadata = 
alignedChunkMetadataList.get(0);
     List<IChunkMetadata> valueChunkMetadataList = 
alignedChunkMetadata.getValueChunkMetadataList();
 
     // match time column modifications
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/BatchedFastAlignedSeriesCompactionExecutor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/BatchedFastAlignedSeriesCompactionExecutor.java
index c2044da7f63..636fba8c2ca 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/BatchedFastAlignedSeriesCompactionExecutor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/BatchedFastAlignedSeriesCompactionExecutor.java
@@ -43,7 +43,7 @@ import 
org.apache.iotdb.db.utils.datastructure.PatternTreeMapFactory;
 
 import org.apache.tsfile.common.constant.TsFileConstant;
 import org.apache.tsfile.exception.write.PageException;
-import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.ChunkMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
 import org.apache.tsfile.file.metadata.IDeviceID;
@@ -72,7 +72,7 @@ public class BatchedFastAlignedSeriesCompactionExecutor
   private final List<IMeasurementSchema> valueMeasurementSchemas;
   private final List<TsFileResource> sortedSourceFiles;
 
-  private final Map<TsFileResource, List<AlignedChunkMetadata>> 
alignedChunkMetadataCache;
+  private final Map<TsFileResource, List<AbstractAlignedChunkMetadata>> 
alignedChunkMetadataCache;
   private final BatchCompactionPlan batchCompactionPlan;
   private final int batchSize =
       
IoTDBDescriptor.getInstance().getConfig().getCompactionMaxAlignedSeriesNumInOneBatch();
@@ -110,11 +110,11 @@ public class BatchedFastAlignedSeriesCompactionExecutor
     this.batchCompactionPlan = new BatchCompactionPlan();
   }
 
-  private List<AlignedChunkMetadata> 
getAlignedChunkMetadataListBySelectedValueColumn(
+  private List<AbstractAlignedChunkMetadata> 
getAlignedChunkMetadataListBySelectedValueColumn(
       TsFileResource tsFileResource, List<IMeasurementSchema> 
selectedValueMeasurementSchemas)
       throws IOException, IllegalPathException {
     // 1. get Full AlignedChunkMetadata from cache
-    List<AlignedChunkMetadata> alignedChunkMetadataList = null;
+    List<AbstractAlignedChunkMetadata> alignedChunkMetadataList = null;
     if (alignedChunkMetadataCache.containsKey(tsFileResource)) {
       alignedChunkMetadataList = alignedChunkMetadataCache.get(tsFileResource);
     } else {
@@ -124,8 +124,8 @@ public class BatchedFastAlignedSeriesCompactionExecutor
     }
     // 2. generate AlignedChunkMetadata list by selected value columns
 
-    List<AlignedChunkMetadata> filteredAlignedChunkMetadataList = new 
ArrayList<>();
-    for (AlignedChunkMetadata alignedChunkMetadata : alignedChunkMetadataList) 
{
+    List<AbstractAlignedChunkMetadata> filteredAlignedChunkMetadataList = new 
ArrayList<>();
+    for (AbstractAlignedChunkMetadata alignedChunkMetadata : 
alignedChunkMetadataList) {
       filteredAlignedChunkMetadataList.add(
           AlignedSeriesBatchCompactionUtils.filterAlignedChunkMetadataByIndex(
               alignedChunkMetadata, 
batchColumnSelection.getSelectedColumnIndexList()));
@@ -264,8 +264,8 @@ public class BatchedFastAlignedSeriesCompactionExecutor
     }
 
     @Override
-    protected List<AlignedChunkMetadata> 
getAlignedChunkMetadataList(TsFileResource resource)
-        throws IOException, IllegalPathException {
+    protected List<AbstractAlignedChunkMetadata> getAlignedChunkMetadataList(
+        TsFileResource resource) throws IOException, IllegalPathException {
       return getAlignedChunkMetadataListBySelectedValueColumn(resource, 
measurementSchemas);
     }
 
@@ -301,10 +301,10 @@ public class BatchedFastAlignedSeriesCompactionExecutor
       IChunkMetadata batchedAlignedChunkMetadata =
           alignedPageElement.getChunkMetadataElement().chunkMetadata;
       TsFileResource resource = 
alignedPageElement.getChunkMetadataElement().fileElement.resource;
-      List<AlignedChunkMetadata> alignedChunkMetadataListOfFile =
+      List<AbstractAlignedChunkMetadata> alignedChunkMetadataListOfFile =
           alignedChunkMetadataCache.get(resource);
-      AlignedChunkMetadata originAlignedChunkMetadata = null;
-      for (AlignedChunkMetadata alignedChunkMetadata : 
alignedChunkMetadataListOfFile) {
+      AbstractAlignedChunkMetadata originAlignedChunkMetadata = null;
+      for (AbstractAlignedChunkMetadata alignedChunkMetadata : 
alignedChunkMetadataListOfFile) {
         if (alignedChunkMetadata.getOffsetOfChunkHeader()
             == batchedAlignedChunkMetadata.getOffsetOfChunkHeader()) {
           originAlignedChunkMetadata = alignedChunkMetadata;
@@ -383,8 +383,8 @@ public class BatchedFastAlignedSeriesCompactionExecutor
     }
 
     @Override
-    protected List<AlignedChunkMetadata> 
getAlignedChunkMetadataList(TsFileResource resource)
-        throws IOException, IllegalPathException {
+    protected List<AbstractAlignedChunkMetadata> getAlignedChunkMetadataList(
+        TsFileResource resource) throws IOException, IllegalPathException {
       return getAlignedChunkMetadataListBySelectedValueColumn(resource, 
measurementSchemas);
     }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/BatchedReadChunkAlignedSeriesCompactionExecutor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/BatchedReadChunkAlignedSeriesCompactionExecutor.java
index c0d16841ab1..e343ea59b92 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/BatchedReadChunkAlignedSeriesCompactionExecutor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/BatchedReadChunkAlignedSeriesCompactionExecutor.java
@@ -38,7 +38,7 @@ import 
org.apache.iotdb.db.storageengine.dataregion.compaction.io.CompactionTsFi
 import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
 
 import org.apache.tsfile.exception.write.PageException;
-import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.ChunkMetadata;
 import org.apache.tsfile.file.metadata.IDeviceID;
 import org.apache.tsfile.file.metadata.statistics.Statistics;
@@ -67,13 +67,14 @@ public class BatchedReadChunkAlignedSeriesCompactionExecutor
   private final int batchSize =
       
IoTDBDescriptor.getInstance().getConfig().getCompactionMaxAlignedSeriesNumInOneBatch();
   private final AlignedSeriesBatchCompactionUtils.BatchColumnSelection 
batchColumnSelection;
-  private final LinkedList<Pair<TsFileSequenceReader, 
List<AlignedChunkMetadata>>>
+  private final LinkedList<Pair<TsFileSequenceReader, 
List<AbstractAlignedChunkMetadata>>>
       originReaderAndChunkMetadataList;
 
   public BatchedReadChunkAlignedSeriesCompactionExecutor(
       IDeviceID device,
       TsFileResource targetResource,
-      LinkedList<Pair<TsFileSequenceReader, List<AlignedChunkMetadata>>> 
readerAndChunkMetadataList,
+      LinkedList<Pair<TsFileSequenceReader, 
List<AbstractAlignedChunkMetadata>>>
+          readerAndChunkMetadataList,
       CompactionTsFileWriter writer,
       CompactionTaskSummary summary,
       boolean ignoreAllNullRows)
@@ -113,7 +114,7 @@ public class BatchedReadChunkAlignedSeriesCompactionExecutor
       selectedColumnSchemaList = 
batchColumnSelection.getCurrentSelectedColumnSchemaList();
     }
 
-    LinkedList<Pair<TsFileSequenceReader, List<AlignedChunkMetadata>>>
+    LinkedList<Pair<TsFileSequenceReader, List<AbstractAlignedChunkMetadata>>>
         batchedReaderAndChunkMetadataList =
             filterAlignedChunkMetadataList(readerAndChunkMetadataList, 
selectedColumnIndexList);
 
@@ -137,7 +138,7 @@ public class BatchedReadChunkAlignedSeriesCompactionExecutor
   private void compactLeftBatches() throws PageException, IOException {
     while (batchColumnSelection.hasNext()) {
       batchColumnSelection.next();
-      LinkedList<Pair<TsFileSequenceReader, List<AlignedChunkMetadata>>>
+      LinkedList<Pair<TsFileSequenceReader, 
List<AbstractAlignedChunkMetadata>>>
           groupReaderAndChunkMetadataList =
               filterAlignedChunkMetadataList(
                   readerAndChunkMetadataList, 
batchColumnSelection.getSelectedColumnIndexList());
@@ -155,16 +156,19 @@ public class 
BatchedReadChunkAlignedSeriesCompactionExecutor
     }
   }
 
-  private LinkedList<Pair<TsFileSequenceReader, List<AlignedChunkMetadata>>>
+  private LinkedList<Pair<TsFileSequenceReader, 
List<AbstractAlignedChunkMetadata>>>
       filterAlignedChunkMetadataList(
-          List<Pair<TsFileSequenceReader, List<AlignedChunkMetadata>>> 
readerAndChunkMetadataList,
+          List<Pair<TsFileSequenceReader, List<AbstractAlignedChunkMetadata>>>
+              readerAndChunkMetadataList,
           List<Integer> selectedMeasurementIndexs) {
-    LinkedList<Pair<TsFileSequenceReader, List<AlignedChunkMetadata>>>
+    LinkedList<Pair<TsFileSequenceReader, List<AbstractAlignedChunkMetadata>>>
         groupReaderAndChunkMetadataList = new LinkedList<>();
-    for (Pair<TsFileSequenceReader, List<AlignedChunkMetadata>> pair : 
readerAndChunkMetadataList) {
-      List<AlignedChunkMetadata> alignedChunkMetadataList = pair.getRight();
-      List<AlignedChunkMetadata> selectedColumnAlignedChunkMetadataList = new 
LinkedList<>();
-      for (AlignedChunkMetadata alignedChunkMetadata : 
alignedChunkMetadataList) {
+    for (Pair<TsFileSequenceReader, List<AbstractAlignedChunkMetadata>> pair :
+        readerAndChunkMetadataList) {
+      List<AbstractAlignedChunkMetadata> alignedChunkMetadataList = 
pair.getRight();
+      List<AbstractAlignedChunkMetadata> 
selectedColumnAlignedChunkMetadataList =
+          new LinkedList<>();
+      for (AbstractAlignedChunkMetadata alignedChunkMetadata : 
alignedChunkMetadataList) {
         selectedColumnAlignedChunkMetadataList.add(
             
AlignedSeriesBatchCompactionUtils.filterAlignedChunkMetadataByIndex(
                 alignedChunkMetadata, selectedMeasurementIndexs));
@@ -181,7 +185,7 @@ public class BatchedReadChunkAlignedSeriesCompactionExecutor
     public FirstBatchedReadChunkAlignedSeriesCompactionExecutor(
         IDeviceID device,
         TsFileResource targetResource,
-        LinkedList<Pair<TsFileSequenceReader, List<AlignedChunkMetadata>>>
+        LinkedList<Pair<TsFileSequenceReader, 
List<AbstractAlignedChunkMetadata>>>
             readerAndChunkMetadataList,
         CompactionTsFileWriter writer,
         CompactionTaskSummary summary,
@@ -224,8 +228,8 @@ public class BatchedReadChunkAlignedSeriesCompactionExecutor
       String file = timePage.getFile();
       ChunkMetadata timeChunkMetadata = timePage.getChunkMetadata();
 
-      List<AlignedChunkMetadata> alignedChunkMetadataList = 
Collections.emptyList();
-      for (Pair<TsFileSequenceReader, List<AlignedChunkMetadata>> pair :
+      List<AbstractAlignedChunkMetadata> alignedChunkMetadataList = 
Collections.emptyList();
+      for (Pair<TsFileSequenceReader, List<AbstractAlignedChunkMetadata>> pair 
:
           originReaderAndChunkMetadataList) {
         TsFileSequenceReader reader = pair.getLeft();
         if (reader.getFileName().equals(file)) {
@@ -234,8 +238,8 @@ public class BatchedReadChunkAlignedSeriesCompactionExecutor
         }
       }
 
-      AlignedChunkMetadata originAlignedChunkMetadata = null;
-      for (AlignedChunkMetadata alignedChunkMetadata : 
alignedChunkMetadataList) {
+      AbstractAlignedChunkMetadata originAlignedChunkMetadata = null;
+      for (AbstractAlignedChunkMetadata alignedChunkMetadata : 
alignedChunkMetadataList) {
         if (alignedChunkMetadata.getOffsetOfChunkHeader()
             == timeChunkMetadata.getOffsetOfChunkHeader()) {
           originAlignedChunkMetadata = alignedChunkMetadata;
@@ -303,7 +307,7 @@ public class BatchedReadChunkAlignedSeriesCompactionExecutor
     public FollowingBatchedReadChunkAlignedSeriesGroupCompactionExecutor(
         IDeviceID device,
         TsFileResource targetResource,
-        LinkedList<Pair<TsFileSequenceReader, List<AlignedChunkMetadata>>>
+        LinkedList<Pair<TsFileSequenceReader, 
List<AbstractAlignedChunkMetadata>>>
             readerAndChunkMetadataList,
         CompactionTsFileWriter writer,
         CompactionTaskSummary summary,
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/utils/AlignedSeriesBatchCompactionUtils.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/utils/AlignedSeriesBatchCompactionUtils.java
index 25613fc2a1a..c3c58e5bb6a 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/utils/AlignedSeriesBatchCompactionUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/utils/AlignedSeriesBatchCompactionUtils.java
@@ -21,7 +21,7 @@ package 
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.ex
 
 import 
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.executor.ModifiedStatus;
 
-import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.ChunkMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
 import org.apache.tsfile.read.TsFileSequenceReader;
@@ -43,17 +43,18 @@ public class AlignedSeriesBatchCompactionUtils {
   private AlignedSeriesBatchCompactionUtils() {}
 
   public static void markAlignedChunkHasDeletion(
-      LinkedList<Pair<TsFileSequenceReader, List<AlignedChunkMetadata>>>
+      LinkedList<Pair<TsFileSequenceReader, 
List<AbstractAlignedChunkMetadata>>>
           readerAndChunkMetadataList) {
-    for (Pair<TsFileSequenceReader, List<AlignedChunkMetadata>> pair : 
readerAndChunkMetadataList) {
-      List<AlignedChunkMetadata> alignedChunkMetadataList = pair.getRight();
+    for (Pair<TsFileSequenceReader, List<AbstractAlignedChunkMetadata>> pair :
+        readerAndChunkMetadataList) {
+      List<AbstractAlignedChunkMetadata> alignedChunkMetadataList = 
pair.getRight();
       markAlignedChunkHasDeletion(alignedChunkMetadataList);
     }
   }
 
   public static void markAlignedChunkHasDeletion(
-      List<AlignedChunkMetadata> alignedChunkMetadataList) {
-    for (AlignedChunkMetadata alignedChunkMetadata : alignedChunkMetadataList) 
{
+      List<AbstractAlignedChunkMetadata> alignedChunkMetadataList) {
+    for (AbstractAlignedChunkMetadata alignedChunkMetadata : 
alignedChunkMetadataList) {
       IChunkMetadata timeChunkMetadata = 
alignedChunkMetadata.getTimeChunkMetadata();
       for (IChunkMetadata iChunkMetadata : 
alignedChunkMetadata.getValueChunkMetadataList()) {
         if (iChunkMetadata != null && iChunkMetadata.isModified()) {
@@ -68,8 +69,8 @@ public class AlignedSeriesBatchCompactionUtils {
     return chunkMetadata.getMeasurementUid().isEmpty();
   }
 
-  public static AlignedChunkMetadata filterAlignedChunkMetadataByIndex(
-      AlignedChunkMetadata alignedChunkMetadata, List<Integer> 
selectedMeasurements) {
+  public static AbstractAlignedChunkMetadata filterAlignedChunkMetadataByIndex(
+      AbstractAlignedChunkMetadata alignedChunkMetadata, List<Integer> 
selectedMeasurements) {
     IChunkMetadata[] valueChunkMetadataArr = new 
IChunkMetadata[selectedMeasurements.size()];
     List<IChunkMetadata> originValueChunkMetadataList =
         alignedChunkMetadata.getValueChunkMetadataList();
@@ -77,12 +78,13 @@ public class AlignedSeriesBatchCompactionUtils {
       int columnIndex = selectedMeasurements.get(i);
       valueChunkMetadataArr[i] = originValueChunkMetadataList.get(columnIndex);
     }
-    return new AlignedChunkMetadata(
+    return alignedChunkMetadata.createNewChunkMetadata(
         alignedChunkMetadata.getTimeChunkMetadata(), 
Arrays.asList(valueChunkMetadataArr));
   }
 
-  public static AlignedChunkMetadata fillAlignedChunkMetadataBySchemaList(
-      AlignedChunkMetadata originAlignedChunkMetadata, 
List<IMeasurementSchema> schemaList) {
+  public static AbstractAlignedChunkMetadata 
fillAlignedChunkMetadataBySchemaList(
+      AbstractAlignedChunkMetadata originAlignedChunkMetadata,
+      List<IMeasurementSchema> schemaList) {
     List<IChunkMetadata> originValueChunkMetadataList =
         originAlignedChunkMetadata.getValueChunkMetadataList();
     IChunkMetadata[] newValueChunkMetadataArr = new 
IChunkMetadata[schemaList.size()];
@@ -109,14 +111,14 @@ public class AlignedSeriesBatchCompactionUtils {
         currentValueChunkMetadataIndex++;
       }
     }
-    return new AlignedChunkMetadata(
+    return originAlignedChunkMetadata.createNewChunkMetadata(
         originAlignedChunkMetadata.getTimeChunkMetadata(), 
Arrays.asList(newValueChunkMetadataArr));
   }
 
   public static ModifiedStatus calculateAlignedPageModifiedStatus(
       long startTime,
       long endTime,
-      AlignedChunkMetadata originAlignedChunkMetadata,
+      AbstractAlignedChunkMetadata originAlignedChunkMetadata,
       boolean ignoreAllNullRows) {
     ModifiedStatus timePageModifiedStatus =
         checkIsModified(
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/FastAlignedSeriesCompactionExecutor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/FastAlignedSeriesCompactionExecutor.java
index 64fb585542d..b489630894b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/FastAlignedSeriesCompactionExecutor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/FastAlignedSeriesCompactionExecutor.java
@@ -44,10 +44,12 @@ import org.apache.tsfile.common.constant.TsFileConstant;
 import org.apache.tsfile.exception.write.PageException;
 import org.apache.tsfile.file.header.ChunkHeader;
 import org.apache.tsfile.file.header.PageHeader;
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.ChunkMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
 import org.apache.tsfile.file.metadata.IDeviceID;
+import org.apache.tsfile.file.metadata.TableDeviceChunkMetadata;
 import org.apache.tsfile.read.TsFileSequenceReader;
 import org.apache.tsfile.read.common.Chunk;
 import org.apache.tsfile.utils.Pair;
@@ -155,7 +157,8 @@ public class FastAlignedSeriesCompactionExecutor extends 
SeriesCompactionExecuto
       throws IOException, IllegalPathException {
     for (FileElement fileElement : fileElements) {
       TsFileResource resource = fileElement.resource;
-      List<AlignedChunkMetadata> alignedChunkMetadataList = 
getAlignedChunkMetadataList(resource);
+      List<AbstractAlignedChunkMetadata> alignedChunkMetadataList =
+          getAlignedChunkMetadataList(resource);
 
       if (alignedChunkMetadataList.isEmpty()) {
         // all chunks have been deleted in this file or current file does not 
contain this aligned
@@ -174,7 +177,7 @@ public class FastAlignedSeriesCompactionExecutor extends 
SeriesCompactionExecuto
     }
   }
 
-  protected List<AlignedChunkMetadata> 
getAlignedChunkMetadataList(TsFileResource resource)
+  protected List<AbstractAlignedChunkMetadata> 
getAlignedChunkMetadataList(TsFileResource resource)
       throws IOException, IllegalPathException {
     // read time chunk metadatas and value chunk metadatas in the current file
     List<IChunkMetadata> timeChunkMetadatas = null;
@@ -216,7 +219,7 @@ public class FastAlignedSeriesCompactionExecutor extends 
SeriesCompactionExecuto
       }
     }
 
-    List<AlignedChunkMetadata> alignedChunkMetadataList = new ArrayList<>();
+    List<AbstractAlignedChunkMetadata> alignedChunkMetadataList = new 
ArrayList<>();
     // if current file contains this aligned device,then construct aligned 
chunk metadatas
     if (timeChunkMetadatas != null) {
       for (int i = 0; i < timeChunkMetadatas.size(); i++) {
@@ -228,8 +231,10 @@ public class FastAlignedSeriesCompactionExecutor extends 
SeriesCompactionExecuto
             valueChunkMetadataList.add(chunkMetadata.get(i));
           }
         }
-        AlignedChunkMetadata alignedChunkMetadata =
-            new AlignedChunkMetadata(timeChunkMetadatas.get(i), 
valueChunkMetadataList);
+        AbstractAlignedChunkMetadata alignedChunkMetadata =
+            ignoreAllNullRows
+                ? new AlignedChunkMetadata(timeChunkMetadatas.get(i), 
valueChunkMetadataList)
+                : new TableDeviceChunkMetadata(timeChunkMetadatas.get(i), 
valueChunkMetadataList);
 
         alignedChunkMetadataList.add(alignedChunkMetadata);
       }
@@ -345,8 +350,8 @@ public class FastAlignedSeriesCompactionExecutor extends 
SeriesCompactionExecuto
   @Override
   void readChunk(ChunkMetadataElement chunkMetadataElement) throws IOException 
{
     updateSummary(chunkMetadataElement, ChunkStatus.READ_IN);
-    AlignedChunkMetadata alignedChunkMetadata =
-        (AlignedChunkMetadata) chunkMetadataElement.chunkMetadata;
+    AbstractAlignedChunkMetadata alignedChunkMetadata =
+        (AbstractAlignedChunkMetadata) chunkMetadataElement.chunkMetadata;
     TsFileSequenceReader reader = 
readerCacheMap.get(chunkMetadataElement.fileElement.resource);
     chunkMetadataElement.chunk =
         readChunk(reader, (ChunkMetadata) 
alignedChunkMetadata.getTimeChunkMetadata());
@@ -418,8 +423,8 @@ public class FastAlignedSeriesCompactionExecutor extends 
SeriesCompactionExecuto
   protected ModifiedStatus isPageModified(PageElement pageElement) {
     long startTime = pageElement.getStartTime();
     long endTime = pageElement.getEndTime();
-    AlignedChunkMetadata alignedChunkMetadata =
-        (AlignedChunkMetadata) 
pageElement.getChunkMetadataElement().chunkMetadata;
+    AbstractAlignedChunkMetadata alignedChunkMetadata =
+        (AbstractAlignedChunkMetadata) 
pageElement.getChunkMetadataElement().chunkMetadata;
     return 
AlignedSeriesBatchCompactionUtils.calculateAlignedPageModifiedStatus(
         startTime, endTime, alignedChunkMetadata, ignoreAllNullRows);
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/SeriesCompactionExecutor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/SeriesCompactionExecutor.java
index 83dab2e7690..c2a5c6c7558 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/SeriesCompactionExecutor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/SeriesCompactionExecutor.java
@@ -36,7 +36,7 @@ import org.apache.iotdb.db.utils.ModificationUtils;
 import org.apache.iotdb.db.utils.datastructure.PatternTreeMapFactory;
 
 import org.apache.tsfile.exception.write.PageException;
-import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
 import org.apache.tsfile.file.metadata.IDeviceID;
 import org.apache.tsfile.read.TimeValuePair;
@@ -495,14 +495,14 @@ public abstract class SeriesCompactionExecutor {
       case READ_IN:
         summary.increaseProcessChunkNum(
             isAligned
-                ? ((AlignedChunkMetadata) chunkMetadataElement.chunkMetadata)
+                ? ((AbstractAlignedChunkMetadata) 
chunkMetadataElement.chunkMetadata)
                         .getValueChunkMetadataList()
                         .size()
                     + 1
                 : 1);
         if (isAligned) {
           for (IChunkMetadata valueChunkMetadata :
-              ((AlignedChunkMetadata) chunkMetadataElement.chunkMetadata)
+              ((AbstractAlignedChunkMetadata) 
chunkMetadataElement.chunkMetadata)
                   .getValueChunkMetadataList()) {
             if (valueChunkMetadata == null) {
               continue;
@@ -517,7 +517,7 @@ public abstract class SeriesCompactionExecutor {
       case DIRECTORY_FLUSH:
         if (isAligned) {
           summary.increaseDirectlyFlushChunkNum(
-              ((AlignedChunkMetadata) (chunkMetadataElement.chunkMetadata))
+              ((AbstractAlignedChunkMetadata) 
(chunkMetadataElement.chunkMetadata))
                       .getValueChunkMetadataList()
                       .size()
                   + 1);
@@ -528,7 +528,7 @@ public abstract class SeriesCompactionExecutor {
       case DESERIALIZE_CHUNK:
         if (isAligned) {
           summary.increaseDeserializedChunkNum(
-              ((AlignedChunkMetadata) (chunkMetadataElement.chunkMetadata))
+              ((AbstractAlignedChunkMetadata) 
(chunkMetadataElement.chunkMetadata))
                       .getValueChunkMetadataList()
                       .size()
                   + 1);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/ReadChunkAlignedSeriesCompactionExecutor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/ReadChunkAlignedSeriesCompactionExecutor.java
index 12c205c472e..17281c87051 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/ReadChunkAlignedSeriesCompactionExecutor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/ReadChunkAlignedSeriesCompactionExecutor.java
@@ -39,7 +39,7 @@ import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.exception.write.PageException;
 import org.apache.tsfile.file.header.ChunkHeader;
 import org.apache.tsfile.file.header.PageHeader;
-import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.ChunkMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
 import org.apache.tsfile.file.metadata.IDeviceID;
@@ -68,7 +68,7 @@ import java.util.stream.Collectors;
 public class ReadChunkAlignedSeriesCompactionExecutor {
 
   protected final IDeviceID device;
-  protected final LinkedList<Pair<TsFileSequenceReader, 
List<AlignedChunkMetadata>>>
+  protected final LinkedList<Pair<TsFileSequenceReader, 
List<AbstractAlignedChunkMetadata>>>
       readerAndChunkMetadataList;
   protected final TsFileResource targetResource;
   protected final CompactionTsFileWriter writer;
@@ -85,7 +85,8 @@ public class ReadChunkAlignedSeriesCompactionExecutor {
   public ReadChunkAlignedSeriesCompactionExecutor(
       IDeviceID device,
       TsFileResource targetResource,
-      LinkedList<Pair<TsFileSequenceReader, List<AlignedChunkMetadata>>> 
readerAndChunkMetadataList,
+      LinkedList<Pair<TsFileSequenceReader, 
List<AbstractAlignedChunkMetadata>>>
+          readerAndChunkMetadataList,
       CompactionTsFileWriter writer,
       CompactionTaskSummary summary,
       boolean ignoreAllNullRows)
@@ -108,7 +109,8 @@ public class ReadChunkAlignedSeriesCompactionExecutor {
   public ReadChunkAlignedSeriesCompactionExecutor(
       IDeviceID device,
       TsFileResource targetResource,
-      LinkedList<Pair<TsFileSequenceReader, List<AlignedChunkMetadata>>> 
readerAndChunkMetadataList,
+      LinkedList<Pair<TsFileSequenceReader, 
List<AbstractAlignedChunkMetadata>>>
+          readerAndChunkMetadataList,
       CompactionTsFileWriter writer,
       CompactionTaskSummary summary,
       IMeasurementSchema timeSchema,
@@ -131,11 +133,11 @@ public class ReadChunkAlignedSeriesCompactionExecutor {
   private void collectValueColumnSchemaList() throws IOException {
     Map<String, IMeasurementSchema> measurementSchemaMap = new HashMap<>();
     for (int i = this.readerAndChunkMetadataList.size() - 1; i >= 0; i--) {
-      Pair<TsFileSequenceReader, List<AlignedChunkMetadata>> pair =
+      Pair<TsFileSequenceReader, List<AbstractAlignedChunkMetadata>> pair =
           this.readerAndChunkMetadataList.get(i);
       CompactionTsFileReader reader = (CompactionTsFileReader) pair.getLeft();
-      List<AlignedChunkMetadata> alignedChunkMetadataList = pair.getRight();
-      for (AlignedChunkMetadata alignedChunkMetadata : 
alignedChunkMetadataList) {
+      List<AbstractAlignedChunkMetadata> alignedChunkMetadataList = 
pair.getRight();
+      for (AbstractAlignedChunkMetadata alignedChunkMetadata : 
alignedChunkMetadataList) {
         if (alignedChunkMetadata == null) {
           continue;
         }
@@ -176,10 +178,11 @@ public class ReadChunkAlignedSeriesCompactionExecutor {
   }
 
   private void fillAlignedChunkMetadataToMatchSchemaList() {
-    for (Pair<TsFileSequenceReader, List<AlignedChunkMetadata>> pair : 
readerAndChunkMetadataList) {
-      List<AlignedChunkMetadata> alignedChunkMetadataList = pair.getRight();
+    for (Pair<TsFileSequenceReader, List<AbstractAlignedChunkMetadata>> pair :
+        readerAndChunkMetadataList) {
+      List<AbstractAlignedChunkMetadata> alignedChunkMetadataList = 
pair.getRight();
       for (int i = 0; i < alignedChunkMetadataList.size(); i++) {
-        AlignedChunkMetadata alignedChunkMetadata = 
alignedChunkMetadataList.get(i);
+        AbstractAlignedChunkMetadata alignedChunkMetadata = 
alignedChunkMetadataList.get(i);
         alignedChunkMetadataList.set(
             i,
             
AlignedSeriesBatchCompactionUtils.fillAlignedChunkMetadataBySchemaList(
@@ -193,15 +196,15 @@ public class ReadChunkAlignedSeriesCompactionExecutor {
   }
 
   public void execute() throws IOException, PageException {
-    for (Pair<TsFileSequenceReader, List<AlignedChunkMetadata>> readerListPair 
:
+    for (Pair<TsFileSequenceReader, List<AbstractAlignedChunkMetadata>> 
readerListPair :
         readerAndChunkMetadataList) {
       TsFileSequenceReader reader = readerListPair.left;
-      List<AlignedChunkMetadata> alignedChunkMetadataList = 
readerListPair.right;
+      List<AbstractAlignedChunkMetadata> alignedChunkMetadataList = 
readerListPair.right;
 
       if (reader instanceof CompactionTsFileReader) {
         ((CompactionTsFileReader) reader).markStartOfAlignedSeries();
       }
-      for (AlignedChunkMetadata alignedChunkMetadata : 
alignedChunkMetadataList) {
+      for (AbstractAlignedChunkMetadata alignedChunkMetadata : 
alignedChunkMetadataList) {
         compactWithAlignedChunk(reader, alignedChunkMetadata);
       }
       if (reader instanceof CompactionTsFileReader) {
@@ -215,7 +218,7 @@ public class ReadChunkAlignedSeriesCompactionExecutor {
   }
 
   private void compactWithAlignedChunk(
-      TsFileSequenceReader reader, AlignedChunkMetadata alignedChunkMetadata)
+      TsFileSequenceReader reader, AbstractAlignedChunkMetadata 
alignedChunkMetadata)
       throws IOException, PageException {
     ChunkLoader timeChunk =
         getChunkLoader(reader, (ChunkMetadata) 
alignedChunkMetadata.getTimeChunkMetadata());
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/FastCrossCompactionWriter.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/FastCrossCompactionWriter.java
index ae5bc2e7591..d4b20039109 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/FastCrossCompactionWriter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/FastCrossCompactionWriter.java
@@ -26,7 +26,7 @@ import 
org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
 
 import org.apache.tsfile.exception.write.PageException;
 import org.apache.tsfile.file.header.PageHeader;
-import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.ChunkMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
 import org.apache.tsfile.read.TsFileSequenceReader;
@@ -97,8 +97,8 @@ public class FastCrossCompactionWriter extends 
AbstractCrossCompactionWriter {
   @Override
   public boolean flushAlignedChunk(ChunkMetadataElement chunkMetadataElement, 
int subTaskId)
       throws IOException {
-    AlignedChunkMetadata alignedChunkMetadata =
-        (AlignedChunkMetadata) chunkMetadataElement.chunkMetadata;
+    AbstractAlignedChunkMetadata alignedChunkMetadata =
+        (AbstractAlignedChunkMetadata) chunkMetadataElement.chunkMetadata;
     IChunkMetadata timeChunkMetadata = 
alignedChunkMetadata.getTimeChunkMetadata();
     List<IChunkMetadata> valueChunkMetadatas = 
alignedChunkMetadata.getValueChunkMetadataList();
     Chunk timeChunk = chunkMetadataElement.chunk;
@@ -132,8 +132,8 @@ public class FastCrossCompactionWriter extends 
AbstractCrossCompactionWriter {
       int subTaskId,
       AbstractCompactionFlushController flushController)
       throws IOException {
-    AlignedChunkMetadata alignedChunkMetadata =
-        (AlignedChunkMetadata) chunkMetadataElement.chunkMetadata;
+    AbstractAlignedChunkMetadata alignedChunkMetadata =
+        (AbstractAlignedChunkMetadata) chunkMetadataElement.chunkMetadata;
     IChunkMetadata timeChunkMetadata = 
alignedChunkMetadata.getTimeChunkMetadata();
     List<IChunkMetadata> valueChunkMetadatas = 
alignedChunkMetadata.getValueChunkMetadataList();
     List<Chunk> valueChunks = chunkMetadataElement.valueChunks;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/FastInnerCompactionWriter.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/FastInnerCompactionWriter.java
index e9709af3dbf..39e621cfaf4 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/FastInnerCompactionWriter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/FastInnerCompactionWriter.java
@@ -26,7 +26,7 @@ import 
org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
 
 import org.apache.tsfile.exception.write.PageException;
 import org.apache.tsfile.file.header.PageHeader;
-import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.ChunkMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
 import org.apache.tsfile.read.common.Chunk;
@@ -89,8 +89,8 @@ public class FastInnerCompactionWriter extends 
AbstractInnerCompactionWriter {
   @Override
   public boolean flushAlignedChunk(ChunkMetadataElement chunkMetadataElement, 
int subTaskId)
       throws IOException {
-    AlignedChunkMetadata alignedChunkMetadata =
-        (AlignedChunkMetadata) chunkMetadataElement.chunkMetadata;
+    AbstractAlignedChunkMetadata alignedChunkMetadata =
+        (AbstractAlignedChunkMetadata) chunkMetadataElement.chunkMetadata;
     IChunkMetadata timeChunkMetadata = 
alignedChunkMetadata.getTimeChunkMetadata();
     List<IChunkMetadata> valueChunkMetadatas = 
alignedChunkMetadata.getValueChunkMetadataList();
     Chunk timeChunk = chunkMetadataElement.chunk;
@@ -121,8 +121,8 @@ public class FastInnerCompactionWriter extends 
AbstractInnerCompactionWriter {
       int subTaskId,
       AbstractCompactionFlushController flushController)
       throws IOException {
-    AlignedChunkMetadata alignedChunkMetadata =
-        (AlignedChunkMetadata) chunkMetadataElement.chunkMetadata;
+    AbstractAlignedChunkMetadata alignedChunkMetadata =
+        (AbstractAlignedChunkMetadata) chunkMetadataElement.chunkMetadata;
     IChunkMetadata timeChunkMetadata = 
alignedChunkMetadata.getTimeChunkMetadata();
     List<IChunkMetadata> valueChunkMetadatas = 
alignedChunkMetadata.getValueChunkMetadataList();
     List<Chunk> valueChunks = chunkMetadataElement.valueChunks;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedReadOnlyMemChunk.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedReadOnlyMemChunk.java
index 569db7347ab..a3eb66b018d 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedReadOnlyMemChunk.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedReadOnlyMemChunk.java
@@ -30,6 +30,7 @@ import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.ChunkMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
+import org.apache.tsfile.file.metadata.TableDeviceChunkMetadata;
 import org.apache.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.tsfile.file.metadata.statistics.Statistics;
 import org.apache.tsfile.read.common.TimeRange;
@@ -75,10 +76,11 @@ public class AlignedReadOnlyMemChunk extends 
ReadOnlyMemChunk {
                 timeColumnDeletion,
                 valueColumnsDeletionList,
                 context.isIgnoreAllNullRows());
-    initAlignedChunkMetaFromTsBlock();
+    initAlignedChunkMetaFromTsBlock(context.isIgnoreAllNullRows());
   }
 
-  private void initAlignedChunkMetaFromTsBlock() throws QueryProcessException {
+  private void initAlignedChunkMetaFromTsBlock(boolean ignoreAllNullRows)
+      throws QueryProcessException {
     // Time chunk
     Statistics timeStatistics = Statistics.getStatsByType(TSDataType.VECTOR);
     IChunkMetadata timeChunkMetadata =
@@ -160,7 +162,9 @@ public class AlignedReadOnlyMemChunk extends 
ReadOnlyMemChunk {
       }
     }
     IChunkMetadata alignedChunkMetadata =
-        new AlignedChunkMetadata(timeChunkMetadata, valueChunkMetadataList);
+        ignoreAllNullRows
+            ? new AlignedChunkMetadata(timeChunkMetadata, 
valueChunkMetadataList)
+            : new TableDeviceChunkMetadata(timeChunkMetadata, 
valueChunkMetadataList);
     alignedChunkMetadata.setChunkLoader(new MemAlignedChunkLoader(context, 
this));
     alignedChunkMetadata.setVersion(Long.MAX_VALUE);
     cachedMetaData = alignedChunkMetadata;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessor.java
index 3b2c5fe2944..b6f5629528f 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessor.java
@@ -80,6 +80,7 @@ import org.apache.iotdb.rpc.RpcUtils;
 import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.apache.tsfile.enums.TSDataType;
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.ChunkMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
@@ -1788,7 +1789,7 @@ public class TsFileProcessor {
 
   private void processAlignedChunkMetaDataFromFlushedMemTable(
       IDeviceID deviceID,
-      AlignedChunkMetadata alignedChunkMetadata,
+      AbstractAlignedChunkMetadata alignedChunkMetadata,
       Map<String, List<IChunkMetadata>> measurementToChunkMetaMap,
       Map<String, List<IChunkHandle>> measurementToChunkHandleMap,
       String filePath) {
@@ -1841,10 +1842,10 @@ public class TsFileProcessor {
       Map<String, List<IChunkMetadata>> measurementToChunkMetaList,
       Map<String, List<IChunkHandle>> measurementToChunkHandleList) {
     for (IChunkMetadata chunkMetadata : chunkMetadataList) {
-      if (chunkMetadata instanceof AlignedChunkMetadata) {
+      if (chunkMetadata instanceof AbstractAlignedChunkMetadata) {
         processAlignedChunkMetaDataFromFlushedMemTable(
             deviceID,
-            (AlignedChunkMetadata) chunkMetadata,
+            (AbstractAlignedChunkMetadata) chunkMetadata,
             measurementToChunkMetaList,
             measurementToChunkHandleList,
             this.tsFileResource.getTsFilePath());
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/DiskAlignedChunkLoader.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/DiskAlignedChunkLoader.java
index adef246ec8d..a7c6eb96d42 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/DiskAlignedChunkLoader.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/DiskAlignedChunkLoader.java
@@ -25,7 +25,7 @@ import org.apache.iotdb.db.storageengine.buffer.ChunkCache;
 import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileID;
 import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
 
-import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.ChunkMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
 import org.apache.tsfile.read.common.Chunk;
@@ -76,7 +76,8 @@ public class DiskAlignedChunkLoader implements IChunkLoader {
       throws IOException {
     long t1 = System.nanoTime();
     try {
-      AlignedChunkMetadata alignedChunkMetadata = (AlignedChunkMetadata) 
chunkMetaData;
+      AbstractAlignedChunkMetadata alignedChunkMetadata =
+          (AbstractAlignedChunkMetadata) chunkMetaData;
       ChunkMetadata timeChunkMetadata = (ChunkMetadata) 
alignedChunkMetadata.getTimeChunkMetadata();
       Chunk timeChunk =
           ChunkCache.getInstance()
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkReader.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkReader.java
index 33c85408f0d..12ac281dffc 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkReader.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkReader.java
@@ -21,7 +21,7 @@ package 
org.apache.iotdb.db.storageengine.dataregion.read.reader.chunk;
 
 import 
org.apache.iotdb.db.storageengine.dataregion.memtable.AlignedReadOnlyMemChunk;
 
-import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.read.common.BatchData;
 import org.apache.tsfile.read.filter.basic.Filter;
 import org.apache.tsfile.read.reader.IChunkReader;
@@ -42,7 +42,7 @@ public class MemAlignedChunkReader implements IChunkReader {
         Collections.singletonList(
             new MemAlignedPageReader(
                 readableChunk.getTsBlock(),
-                (AlignedChunkMetadata) readableChunk.getChunkMetaData(),
+                (AbstractAlignedChunkMetadata) 
readableChunk.getChunkMetaData(),
                 globalTimeFilter));
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java
index 473cd7366c3..6adfe09c054 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java
@@ -22,7 +22,7 @@ package 
org.apache.iotdb.db.storageengine.dataregion.read.reader.chunk;
 import org.apache.tsfile.block.column.Column;
 import org.apache.tsfile.block.column.ColumnBuilder;
 import org.apache.tsfile.enums.TSDataType;
-import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.statistics.Statistics;
 import org.apache.tsfile.read.common.BatchData;
 import org.apache.tsfile.read.common.BatchDataFactory;
@@ -45,7 +45,7 @@ import static 
org.apache.tsfile.read.reader.series.PaginationController.UNLIMITE
 public class MemAlignedPageReader implements IPageReader {
 
   private final TsBlock tsBlock;
-  private final AlignedChunkMetadata chunkMetadata;
+  private final AbstractAlignedChunkMetadata chunkMetadata;
 
   private Filter recordFilter;
   private PaginationController paginationController = 
UNLIMITED_PAGINATION_CONTROLLER;
@@ -53,7 +53,7 @@ public class MemAlignedPageReader implements IPageReader {
   private TsBlockBuilder builder;
 
   public MemAlignedPageReader(
-      TsBlock tsBlock, AlignedChunkMetadata chunkMetadata, Filter 
recordFilter) {
+      TsBlock tsBlock, AbstractAlignedChunkMetadata chunkMetadata, Filter 
recordFilter) {
     this.tsBlock = tsBlock;
     this.chunkMetadata = chunkMetadata;
     this.recordFilter = recordFilter;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/DiskAlignedChunkMetadataLoader.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/DiskAlignedChunkMetadataLoader.java
index afc57079c88..f243b51ee1a 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/DiskAlignedChunkMetadataLoader.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/DiskAlignedChunkMetadataLoader.java
@@ -26,8 +26,8 @@ import 
org.apache.iotdb.db.storageengine.dataregion.read.reader.chunk.DiskAligne
 import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
 import org.apache.iotdb.db.utils.ModificationUtils;
 
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.AbstractAlignedTimeSeriesMetadata;
-import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
 import org.apache.tsfile.file.metadata.ITimeSeriesMetadata;
 import org.apache.tsfile.read.controller.IChunkMetadataLoader;
@@ -83,7 +83,7 @@ public class DiskAlignedChunkMetadataLoader implements 
IChunkMetadataLoader {
   public List<IChunkMetadata> loadChunkMetadataList(ITimeSeriesMetadata 
timeSeriesMetadata) {
     final long t1 = System.nanoTime();
     try {
-      List<AlignedChunkMetadata> alignedChunkMetadataList =
+      List<AbstractAlignedChunkMetadata> alignedChunkMetadataList =
           ((AbstractAlignedTimeSeriesMetadata) 
timeSeriesMetadata).getCopiedChunkMetadataList();
 
       // when alignedChunkMetadataList.size() == 1, it means that the chunk 
statistics is same as
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
index 247a0a3fe82..57527c85af8 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
@@ -106,7 +106,11 @@ public class ErrorHandlingUtils {
             || status.getCode() == TSStatusCode.ILLEGAL_PATH.getStatusCode()
             || status.getCode() == 
TSStatusCode.NUMERIC_VALUE_OUT_OF_RANGE.getStatusCode()
             || status.getCode() == 
TSStatusCode.DIVISION_BY_ZERO.getStatusCode()
-            || status.getCode() == 
TSStatusCode.DATE_OUT_OF_RANGE.getStatusCode()) {
+            || status.getCode() == 
TSStatusCode.DATE_OUT_OF_RANGE.getStatusCode()
+            || status.getCode() == 
TSStatusCode.TABLE_NOT_EXISTS.getStatusCode()
+            || status.getCode() == 
TSStatusCode.TABLE_ALREADY_EXISTS.getStatusCode()
+            || status.getCode() == 
TSStatusCode.COLUMN_NOT_EXISTS.getStatusCode()
+            || status.getCode() == 
TSStatusCode.COLUMN_ALREADY_EXISTS.getStatusCode()) {
           LOGGER.info(message);
         } else {
           LOGGER.warn(message, e);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ModificationUtils.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ModificationUtils.java
index 59966207648..f9a6d28e2b9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ModificationUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ModificationUtils.java
@@ -25,6 +25,7 @@ import 
org.apache.iotdb.db.storageengine.dataregion.modification.ModEntry;
 import 
org.apache.iotdb.db.storageengine.dataregion.modification.TableDeletionEntry;
 import 
org.apache.iotdb.db.storageengine.dataregion.modification.TreeDeletionEntry;
 
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
 import org.apache.tsfile.file.metadata.IDeviceID;
@@ -101,7 +102,7 @@ public class ModificationUtils {
   }
 
   private static void modifyValueColumns(
-      AlignedChunkMetadata metaData, List<List<ModEntry>> 
valueColumnsModifications) {
+      AbstractAlignedChunkMetadata metaData, List<List<ModEntry>> 
valueColumnsModifications) {
     List<IChunkMetadata> valueChunkMetadataList = 
metaData.getValueChunkMetadataList();
     // deal with each sub sensor
     for (int j = 0; j < valueChunkMetadataList.size(); j++) {
@@ -116,7 +117,7 @@ public class ModificationUtils {
   }
 
   private static boolean areAllValueColumnsDeleted(
-      AlignedChunkMetadata alignedChunkMetadata, boolean modified) {
+      AbstractAlignedChunkMetadata alignedChunkMetadata, boolean modified) {
 
     // the whole aligned path need to be removed, only set to be true if all 
the sub sensors
     // are deleted and ignoreAllNullRows is true
@@ -156,11 +157,11 @@ public class ModificationUtils {
   }
 
   public static void modifyAlignedChunkMetaData(
-      List<AlignedChunkMetadata> chunkMetaData,
+      List<? extends AbstractAlignedChunkMetadata> chunkMetaData,
       List<ModEntry> timeColumnModifications,
       List<List<ModEntry>> valueColumnsModifications,
       boolean ignoreAllNullRows) {
-    for (AlignedChunkMetadata metaData : chunkMetaData) {
+    for (AbstractAlignedChunkMetadata metaData : chunkMetaData) {
       IChunkMetadata timeColumnChunkMetadata = metaData.getTimeChunkMetadata();
 
       for (ModEntry modification : timeColumnModifications) {
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/FastCompactionPerformerWithInconsistentCompressionTypeAndEncodingTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/FastCompactionPerformerWithInconsistentCompressionTypeAndEncodingTest.java
index 55cb8625da3..f62480c5529 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/FastCompactionPerformerWithInconsistentCompressionTypeAndEncodingTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/FastCompactionPerformerWithInconsistentCompressionTypeAndEncodingTest.java
@@ -32,7 +32,7 @@ import 
org.apache.tsfile.exception.write.WriteProcessException;
 import org.apache.tsfile.file.MetaMarker;
 import org.apache.tsfile.file.header.ChunkHeader;
 import org.apache.tsfile.file.header.PageHeader;
-import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.ChunkMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
 import org.apache.tsfile.file.metadata.IDeviceID;
@@ -622,9 +622,9 @@ public class 
FastCompactionPerformerWithInconsistentCompressionTypeAndEncodingTe
       throws IOException {
     Map<String, CompressionType> compressionTypeMap = new HashMap<>();
     for (IDeviceID device : reader.getAllDevices()) {
-      List<AlignedChunkMetadata> alignedChunkMetadataList =
+      List<AbstractAlignedChunkMetadata> alignedChunkMetadataList =
           reader.getAlignedChunkMetadata(device, true);
-      for (AlignedChunkMetadata alignedChunkMetadata : 
alignedChunkMetadataList) {
+      for (AbstractAlignedChunkMetadata alignedChunkMetadata : 
alignedChunkMetadataList) {
         IChunkMetadata timeChunkMetadata = 
alignedChunkMetadata.getTimeChunkMetadata();
         List<IChunkMetadata> valueChunkMetadataList =
             alignedChunkMetadata.getValueChunkMetadataList();
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/FastInnerCompactionPerformerTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/FastInnerCompactionPerformerTest.java
index 8c9088f5ceb..f2537e9bfdd 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/FastInnerCompactionPerformerTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/FastInnerCompactionPerformerTest.java
@@ -39,7 +39,7 @@ import org.apache.iotdb.db.utils.EnvironmentUtils;
 import org.apache.tsfile.common.conf.TSFileDescriptor;
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.exception.write.WriteProcessException;
-import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.ChunkMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
 import org.apache.tsfile.file.metadata.IDeviceID;
@@ -2047,10 +2047,10 @@ public class FastInnerCompactionPerformerTest extends 
AbstractCompactionTest {
 
     TsFileResource targetResource = tsFileManager.getTsFileList(false).get(0);
     try (TsFileSequenceReader reader = new 
TsFileSequenceReader(targetResource.getTsFilePath())) {
-      List<AlignedChunkMetadata> chunkMetadataList =
+      List<AbstractAlignedChunkMetadata> chunkMetadataList =
           reader.getAlignedChunkMetadata(
               IDeviceID.Factory.DEFAULT_FACTORY.create("root.testsg.d1"), 
true);
-      for (AlignedChunkMetadata alignedChunkMetadata : chunkMetadataList) {
+      for (AbstractAlignedChunkMetadata alignedChunkMetadata : 
chunkMetadataList) {
         ChunkMetadata timeChunkMetadata =
             (ChunkMetadata) alignedChunkMetadata.getTimeChunkMetadata();
         Chunk timeChunk = reader.readMemChunk(timeChunkMetadata);
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/repair/RepairUnsortedFileCompactionTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/repair/RepairUnsortedFileCompactionTest.java
index a9c559a00a5..f2e39d8f866 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/repair/RepairUnsortedFileCompactionTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/repair/RepairUnsortedFileCompactionTest.java
@@ -46,7 +46,7 @@ import 
org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.ITimeIndex;
 import org.apache.iotdb.db.storageengine.dataregion.utils.TsFileResourceUtils;
 
 import org.apache.tsfile.exception.write.WriteProcessException;
-import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.ChunkMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
 import org.apache.tsfile.file.metadata.IDeviceID;
@@ -682,10 +682,10 @@ public class RepairUnsortedFileCompactionTest extends 
AbstractRepairDataTest {
     Assert.assertTrue(task.start());
     TsFileResource target = tsFileManager.getTsFileList(false).get(0);
     try (TsFileSequenceReader reader = new 
TsFileSequenceReader(target.getTsFilePath())) {
-      List<AlignedChunkMetadata> chunkMetadataList =
+      List<AbstractAlignedChunkMetadata> chunkMetadataList =
           reader.getAlignedChunkMetadata(
               IDeviceID.Factory.DEFAULT_FACTORY.create("root.testsg.d1"), 
true);
-      for (AlignedChunkMetadata alignedChunkMetadata : chunkMetadataList) {
+      for (AbstractAlignedChunkMetadata alignedChunkMetadata : 
chunkMetadataList) {
         ChunkMetadata timeChunkMetadata =
             (ChunkMetadata) alignedChunkMetadata.getTimeChunkMetadata();
         Chunk timeChunk = reader.readMemChunk(timeChunkMetadata);
@@ -796,7 +796,7 @@ public class RepairUnsortedFileCompactionTest extends 
AbstractRepairDataTest {
     Assert.assertTrue(task.start());
     TsFileResource target = tsFileManager.getTsFileList(false).get(0);
     try (TsFileSequenceReader reader = new 
TsFileSequenceReader(target.getTsFilePath())) {
-      List<AlignedChunkMetadata> chunkMetadataList =
+      List<AbstractAlignedChunkMetadata> chunkMetadataList =
           reader.getAlignedChunkMetadata(
               IDeviceID.Factory.DEFAULT_FACTORY.create("root.testsg.d1"), 
true);
       Assert.assertEquals(3, chunkMetadataList.size());
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/utils/BatchCompactionUtilsTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/utils/BatchCompactionUtilsTest.java
index ef804437361..c257ee4ec20 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/utils/BatchCompactionUtilsTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/utils/BatchCompactionUtilsTest.java
@@ -34,6 +34,7 @@ import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.exception.write.PageException;
 import org.apache.tsfile.exception.write.WriteProcessException;
 import org.apache.tsfile.file.header.PageHeader;
+import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
 import org.apache.tsfile.file.metadata.ChunkMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
@@ -107,7 +108,7 @@ public class BatchCompactionUtilsTest extends 
AbstractCompactionTest {
             true);
     try (TsFileSequenceReader reader =
         new TsFileSequenceReader(seqResource1.getTsFile().getAbsolutePath())) {
-      AlignedChunkMetadata alignedChunkMetadata =
+      AbstractAlignedChunkMetadata alignedChunkMetadata =
           reader
               .getAlignedChunkMetadata(
                   IDeviceID.Factory.DEFAULT_FACTORY.create("root.testsg.d0"), 
true)
@@ -311,14 +312,14 @@ public class BatchCompactionUtilsTest extends 
AbstractCompactionTest {
             new MeasurementSchema("s1", TSDataType.INT32),
             new MeasurementSchema("s2", TSDataType.INT32),
             new MeasurementSchema("s4", TSDataType.INT32));
-    AlignedChunkMetadata newAlignedChunkMetadata =
+    AbstractAlignedChunkMetadata newAlignedChunkMetadata =
         AlignedSeriesBatchCompactionUtils.fillAlignedChunkMetadataBySchemaList(
             alignedChunkMetadata, measurementSchemas);
     Assert.assertEquals(
+        Arrays.asList("s0", "s1", "s2", "s4"),
         newAlignedChunkMetadata.getValueChunkMetadataList().stream()
             .map(IChunkMetadata::getMeasurementUid)
-            .collect(Collectors.toList()),
-        Arrays.asList("s0", "s1", "s2", "s4"));
+            .collect(Collectors.toList()));
   }
 
   @Test
@@ -333,14 +334,14 @@ public class BatchCompactionUtilsTest extends 
AbstractCompactionTest {
         Arrays.asList(
             new MeasurementSchema("s0", TSDataType.INT32),
             new MeasurementSchema("s4", TSDataType.INT32));
-    AlignedChunkMetadata newAlignedChunkMetadata =
+    AbstractAlignedChunkMetadata newAlignedChunkMetadata =
         AlignedSeriesBatchCompactionUtils.fillAlignedChunkMetadataBySchemaList(
             alignedChunkMetadata, measurementSchemas);
     Assert.assertEquals(
+        Arrays.asList(null, "s4"),
         newAlignedChunkMetadata.getValueChunkMetadataList().stream()
             .map(chunkMetadata -> chunkMetadata == null ? null : 
chunkMetadata.getMeasurementUid())
-            .collect(Collectors.toList()),
-        Arrays.asList(null, "s4"));
+            .collect(Collectors.toList()));
   }
 
   @Test
@@ -368,23 +369,23 @@ public class BatchCompactionUtilsTest extends 
AbstractCompactionTest {
             new MeasurementSchema("s2", TSDataType.INT32),
             new MeasurementSchema("s3", TSDataType.INT32),
             new MeasurementSchema("s4", TSDataType.INT32));
-    AlignedChunkMetadata newAlignedChunkMetadata1 =
+    AbstractAlignedChunkMetadata newAlignedChunkMetadata1 =
         AlignedSeriesBatchCompactionUtils.fillAlignedChunkMetadataBySchemaList(
             alignedChunkMetadata1, measurementSchemas);
     Assert.assertEquals(
+        Arrays.asList("s0", "s1", "s2", null, null),
         newAlignedChunkMetadata1.getValueChunkMetadataList().stream()
             .map(chunkMetadata -> chunkMetadata == null ? null : 
chunkMetadata.getMeasurementUid())
-            .collect(Collectors.toList()),
-        Arrays.asList("s0", "s1", "s2", null, null));
+            .collect(Collectors.toList()));
 
-    AlignedChunkMetadata newAlignedChunkMetadata2 =
+    AbstractAlignedChunkMetadata newAlignedChunkMetadata2 =
         AlignedSeriesBatchCompactionUtils.fillAlignedChunkMetadataBySchemaList(
             alignedChunkMetadata2, measurementSchemas);
     Assert.assertEquals(
+        Arrays.asList(null, null, null, "s3", "s4"),
         newAlignedChunkMetadata2.getValueChunkMetadataList().stream()
             .map(chunkMetadata -> chunkMetadata == null ? null : 
chunkMetadata.getMeasurementUid())
-            .collect(Collectors.toList()),
-        Arrays.asList(null, null, null, "s3", "s4"));
+            .collect(Collectors.toList()));
   }
 
   @Test
@@ -411,22 +412,22 @@ public class BatchCompactionUtilsTest extends 
AbstractCompactionTest {
         Arrays.asList(
             new MeasurementSchema("s2", TSDataType.INT32),
             new MeasurementSchema("s4", TSDataType.INT32));
-    AlignedChunkMetadata newAlignedChunkMetadata1 =
+    AbstractAlignedChunkMetadata newAlignedChunkMetadata1 =
         AlignedSeriesBatchCompactionUtils.fillAlignedChunkMetadataBySchemaList(
             alignedChunkMetadata1, measurementSchemas);
     Assert.assertEquals(
+        Arrays.asList("s2", null),
         newAlignedChunkMetadata1.getValueChunkMetadataList().stream()
             .map(chunkMetadata -> chunkMetadata == null ? null : 
chunkMetadata.getMeasurementUid())
-            .collect(Collectors.toList()),
-        Arrays.asList("s2", null));
+            .collect(Collectors.toList()));
 
-    AlignedChunkMetadata newAlignedChunkMetadata2 =
+    AbstractAlignedChunkMetadata newAlignedChunkMetadata2 =
         AlignedSeriesBatchCompactionUtils.fillAlignedChunkMetadataBySchemaList(
             alignedChunkMetadata2, measurementSchemas);
     Assert.assertEquals(
+        Arrays.asList(null, "s4"),
         newAlignedChunkMetadata2.getValueChunkMetadataList().stream()
             .map(chunkMetadata -> chunkMetadata == null ? null : 
chunkMetadata.getMeasurementUid())
-            .collect(Collectors.toList()),
-        Arrays.asList(null, "s4"));
+            .collect(Collectors.toList()));
   }
 }
diff --git a/pom.xml b/pom.xml
index 40164fc32ed..1df4651c4d7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -167,7 +167,7 @@
         <thrift.version>0.14.1</thrift.version>
         <xz.version>1.9</xz.version>
         <zstd-jni.version>1.5.6-3</zstd-jni.version>
-        <tsfile.version>2.0.0-250118-SNAPSHOT</tsfile.version>
+        <tsfile.version>2.1.0-250206-SNAPSHOT</tsfile.version>
     </properties>
     <!--
     if we claim dependencies in dependencyManagement, then we do not claim

Reply via email to