You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2019/12/12 02:08:58 UTC

[incubator-iotdb] 01/01: Revert "[IOTDB-306] new reader with ChunkMetaData for aggregateFunction (#614)"

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

qiaojialin pushed a commit to branch revert-614-reader_from_chunk
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit c93e69eadbeabc9399bb4fcd80a4e278bf680d9f
Author: Jialin Qiao <qj...@mails.tsinghua.edu.cn>
AuthorDate: Thu Dec 12 10:08:47 2019 +0800

    Revert "[IOTDB-306] new reader with ChunkMetaData for aggregateFunction (#614)"
    
    This reverts commit f951bd378c75b3b432612031fc8365891a0b0d9c.
---
 .../db/query/aggregation/AggregateFunction.java    |   4 -
 .../db/query/aggregation/impl/AvgAggrFunc.java     |   7 --
 .../db/query/aggregation/impl/CountAggrFunc.java   |   8 --
 .../query/aggregation/impl/FirstValueAggrFunc.java |  15 ---
 .../query/aggregation/impl/LastValueAggrFunc.java  |   7 --
 .../db/query/aggregation/impl/MaxTimeAggrFunc.java |   7 --
 .../query/aggregation/impl/MaxValueAggrFunc.java   |   7 --
 .../db/query/aggregation/impl/MinTimeAggrFunc.java |  10 --
 .../query/aggregation/impl/MinValueAggrFunc.java   |   7 --
 .../db/query/executor/AggregateEngineExecutor.java | 126 +++++++++------------
 .../iotdb/db/query/reader/IAggregateReader.java    |   6 -
 .../query/reader/chunkRelated/MemChunkReader.java  |  17 ---
 .../fileRelated/FileSeriesReaderAdapter.java       |  16 ---
 .../db/query/reader/universal/IterateReader.java   |  30 -----
 .../read/reader/series/FileSeriesReader.java       |  40 +------
 15 files changed, 54 insertions(+), 253 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/AggregateFunction.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/AggregateFunction.java
index 0d0fb32..3fae3bd 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/AggregateFunction.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/AggregateFunction.java
@@ -24,7 +24,6 @@ import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.query.reader.IPointReader;
 import org.apache.iotdb.db.query.reader.IReaderByTimestamp;
 import org.apache.iotdb.tsfile.file.header.PageHeader;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 
@@ -120,7 +119,4 @@ public abstract class AggregateFunction {
   public TSDataType getResultDataType() {
     return resultDataType;
   }
-
-  public abstract void calculateValueFromChunkMetaData(
-      ChunkMetaData chunkMetaData) throws QueryProcessException;
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/AvgAggrFunc.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/AvgAggrFunc.java
index 2f6a676..7888021 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/AvgAggrFunc.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/AvgAggrFunc.java
@@ -26,7 +26,6 @@ import org.apache.iotdb.db.query.reader.IPointReader;
 import org.apache.iotdb.db.query.reader.IReaderByTimestamp;
 import org.apache.iotdb.db.utils.TimeValuePair;
 import org.apache.iotdb.tsfile.file.header.PageHeader;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 
@@ -164,12 +163,6 @@ public class AvgAggrFunc extends AggregateFunction {
     return false;
   }
 
-  @Override
-  public void calculateValueFromChunkMetaData(ChunkMetaData chunkMetaData) {
-    sum += chunkMetaData.getStatistics().getSumValue();
-    cnt += chunkMetaData.getNumOfPoints();
-  }
-
   /**
    * Return type name of aggregation
    */
diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/CountAggrFunc.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/CountAggrFunc.java
index a89d063..cab4e90 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/CountAggrFunc.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/CountAggrFunc.java
@@ -25,7 +25,6 @@ import org.apache.iotdb.db.query.aggregation.AggregateFunction;
 import org.apache.iotdb.db.query.reader.IPointReader;
 import org.apache.iotdb.db.query.reader.IReaderByTimestamp;
 import org.apache.iotdb.tsfile.file.header.PageHeader;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 import org.slf4j.Logger;
@@ -153,11 +152,4 @@ public class CountAggrFunc extends AggregateFunction {
   public boolean isCalculatedAggregationResult() {
     return false;
   }
-
-  @Override
-  public void calculateValueFromChunkMetaData(ChunkMetaData chunkMetaData) {
-    long preValue = resultData.getLongRet();
-    preValue += chunkMetaData.getNumOfPoints();
-    resultData.setLongRet(preValue);
-  }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/FirstValueAggrFunc.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/FirstValueAggrFunc.java
index acf9d95..6a64c6c 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/FirstValueAggrFunc.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/FirstValueAggrFunc.java
@@ -26,7 +26,6 @@ import org.apache.iotdb.db.query.aggregation.AggregateFunction;
 import org.apache.iotdb.db.query.reader.IPointReader;
 import org.apache.iotdb.db.query.reader.IReaderByTimestamp;
 import org.apache.iotdb.tsfile.file.header.PageHeader;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 
@@ -152,18 +151,4 @@ public class FirstValueAggrFunc extends AggregateFunction {
   public boolean isCalculatedAggregationResult() {
     return resultData.isSetTime();
   }
-
-  @Override
-  public void calculateValueFromChunkMetaData(ChunkMetaData chunkMetaData)
-      throws QueryProcessException {
-    if (resultData.isSetTime()) {
-      return;
-    }
-
-    Object firstVal = chunkMetaData.getStatistics().getFirstValue();
-    if (firstVal == null) {
-      throw new QueryProcessException("chunkMetaData contains no FIRST value");
-    }
-    resultData.putTimeAndValue(0, firstVal);
-  }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/LastValueAggrFunc.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/LastValueAggrFunc.java
index 94a58f8..643a2c9 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/LastValueAggrFunc.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/LastValueAggrFunc.java
@@ -26,7 +26,6 @@ import org.apache.iotdb.db.query.reader.IPointReader;
 import org.apache.iotdb.db.query.reader.IReaderByTimestamp;
 import org.apache.iotdb.db.utils.TimeValuePair;
 import org.apache.iotdb.tsfile.file.header.PageHeader;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 
@@ -139,12 +138,6 @@ public class LastValueAggrFunc extends AggregateFunction {
     return false;
   }
 
-  @Override
-  public void calculateValueFromChunkMetaData(ChunkMetaData chunkMetaData) {
-    Object lastVal = chunkMetaData.getStatistics().getLastValue();
-    updateLastResult(chunkMetaData.getEndTime(), lastVal);
-  }
-
   private void updateLastResult(long time, Object value) {
     if (!resultData.isSetTime()) {
       resultData.putTimeAndValue(time, value);
diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxTimeAggrFunc.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxTimeAggrFunc.java
index d4251f3..5a566a7 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxTimeAggrFunc.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxTimeAggrFunc.java
@@ -26,7 +26,6 @@ import org.apache.iotdb.db.query.reader.IPointReader;
 import org.apache.iotdb.db.query.reader.IReaderByTimestamp;
 import org.apache.iotdb.db.utils.TimeValuePair;
 import org.apache.iotdb.tsfile.file.header.PageHeader;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 
@@ -127,12 +126,6 @@ public class MaxTimeAggrFunc extends AggregateFunction {
     return false;
   }
 
-  @Override
-  public void calculateValueFromChunkMetaData(ChunkMetaData chunkMetaData) {
-    long maxTimestamp = chunkMetaData.getEndTime();
-    updateMaxTimeResult(0, maxTimestamp);
-  }
-
   private void updateMaxTimeResult(long time, long value) {
     if (!resultData.isSetValue() || value >= resultData.getLongRet()) {
       resultData.setTimestamp(time);
diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxValueAggrFunc.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxValueAggrFunc.java
index a459793..c4d39a5 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxValueAggrFunc.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxValueAggrFunc.java
@@ -25,7 +25,6 @@ import org.apache.iotdb.db.query.aggregation.AggregateFunction;
 import org.apache.iotdb.db.query.reader.IPointReader;
 import org.apache.iotdb.db.query.reader.IReaderByTimestamp;
 import org.apache.iotdb.tsfile.file.header.PageHeader;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 
@@ -160,12 +159,6 @@ public class MaxValueAggrFunc extends AggregateFunction {
     return false;
   }
 
-  @Override
-  public void calculateValueFromChunkMetaData(ChunkMetaData chunkMetaData) {
-    Comparable<Object> maxVal = (Comparable<Object>) chunkMetaData.getStatistics().getMaxValue();
-    updateResult(maxVal);
-  }
-
   private void updateResult(Comparable<Object> maxVal) {
     if (maxVal == null) {
       return;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinTimeAggrFunc.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinTimeAggrFunc.java
index 7e1487a..b237bcb 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinTimeAggrFunc.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinTimeAggrFunc.java
@@ -25,7 +25,6 @@ import org.apache.iotdb.db.query.aggregation.AggregateFunction;
 import org.apache.iotdb.db.query.reader.IPointReader;
 import org.apache.iotdb.db.query.reader.IReaderByTimestamp;
 import org.apache.iotdb.tsfile.file.header.PageHeader;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 
@@ -154,13 +153,4 @@ public class MinTimeAggrFunc extends AggregateFunction {
     return resultData.isSetValue();
   }
 
-  @Override
-  public void calculateValueFromChunkMetaData(ChunkMetaData chunkMetaData) {
-    if (resultData.isSetValue()) {
-      return;
-    }
-    long time = chunkMetaData.getStartTime();
-    resultData.putTimeAndValue(0, time);
-  }
-
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinValueAggrFunc.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinValueAggrFunc.java
index b91fd2e..323f3c4 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinValueAggrFunc.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinValueAggrFunc.java
@@ -25,7 +25,6 @@ import org.apache.iotdb.db.query.aggregation.AggregateFunction;
 import org.apache.iotdb.db.query.reader.IPointReader;
 import org.apache.iotdb.db.query.reader.IReaderByTimestamp;
 import org.apache.iotdb.tsfile.file.header.PageHeader;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 
@@ -155,12 +154,6 @@ public class MinValueAggrFunc extends AggregateFunction {
     return false;
   }
 
-  @Override
-  public void calculateValueFromChunkMetaData(ChunkMetaData chunkMetaData) {
-    Comparable<Object> minVal = (Comparable<Object>) chunkMetaData.getStatistics().getMinValue();
-    updateResult(minVal);
-  }
-
   private void updateResult(Comparable<Object> minVal) {
     if (minVal == null) {
       return;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/executor/AggregateEngineExecutor.java b/server/src/main/java/org/apache/iotdb/db/query/executor/AggregateEngineExecutor.java
index 73536e9..84fd17d 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/executor/AggregateEngineExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/executor/AggregateEngineExecutor.java
@@ -30,10 +30,8 @@ import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.MManager;
 import org.apache.iotdb.db.query.aggregation.AggreResultData;
 import org.apache.iotdb.db.query.aggregation.AggregateFunction;
-import org.apache.iotdb.db.query.aggregation.impl.FirstValueAggrFunc;
 import org.apache.iotdb.db.query.aggregation.impl.LastValueAggrFunc;
 import org.apache.iotdb.db.query.aggregation.impl.MaxTimeAggrFunc;
-import org.apache.iotdb.db.query.aggregation.impl.MinTimeAggrFunc;
 import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.control.QueryResourceManager;
 import org.apache.iotdb.db.query.dataset.AggreResultDataPointReader;
@@ -47,7 +45,6 @@ import org.apache.iotdb.db.query.reader.resourceRelated.UnseqResourceMergeReader
 import org.apache.iotdb.db.query.reader.seriesRelated.SeriesReaderByTimestamp;
 import org.apache.iotdb.db.query.timegenerator.EngineTimeGenerator;
 import org.apache.iotdb.tsfile.file.header.PageHeader;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 import org.apache.iotdb.tsfile.read.common.Path;
@@ -137,10 +134,10 @@ public class AggregateEngineExecutor {
   /**
    * calculation aggregate result with only time filter or no filter for one series.
    *
-   * @param function         aggregate function
-   * @param sequenceReader   sequence data reader
+   * @param function aggregate function
+   * @param sequenceReader sequence data reader
    * @param unSequenceReader unsequence data reader
-   * @param filter           time filter or null
+   * @param filter time filter or null
    * @return one series aggregate result data
    */
   private AggreResultData aggregateWithoutValueFilter(AggregateFunction function,
@@ -151,38 +148,23 @@ public class AggregateEngineExecutor {
           filter);
     }
 
-    while (sequenceReader.hasNextChunk()) {
-      ChunkMetaData chunkMetaData = sequenceReader.nextChunkMeta();
-      if (chunkMetaData != null && canUseHeader(function, chunkMetaData.getStartTime(),
-          chunkMetaData.getEndTime(), unSequenceReader, filter)) {
-        function.calculateValueFromChunkMetaData(chunkMetaData);
-        if (isEarlyBreakFunc(function)) {
-          break;
-        }
-        continue;
+    while (sequenceReader.hasNext()) {
+      PageHeader pageHeader = sequenceReader.nextPageHeader();
+      // judge if overlap with unsequence data
+      if (canUseHeader(function, pageHeader, unSequenceReader, filter)) {
+        // cal by pageHeader
+        function.calculateValueFromPageHeader(pageHeader);
+        sequenceReader.skipPageData();
+      } else {
+        // cal by pageData
+        function.calculateValueFromPageData(sequenceReader.nextBatch(), unSequenceReader);
       }
-      while (sequenceReader.hasNextPageInCurrentChunk()) {
-        PageHeader pageHeader = sequenceReader.nextPageHeader();
-        // judge if overlap with unsequence data
-        if (pageHeader != null && canUseHeader(function, pageHeader.getStartTime(),
-            pageHeader.getEndTime(),
-            unSequenceReader, filter)) {
-          // cal by pageHeader
-          function.calculateValueFromPageHeader(pageHeader);
-          if (isEarlyBreakFunc(function)) {
-            break;
-          }
-          sequenceReader.skipPageData();
-        } else {
-          // cal by pageData
-          function.calculateValueFromPageData(sequenceReader.nextBatch(), unSequenceReader);
-        }
 
-        if (function.isCalculatedAggregationResult()) {
-          return function.getResult();
-        }
+      if (function.isCalculatedAggregationResult()) {
+        return function.getResult();
       }
     }
+
     // cal with unsequence data
     if (unSequenceReader.hasNext()) {
       function.calculateValueFromUnsequenceReader(unSequenceReader);
@@ -190,19 +172,20 @@ public class AggregateEngineExecutor {
     return function.getResult();
   }
 
-  private boolean isEarlyBreakFunc(AggregateFunction function) {
-    if (function instanceof FirstValueAggrFunc || function instanceof MinTimeAggrFunc) {
-      return true;
-    }
-    return false;
-  }
-
   /**
    * determine whether pageHeader can be used to compute aggregation results.
    */
-  private boolean canUseHeader(AggregateFunction function, long minTime, long maxTime,
+  private boolean canUseHeader(AggregateFunction function, PageHeader pageHeader,
       IPointReader unSequenceReader, Filter filter)
       throws IOException, QueryProcessException {
+    // if page data is memory data.
+    if (pageHeader == null) {
+      return false;
+    }
+
+    long minTime = pageHeader.getStartTime();
+    long maxTime = pageHeader.getEndTime();
+
     // If there are points in the page that do not satisfy the time filter,
     // page header cannot be used to calculate.
     if (filter != null && !filter.containStartEndTime(minTime, maxTime)) {
@@ -219,8 +202,8 @@ public class AggregateEngineExecutor {
   /**
    * handle last and max_time aggregate function with only time filter or no filter.
    *
-   * @param function         aggregate function
-   * @param sequenceReader   sequence data reader
+   * @param function aggregate function
+   * @param sequenceReader sequence data reader
    * @param unSequenceReader unsequence data reader
    * @return BatchData-aggregate result
    */
@@ -228,46 +211,41 @@ public class AggregateEngineExecutor {
       IAggregateReader sequenceReader, IPointReader unSequenceReader, Filter timeFilter)
       throws IOException, QueryProcessException {
     long lastBatchTimeStamp = Long.MIN_VALUE;
-
-    while (sequenceReader.hasNextChunk()) {
-      ChunkMetaData chunkMetaData = sequenceReader.nextChunkMeta();
-      // if can use chunkMetaData ,skip this chunk
-      if (chunkMetaData != null && canUseHeader(function, chunkMetaData.getStartTime(),
-          chunkMetaData.getEndTime(), unSequenceReader, timeFilter)) {
-        function.calculateValueFromChunkMetaData(chunkMetaData);
-        //if this chunk is last chunk, broken out of the loop
-        if (lastBatchTimeStamp > chunkMetaData.getStartTime()) {
-          break;
-        }
-        lastBatchTimeStamp = chunkMetaData.getStartTime();
-        continue;
-      }
-      //if can't use chunkMetaData, try to use pageHeader
-      while (sequenceReader.hasNextPageInCurrentChunk()) {
-        PageHeader pageHeader = sequenceReader.nextPageHeader();
-        if (pageHeader != null && canUseHeader(function, pageHeader.getStartTime(),
-            pageHeader.getEndTime(),
-            unSequenceReader, timeFilter)) {
-          // cal by pageHeader
-          function.calculateValueFromPageHeader(pageHeader);
-          sequenceReader.skipPageData();
-          //if this page is last chunk, broken out of the loop
-          if (lastBatchTimeStamp > pageHeader.getStartTime()) {
-            break;
-          }
+    boolean isChunkEnd = false;
+    while (sequenceReader.hasNext()) {
+      PageHeader pageHeader = sequenceReader.nextPageHeader();
+      // judge if overlap with unsequence data
+      if (canUseHeader(function, pageHeader, unSequenceReader, timeFilter)) {
+        // cal by pageHeader
+        function.calculateValueFromPageHeader(pageHeader);
+        sequenceReader.skipPageData();
+
+        if (lastBatchTimeStamp > pageHeader.getStartTime()) {
+          // the chunk is end.
+          isChunkEnd = true;
+        } else {
+          // current page and last page are in the same chunk.
           lastBatchTimeStamp = pageHeader.getStartTime();
-          continue;
         }
+      } else {
+        // cal by pageData
         BatchData batchData = sequenceReader.nextBatch();
         if (batchData.length() > 0) {
           if (lastBatchTimeStamp > batchData.currentTime()) {
-            break;
+            // the chunk is end.
+            isChunkEnd = true;
+          } else {
+            // current page and last page are in the same chunk.
+            lastBatchTimeStamp = batchData.currentTime();
           }
-          lastBatchTimeStamp = batchData.currentTime();
           function.calculateValueFromPageData(batchData, unSequenceReader);
         }
       }
+      if (isChunkEnd) {
+        break;
+      }
     }
+
     // cal with unsequence data
     if (unSequenceReader.hasNext()) {
       function.calculateValueFromUnsequenceReader(unSequenceReader);
diff --git a/server/src/main/java/org/apache/iotdb/db/query/reader/IAggregateReader.java b/server/src/main/java/org/apache/iotdb/db/query/reader/IAggregateReader.java
index 419ca32..7cb9112 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/reader/IAggregateReader.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/reader/IAggregateReader.java
@@ -20,15 +20,9 @@ package org.apache.iotdb.db.query.reader;
 
 import java.io.IOException;
 import org.apache.iotdb.tsfile.file.header.PageHeader;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
 
 public interface IAggregateReader extends IBatchReader {
 
-  boolean hasNextChunk() throws IOException;
-
-  ChunkMetaData nextChunkMeta();
-
-  boolean hasNextPageInCurrentChunk() throws IOException;
   /**
    * Returns meta-information of batch data.
    * <p>
diff --git a/server/src/main/java/org/apache/iotdb/db/query/reader/chunkRelated/MemChunkReader.java b/server/src/main/java/org/apache/iotdb/db/query/reader/chunkRelated/MemChunkReader.java
index 1193ff9..b0885ae 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/reader/chunkRelated/MemChunkReader.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/reader/chunkRelated/MemChunkReader.java
@@ -18,7 +18,6 @@
  */
 package org.apache.iotdb.db.query.reader.chunkRelated;
 
-import java.io.IOException;
 import java.util.Iterator;
 import org.apache.iotdb.db.engine.querycontext.ReadOnlyMemChunk;
 import org.apache.iotdb.db.query.reader.IAggregateReader;
@@ -26,7 +25,6 @@ import org.apache.iotdb.db.query.reader.IPointReader;
 import org.apache.iotdb.db.query.reader.fileRelated.UnSealedTsFileIterateReader;
 import org.apache.iotdb.db.utils.TimeValuePair;
 import org.apache.iotdb.tsfile.file.header.PageHeader;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
@@ -114,21 +112,6 @@ public class MemChunkReader implements IPointReader, IAggregateReader {
   }
 
   @Override
-  public boolean hasNextChunk() throws IOException {
-    return hasNext();
-  }
-
-  @Override
-  public ChunkMetaData nextChunkMeta() {
-    return null;
-  }
-
-  @Override
-  public boolean hasNextPageInCurrentChunk() throws IOException {
-    return hasNext();
-  }
-
-  @Override
   public PageHeader nextPageHeader() {
     return null;
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/reader/fileRelated/FileSeriesReaderAdapter.java b/server/src/main/java/org/apache/iotdb/db/query/reader/fileRelated/FileSeriesReaderAdapter.java
index e79e10a..ff048fd 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/reader/fileRelated/FileSeriesReaderAdapter.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/reader/fileRelated/FileSeriesReaderAdapter.java
@@ -21,7 +21,6 @@ package org.apache.iotdb.db.query.reader.fileRelated;
 import java.io.IOException;
 import org.apache.iotdb.db.query.reader.IAggregateReader;
 import org.apache.iotdb.tsfile.file.header.PageHeader;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 import org.apache.iotdb.tsfile.read.reader.series.FileSeriesReader;
 
@@ -44,21 +43,6 @@ public class FileSeriesReaderAdapter implements IAggregateReader {
   }
 
   @Override
-  public boolean hasNextChunk() throws IOException {
-    return fileSeriesReader.hasNextChunk();
-  }
-
-  @Override
-  public ChunkMetaData nextChunkMeta() {
-    return fileSeriesReader.currentChunkMeta();
-  }
-
-  @Override
-  public boolean hasNextPageInCurrentChunk() throws IOException {
-    return fileSeriesReader.hasNextPageInCurrentChunk();
-  }
-
-  @Override
   public PageHeader nextPageHeader() throws IOException {
     return fileSeriesReader.nextPageHeader();
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/reader/universal/IterateReader.java b/server/src/main/java/org/apache/iotdb/db/query/reader/universal/IterateReader.java
index 36d9f66..58ce739 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/reader/universal/IterateReader.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/reader/universal/IterateReader.java
@@ -21,7 +21,6 @@ package org.apache.iotdb.db.query.reader.universal;
 import java.io.IOException;
 import org.apache.iotdb.db.query.reader.IAggregateReader;
 import org.apache.iotdb.tsfile.file.header.PageHeader;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 
 /**
@@ -85,35 +84,6 @@ public abstract class IterateReader implements IAggregateReader {
   }
 
   @Override
-  public boolean hasNextChunk() throws IOException {
-
-    if (curReaderInitialized && currentSeriesReader.hasNextChunk()) {
-      return true;
-    } else {
-      curReaderInitialized = false;
-    }
-
-    while (nextSeriesReaderIndex < readerSize) {
-      boolean isConstructed = constructNextReader(nextSeriesReaderIndex++);
-      if (isConstructed && currentSeriesReader.hasNextChunk()) {
-        curReaderInitialized = true;
-        return true;
-      }
-    }
-    return false;
-  }
-
-  @Override
-  public boolean hasNextPageInCurrentChunk() throws IOException {
-    return currentSeriesReader.hasNextPageInCurrentChunk();
-  }
-
-  @Override
-  public ChunkMetaData nextChunkMeta() {
-    return currentSeriesReader.nextChunkMeta();
-  }
-
-  @Override
   public void close() {
     // file stream is managed in QueryResourceManager.
   }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/FileSeriesReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/FileSeriesReader.java
index 5f71935..ca43763 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/FileSeriesReader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/FileSeriesReader.java
@@ -38,7 +38,6 @@ public abstract class FileSeriesReader {
   private int chunkToRead;
 
   private BatchData data;
-  private ChunkMetaData chunkMetaData;
 
   /**
    * constructor of FileSeriesReader.
@@ -50,9 +49,9 @@ public abstract class FileSeriesReader {
   }
 
   /**
-   * check if all chunks has next batch data.
+   * check if current chunk has next batch data.
    *
-   * @return True if all chunks has next batch data
+   * @return True if current chunk has next batch data
    */
   public boolean hasNextBatch() throws IOException {
 
@@ -108,39 +107,4 @@ public abstract class FileSeriesReader {
   private ChunkMetaData nextChunkMeta() {
     return chunkMetaDataList.get(chunkToRead++);
   }
-
-  /**
-   * check current file has next chunk.
-   *
-   * @return True if current file has next chunk data
-   */
-  public boolean hasNextPageInCurrentChunk() throws IOException {
-    if (chunkReader != null && chunkReader.hasNextBatch()) {
-      return true;
-    }
-    return false;
-  }
-
-  /**
-   * check current chunk has next batch data.
-   *
-   * @return
-   */
-  public boolean hasNextChunk() throws IOException {
-    // current file still have chunks, init new chunk reader
-    while (chunkToRead < chunkMetaDataList.size()) {
-
-      chunkMetaData = nextChunkMeta();
-      if (chunkSatisfied(chunkMetaData)) {
-        // chunk metadata satisfy the condition
-        initChunkReader(chunkMetaData);
-        return true;
-      }
-    }
-    return false;
-  }
-
-  public ChunkMetaData currentChunkMeta() {
-    return chunkMetaData;
-  }
 }