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/01 02:22:45 UTC

[incubator-iotdb] branch remove_first_last_statistics created (now 09b539b)

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

qiaojialin pushed a change to branch remove_first_last_statistics
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git.


      at 09b539b  remove first, last and isEmpty in statistics

This branch includes the following new commits:

     new 09b539b  remove first, last and isEmpty in statistics

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[incubator-iotdb] 01/01: remove first, last and isEmpty in statistics

Posted by qi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 09b539baae3a45aac332d302fd2bdf1941cdbfe0
Author: qiaojialin <64...@qq.com>
AuthorDate: Sun Dec 1 10:22:33 2019 +0800

    remove first, last and isEmpty in statistics
---
 .../apache/iotdb/hive/TSFHiveInputFormatTest.java  |  2 +-
 tsfile/format-changelist.md                        |  1 +
 .../file/metadata/statistics/BinaryStatistics.java | 86 +++-------------------
 .../metadata/statistics/BooleanStatistics.java     | 85 +++------------------
 .../file/metadata/statistics/DoubleStatistics.java | 72 ++++--------------
 .../file/metadata/statistics/FloatStatistics.java  | 68 +++--------------
 .../metadata/statistics/IntegerStatistics.java     | 70 +++---------------
 .../file/metadata/statistics/LongStatistics.java   | 79 +++-----------------
 .../file/metadata/statistics/Statistics.java       | 67 ++++-------------
 .../iotdb/tsfile/file/header/PageHeaderTest.java   |  3 -
 .../metadata/statistics/BooleanStatisticsTest.java |  6 --
 .../metadata/statistics/DoubleStatisticsTest.java  |  6 --
 .../metadata/statistics/FloatStatisticsTest.java   |  6 --
 .../metadata/statistics/IntegerStatisticsTest.java |  6 --
 .../metadata/statistics/LongStatisticsTest.java    |  8 --
 .../metadata/statistics/StringStatisticsTest.java  |  7 --
 .../tsfile/file/metadata/utils/TestHelper.java     |  2 +-
 .../iotdb/tsfile/file/metadata/utils/Utils.java    |  2 -
 .../iotdb/tsfile/write/TsFileIOWriterTest.java     |  2 +-
 19 files changed, 86 insertions(+), 492 deletions(-)

diff --git a/hive-connector/src/test/java/org/apache/iotdb/hive/TSFHiveInputFormatTest.java b/hive-connector/src/test/java/org/apache/iotdb/hive/TSFHiveInputFormatTest.java
index 7118070..77ec5ee 100644
--- a/hive-connector/src/test/java/org/apache/iotdb/hive/TSFHiveInputFormatTest.java
+++ b/hive-connector/src/test/java/org/apache/iotdb/hive/TSFHiveInputFormatTest.java
@@ -66,7 +66,7 @@ public class TSFHiveInputFormatTest {
       measurementIds[i] = "sensor_" + (i + 1);
     }
     startOffset = 12L;
-    endOffset = 3727688L;
+    endOffset = 3726248L;
     length = endOffset - startOffset;
     TSFInputSplit.ChunkGroupInfo chunkGroupInfo = new TSFInputSplit.ChunkGroupInfo(deviceId, measurementIds, startOffset, endOffset);
     chunkGroupInfoList.add(chunkGroupInfo);
diff --git a/tsfile/format-changelist.md b/tsfile/format-changelist.md
index e8d4b69..2de6fa3 100644
--- a/tsfile/format-changelist.md
+++ b/tsfile/format-changelist.md
@@ -26,6 +26,7 @@ Last Updated on 2019-11-28 by Jialin Qiao.
 | PR#   | Name                                                         | Author          | Changes                                                      |
 | ---- | ------------------------------------------------------------ | --------------- | ------------------------------------------------------------ |
 | 587  | [IOTDB-325] Refactor Statistics                              | qiaojialin       | Move start time, end time, count in PageHeader and ChunkMetadata into Statistics; Remove maxTombstoneTime in ChunkHeader |
+| 607  | Remove first, last, isEmpty in Statistics                 | qiaojialin       | Remove first, last, isEmpty in Statistics, unify serialized method of Statistics |
 
 
 # 0.8.0 (version-0) -> version-1
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BinaryStatistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BinaryStatistics.java
index 3c0a3e4..eaf83fb 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BinaryStatistics.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BinaryStatistics.java
@@ -18,23 +18,18 @@
  */
 package org.apache.iotdb.tsfile.file.metadata.statistics;
 
-import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.ByteBuffer;
 import org.apache.iotdb.tsfile.exception.filter.StatisticsClassException;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.utils.Binary;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 /**
  * Statistics for string type.
  */
 public class BinaryStatistics extends Statistics<Binary> {
 
-  private Binary firstValue = new Binary("");
-  private Binary lastValue = new Binary("");
-
   @Override
   public TSDataType getType() {
     return TSDataType.TEXT;
@@ -42,23 +37,7 @@ public class BinaryStatistics extends Statistics<Binary> {
 
   @Override
   public int getStatsSize() {
-    return 4 + firstValue.getValues().length
-        + 4 + lastValue.getValues().length;
-  }
-
-  /**
-   * initialize Statistics.
-   *
-   * @param first the first value
-   * @param last the last value
-   */
-  private void initializeStats(Binary first, Binary last) {
-    this.firstValue = first;
-    this.lastValue = last;
-  }
-
-  private void updateStats(Binary firstValue, Binary lastValue) {
-    this.lastValue = lastValue;
+    return 0;
   }
 
   @Override
@@ -76,39 +55,18 @@ public class BinaryStatistics extends Statistics<Binary> {
   }
 
   @Override
-  public Binary getFirstValue() {
-    return firstValue;
-  }
-
-  @Override
-  public Binary getLastValue() {
-    return lastValue;
-  }
-
-  @Override
   public double getSumValue() {
     throw new StatisticsClassException("Binary statistics does not support: sum");
   }
 
   @Override
   protected void mergeStatisticsValue(Statistics stats) {
-    BinaryStatistics stringStats = (BinaryStatistics) stats;
-    if (isEmpty) {
-      initializeStats(stringStats.getFirstValue(), stringStats.getLastValue());
-      isEmpty = false;
-    } else {
-      updateStats(stringStats.getFirstValue(), stringStats.getLastValue());
-    }
+    count += stats.count;
   }
 
   @Override
   void updateStats(Binary value) {
-    if (isEmpty) {
-      initializeStats(value, value);
-      isEmpty = false;
-    } else {
-      updateStats(value, value);
-    }
+    count++;
   }
 
   @Override
@@ -116,6 +74,7 @@ public class BinaryStatistics extends Statistics<Binary> {
     for (int i = 0; i < batchSize; i++) {
       updateStats(values[i]);
     }
+    count += batchSize;
   }
 
   @Override
@@ -129,16 +88,6 @@ public class BinaryStatistics extends Statistics<Binary> {
   }
 
   @Override
-  public byte[] getFirstValueBytes() {
-    return firstValue.getValues();
-  }
-
-  @Override
-  public byte[] getLastValueBytes() {
-    return lastValue.getValues();
-  }
-
-  @Override
   public byte[] getSumValueBytes() {
     throw new StatisticsClassException("Binary statistics does not support: sum");
   }
@@ -154,43 +103,26 @@ public class BinaryStatistics extends Statistics<Binary> {
   }
 
   @Override
-  public ByteBuffer getFirstValueBuffer() {
-    return ByteBuffer.wrap(firstValue.getValues());
-  }
-
-  @Override
-  public ByteBuffer getLastValueBuffer() {
-    return ByteBuffer.wrap(lastValue.getValues());
-  }
-
-  @Override
   public ByteBuffer getSumValueBuffer() {
     throw new StatisticsClassException("Binary statistics does not support: sum");
   }
 
   @Override
-  public int serializeStats(OutputStream outputStream) throws IOException {
-    int byteLen = 0;
-    byteLen += ReadWriteIOUtils.write(firstValue, outputStream);
-    byteLen += ReadWriteIOUtils.write(lastValue, outputStream);
-    return byteLen;
+  public int serializeStats(OutputStream outputStream) {
+    return 0;
   }
 
   @Override
-  void deserialize(InputStream inputStream) throws IOException {
-    this.firstValue = ReadWriteIOUtils.readBinary(inputStream);
-    this.lastValue = ReadWriteIOUtils.readBinary(inputStream);
+  void deserialize(InputStream inputStream) {
   }
 
   @Override
   void deserialize(ByteBuffer byteBuffer) {
-    this.firstValue = ReadWriteIOUtils.readBinary(byteBuffer);
-    this.lastValue = ReadWriteIOUtils.readBinary(byteBuffer);
   }
 
   @Override
-  public String toString() {
-    return "[fistValue:" + firstValue + ",lastValue:" + lastValue + "]";
+  public String getString() {
+    return "";
   }
 
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BooleanStatistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BooleanStatistics.java
index 96d6c63..f3ba3ca 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BooleanStatistics.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BooleanStatistics.java
@@ -18,20 +18,14 @@
  */
 package org.apache.iotdb.tsfile.file.metadata.statistics;
 
-import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.ByteBuffer;
 import org.apache.iotdb.tsfile.exception.filter.StatisticsClassException;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.utils.BytesUtils;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 public class BooleanStatistics extends Statistics<Boolean> {
 
-  private boolean firstValue;
-  private boolean lastValue;
-
   @Override
   public TSDataType getType() {
     return TSDataType.BOOLEAN;
@@ -39,32 +33,13 @@ public class BooleanStatistics extends Statistics<Boolean> {
 
   @Override
   public int getStatsSize() {
-    return 2;
-  }
-
-  /**
-   * initialize boolean Statistics.
-   *
-   * @param firstValue first boolean value
-   * @param lastValue last boolean value
-   */
-  private void initializeStats(boolean firstValue, boolean lastValue) {
-    this.firstValue = firstValue;
-    this.lastValue = lastValue;
+    return 0;
   }
 
-  private void updateStats(boolean firstValue, boolean lastValue) {
-    this.lastValue = lastValue;
-  }
 
   @Override
   void updateStats(boolean value) {
-    if (isEmpty) {
-      initializeStats(value, value);
-      isEmpty = false;
-    } else {
-      updateStats(value, value);
-    }
+    count++;
   }
 
   @Override
@@ -72,6 +47,7 @@ public class BooleanStatistics extends Statistics<Boolean> {
     for (int i = 0; i < batchSize; i++) {
       updateStats(values[i]);
     }
+    count += batchSize;
   }
 
   @Override
@@ -89,16 +65,6 @@ public class BooleanStatistics extends Statistics<Boolean> {
   }
 
   @Override
-  public Boolean getFirstValue() {
-    return firstValue;
-  }
-
-  @Override
-  public Boolean getLastValue() {
-    return lastValue;
-  }
-
-  @Override
   public double getSumValue() {
     throw new StatisticsClassException("Boolean statistics does not support: sum");
   }
@@ -114,29 +80,13 @@ public class BooleanStatistics extends Statistics<Boolean> {
   }
 
   @Override
-  public ByteBuffer getFirstValueBuffer() {
-    return ReadWriteIOUtils.getByteBuffer(firstValue);
-  }
-
-  @Override
-  public ByteBuffer getLastValueBuffer() {
-    return ReadWriteIOUtils.getByteBuffer(lastValue);
-  }
-
-  @Override
   public ByteBuffer getSumValueBuffer() {
     throw new StatisticsClassException("Boolean statistics do not support: sum");
   }
 
   @Override
   protected void mergeStatisticsValue(Statistics stats) {
-    BooleanStatistics boolStats = (BooleanStatistics) stats;
-    if (isEmpty) {
-      initializeStats(boolStats.getFirstValue(), boolStats.getLastValue());
-      isEmpty = false;
-    } else {
-      updateStats(boolStats.getFirstValue(), boolStats.getLastValue());
-    }
+    count += stats.count;
   }
 
   @Override
@@ -150,42 +100,25 @@ public class BooleanStatistics extends Statistics<Boolean> {
   }
 
   @Override
-  public byte[] getFirstValueBytes() {
-    return BytesUtils.boolToBytes(firstValue);
-  }
-
-  @Override
-  public byte[] getLastValueBytes() {
-    return BytesUtils.boolToBytes(lastValue);
-  }
-
-  @Override
   public byte[] getSumValueBytes() {
     throw new StatisticsClassException("Boolean statistics does not support: sum");
   }
 
   @Override
-  public int serializeStats(OutputStream outputStream) throws IOException {
-    int byteLen = 0;
-    byteLen += ReadWriteIOUtils.write(firstValue, outputStream);
-    byteLen += ReadWriteIOUtils.write(lastValue, outputStream);
-    return byteLen;
+  public int serializeStats(OutputStream outputStream) {
+    return 0;
   }
 
   @Override
-  void deserialize(InputStream inputStream) throws IOException {
-    this.firstValue = ReadWriteIOUtils.readBool(inputStream);
-    this.lastValue = ReadWriteIOUtils.readBool(inputStream);
+  void deserialize(InputStream inputStream) {
   }
 
   @Override
   void deserialize(ByteBuffer byteBuffer) {
-    this.firstValue = ReadWriteIOUtils.readBool(byteBuffer);
-    this.lastValue = ReadWriteIOUtils.readBool(byteBuffer);
   }
 
   @Override
-  public String toString() {
-    return "[firstValue:" + firstValue + ",lastValue:" + lastValue + "]";
+  public String getString() {
+    return "";
   }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatistics.java
index 85ae01e..7c6b6f8 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatistics.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatistics.java
@@ -30,8 +30,6 @@ public class DoubleStatistics extends Statistics<Double> {
 
   private double minValue;
   private double maxValue;
-  private double firstValue;
-  private double lastValue;
   private double sumValue;
 
   @Override
@@ -49,20 +47,15 @@ public class DoubleStatistics extends Statistics<Double> {
    *
    * @param min min value
    * @param max max value
-   * @param first the first value
-   * @param last the last value
    * @param sum sum value
    */
-  private void initializeStats(double min, double max, double first, double last, double sum) {
+  private void initializeStats(double min, double max, double sum) {
     this.minValue = min;
     this.maxValue = max;
-    this.firstValue = first;
-    this.lastValue = last;
     this.sumValue = sum;
   }
 
-  private void updateStats(double minValue, double maxValue, double firstValue, double lastValue,
-      double sumValue) {
+  private void updateStats(double minValue, double maxValue, double sumValue) {
     if (minValue < this.minValue) {
       this.minValue = minValue;
     }
@@ -70,7 +63,6 @@ public class DoubleStatistics extends Statistics<Double> {
       this.maxValue = maxValue;
     }
     this.sumValue += sumValue;
-    this.lastValue = lastValue;
   }
 
   @Override
@@ -81,12 +73,12 @@ public class DoubleStatistics extends Statistics<Double> {
 
   @Override
   void updateStats(double value) {
-    if (this.isEmpty) {
-      initializeStats(value, value, value, value, value);
-      isEmpty = false;
+    if (count == 0) {
+      initializeStats(value, value, value);
     } else {
-      updateStats(value, value, value, value, value);
+      updateStats(value, value, value);
     }
+    count++;
   }
 
   @Override
@@ -94,6 +86,7 @@ public class DoubleStatistics extends Statistics<Double> {
     for (int i = 0; i < batchSize; i++) {
       updateStats(values[i]);
     }
+    count += batchSize;
   }
 
   @Override
@@ -107,16 +100,6 @@ public class DoubleStatistics extends Statistics<Double> {
   }
 
   @Override
-  public Double getFirstValue() {
-    return firstValue;
-  }
-
-  @Override
-  public Double getLastValue() {
-    return lastValue;
-  }
-
-  @Override
   public double getSumValue() {
     return sumValue;
   }
@@ -124,14 +107,12 @@ public class DoubleStatistics extends Statistics<Double> {
   @Override
   protected void mergeStatisticsValue(Statistics stats) {
     DoubleStatistics doubleStats = (DoubleStatistics) stats;
-    if (this.isEmpty) {
-      initializeStats(doubleStats.getMinValue(), doubleStats.getMaxValue(), doubleStats.getFirstValue(),
-          doubleStats.getLastValue(), doubleStats.getSumValue());
-      isEmpty = false;
+    if (count == 0) {
+      initializeStats(doubleStats.getMinValue(), doubleStats.getMaxValue(), doubleStats.getSumValue());
     } else {
-      updateStats(doubleStats.getMinValue(), doubleStats.getMaxValue(), doubleStats.getFirstValue(),
-          doubleStats.getLastValue(), doubleStats.getSumValue());
+      updateStats(doubleStats.getMinValue(), doubleStats.getMaxValue(), doubleStats.getSumValue());
     }
+    count += stats.count;
   }
 
   @Override
@@ -145,16 +126,6 @@ public class DoubleStatistics extends Statistics<Double> {
   }
 
   @Override
-  public byte[] getFirstValueBytes() {
-    return BytesUtils.doubleToBytes(firstValue);
-  }
-
-  @Override
-  public byte[] getLastValueBytes() {
-    return BytesUtils.doubleToBytes(lastValue);
-  }
-
-  @Override
   public byte[] getSumValueBytes() {
     return BytesUtils.doubleToBytes(sumValue);
   }
@@ -170,16 +141,6 @@ public class DoubleStatistics extends Statistics<Double> {
   }
 
   @Override
-  public ByteBuffer getFirstValueBuffer() {
-    return ReadWriteIOUtils.getByteBuffer(firstValue);
-  }
-
-  @Override
-  public ByteBuffer getLastValueBuffer() {
-    return ReadWriteIOUtils.getByteBuffer(lastValue);
-  }
-
-  @Override
   public ByteBuffer getSumValueBuffer() {
     return ReadWriteIOUtils.getByteBuffer(sumValue);
   }
@@ -189,8 +150,6 @@ public class DoubleStatistics extends Statistics<Double> {
     int byteLen = 0;
     byteLen += ReadWriteIOUtils.write(minValue, outputStream);
     byteLen += ReadWriteIOUtils.write(maxValue, outputStream);
-    byteLen += ReadWriteIOUtils.write(firstValue, outputStream);
-    byteLen += ReadWriteIOUtils.write(lastValue, outputStream);
     byteLen += ReadWriteIOUtils.write(sumValue, outputStream);
     return byteLen;
   }
@@ -199,8 +158,6 @@ public class DoubleStatistics extends Statistics<Double> {
   void deserialize(InputStream inputStream) throws IOException {
     this.minValue = ReadWriteIOUtils.readDouble(inputStream);
     this.maxValue = ReadWriteIOUtils.readDouble(inputStream);
-    this.firstValue = ReadWriteIOUtils.readDouble(inputStream);
-    this.lastValue = ReadWriteIOUtils.readDouble(inputStream);
     this.sumValue = ReadWriteIOUtils.readDouble(inputStream);
   }
 
@@ -208,14 +165,11 @@ public class DoubleStatistics extends Statistics<Double> {
   void deserialize(ByteBuffer byteBuffer) {
     this.minValue = ReadWriteIOUtils.readDouble(byteBuffer);
     this.maxValue = ReadWriteIOUtils.readDouble(byteBuffer);
-    this.firstValue = ReadWriteIOUtils.readDouble(byteBuffer);
-    this.lastValue = ReadWriteIOUtils.readDouble(byteBuffer);
     this.sumValue = ReadWriteIOUtils.readDouble(byteBuffer);
   }
 
   @Override
-  public String toString() {
-    return "[minValue:" + minValue + ",maxValue:" + maxValue + ",firstValue:" + firstValue +
-        ",lastValue:" + lastValue + ",sumValue:" + sumValue + "]";
+  public String getString() {
+    return "[minValue:" + minValue + ",maxValue:" + maxValue + ",sumValue:" + sumValue + "]";
   }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/FloatStatistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/FloatStatistics.java
index 4daaf77..11e33dd 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/FloatStatistics.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/FloatStatistics.java
@@ -33,8 +33,6 @@ public class FloatStatistics extends Statistics<Float> {
 
   private float minValue;
   private float maxValue;
-  private float firstValue;
-  private float lastValue;
   private double sumValue;
 
   @Override
@@ -47,16 +45,13 @@ public class FloatStatistics extends Statistics<Float> {
     return 24;
   }
 
-  private void initializeStats(float min, float max, float first, float last, double sum) {
+  private void initializeStats(float min, float max, double sum) {
     this.minValue = min;
     this.maxValue = max;
-    this.firstValue = first;
-    this.lastValue = last;
     this.sumValue = sum;
   }
 
-  private void updateStats(float minValue, float maxValue, float firstValue, float last,
-      double sumValue) {
+  private void updateStats(float minValue, float maxValue, double sumValue) {
     if (minValue < this.minValue) {
       this.minValue = minValue;
     }
@@ -64,7 +59,6 @@ public class FloatStatistics extends Statistics<Float> {
       this.maxValue = maxValue;
     }
     this.sumValue += sumValue;
-    this.lastValue = last;
   }
 
   @Override
@@ -75,12 +69,12 @@ public class FloatStatistics extends Statistics<Float> {
 
   @Override
   void updateStats(float value) {
-    if (this.isEmpty) {
-      initializeStats(value, value, value, value, value);
-      isEmpty = false;
+    if (count == 0) {
+      initializeStats(value, value, value);
     } else {
-      updateStats(value, value, value, value, value);
+      updateStats(value, value, value);
     }
+    count++;
   }
 
   @Override
@@ -88,6 +82,7 @@ public class FloatStatistics extends Statistics<Float> {
     for (int i = 0; i < batchSize; i++) {
       updateStats(values[i]);
     }
+    count += batchSize;
   }
 
   @Override
@@ -101,16 +96,6 @@ public class FloatStatistics extends Statistics<Float> {
   }
 
   @Override
-  public Float getFirstValue() {
-    return firstValue;
-  }
-
-  @Override
-  public Float getLastValue() {
-    return lastValue;
-  }
-
-  @Override
   public double getSumValue() {
     return sumValue;
   }
@@ -118,14 +103,12 @@ public class FloatStatistics extends Statistics<Float> {
   @Override
   protected void mergeStatisticsValue(Statistics stats) {
     FloatStatistics floatStats = (FloatStatistics) stats;
-    if (isEmpty) {
-      initializeStats(floatStats.getMinValue(), floatStats.getMaxValue(), floatStats.getFirstValue(),
-          floatStats.getLastValue(), floatStats.getSumValue());
-      isEmpty = false;
+    if (count == 0) {
+      initializeStats(floatStats.getMinValue(), floatStats.getMaxValue(), floatStats.getSumValue());
     } else {
-      updateStats(floatStats.getMinValue(), floatStats.getMaxValue(), floatStats.getFirstValue(),
-          floatStats.getLastValue(), floatStats.getSumValue());
+      updateStats(floatStats.getMinValue(), floatStats.getMaxValue(), floatStats.getSumValue());
     }
+    count += stats.count;
   }
 
   @Override
@@ -139,16 +122,6 @@ public class FloatStatistics extends Statistics<Float> {
   }
 
   @Override
-  public byte[] getFirstValueBytes() {
-    return BytesUtils.floatToBytes(firstValue);
-  }
-
-  @Override
-  public byte[] getLastValueBytes() {
-    return BytesUtils.floatToBytes(lastValue);
-  }
-
-  @Override
   public byte[] getSumValueBytes() {
     return BytesUtils.doubleToBytes(sumValue);
   }
@@ -164,16 +137,6 @@ public class FloatStatistics extends Statistics<Float> {
   }
 
   @Override
-  public ByteBuffer getFirstValueBuffer() {
-    return ReadWriteIOUtils.getByteBuffer(firstValue);
-  }
-
-  @Override
-  public ByteBuffer getLastValueBuffer() {
-    return ReadWriteIOUtils.getByteBuffer(lastValue);
-  }
-
-  @Override
   public ByteBuffer getSumValueBuffer() {
     return ReadWriteIOUtils.getByteBuffer(sumValue);
   }
@@ -183,8 +146,6 @@ public class FloatStatistics extends Statistics<Float> {
     int byteLen = 0;
     byteLen += ReadWriteIOUtils.write(minValue, outputStream);
     byteLen += ReadWriteIOUtils.write(maxValue, outputStream);
-    byteLen += ReadWriteIOUtils.write(firstValue, outputStream);
-    byteLen += ReadWriteIOUtils.write(lastValue, outputStream);
     byteLen += ReadWriteIOUtils.write(sumValue, outputStream);
     return byteLen;
   }
@@ -193,8 +154,6 @@ public class FloatStatistics extends Statistics<Float> {
   void deserialize(InputStream inputStream) throws IOException {
     this.minValue = ReadWriteIOUtils.readFloat(inputStream);
     this.maxValue = ReadWriteIOUtils.readFloat(inputStream);
-    this.firstValue = ReadWriteIOUtils.readFloat(inputStream);
-    this.lastValue = ReadWriteIOUtils.readFloat(inputStream);
     this.sumValue = ReadWriteIOUtils.readDouble(inputStream);
   }
 
@@ -202,14 +161,11 @@ public class FloatStatistics extends Statistics<Float> {
   void deserialize(ByteBuffer byteBuffer) {
     this.minValue = ReadWriteIOUtils.readFloat(byteBuffer);
     this.maxValue = ReadWriteIOUtils.readFloat(byteBuffer);
-    this.firstValue = ReadWriteIOUtils.readFloat(byteBuffer);
-    this.lastValue = ReadWriteIOUtils.readFloat(byteBuffer);
     this.sumValue = ReadWriteIOUtils.readDouble(byteBuffer);
   }
 
   @Override
   public String toString() {
-    return "[minValue:" + minValue + ",maxValue:" + maxValue + ",firstValue:" + firstValue +
-        ",lastValue:" + lastValue + ",sumValue:" + sumValue + "]";
+    return "[minValue:" + minValue + ",maxValue:" + maxValue + ",sumValue:" + sumValue + "]";
   }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/IntegerStatistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/IntegerStatistics.java
index 3bf7a5d..4d1d726 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/IntegerStatistics.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/IntegerStatistics.java
@@ -33,8 +33,6 @@ public class IntegerStatistics extends Statistics<Integer> {
 
   private int minValue;
   private int maxValue;
-  private int firstValue;
-  private int lastValue;
   private double sumValue;
 
   @Override
@@ -47,16 +45,13 @@ public class IntegerStatistics extends Statistics<Integer> {
     return 24;
   }
 
-  private void initializeStats(int min, int max, int first, int last, double sum) {
+  private void initializeStats(int min, int max, double sum) {
     this.minValue = min;
     this.maxValue = max;
-    this.firstValue = first;
-    this.lastValue = last;
     this.sumValue = sum;
   }
 
-  private void updateStats(int minValue, int maxValue, int firstValue, int lastValue,
-      double sumValue) {
+  private void updateStats(int minValue, int maxValue, double sumValue) {
     if (minValue < this.minValue) {
       this.minValue = minValue;
     }
@@ -64,7 +59,6 @@ public class IntegerStatistics extends Statistics<Integer> {
       this.maxValue = maxValue;
     }
     this.sumValue += sumValue;
-    this.lastValue = lastValue;
   }
 
   @Override
@@ -75,13 +69,12 @@ public class IntegerStatistics extends Statistics<Integer> {
 
   @Override
   void updateStats(int value) {
-    if (isEmpty) {
-      initializeStats(value, value, value, value, value);
-      isEmpty = false;
+    if (count == 0) {
+      initializeStats(value, value, value);
     } else {
-      updateStats(value, value, value, value, value);
-      isEmpty = false;
+      updateStats(value, value, value);
     }
+    count++;
   }
 
   @Override
@@ -89,6 +82,7 @@ public class IntegerStatistics extends Statistics<Integer> {
     for (int i = 0; i < batchSize; i++) {
       updateStats(values[i]);
     }
+    count += batchSize;
   }
 
   @Override
@@ -102,16 +96,6 @@ public class IntegerStatistics extends Statistics<Integer> {
   }
 
   @Override
-  public Integer getFirstValue() {
-    return firstValue;
-  }
-
-  @Override
-  public Integer getLastValue() {
-    return lastValue;
-  }
-
-  @Override
   public double getSumValue() {
     return sumValue;
   }
@@ -119,15 +103,12 @@ public class IntegerStatistics extends Statistics<Integer> {
   @Override
   protected void mergeStatisticsValue(Statistics stats) {
     IntegerStatistics intStats = (IntegerStatistics) stats;
-    if (isEmpty) {
-      initializeStats(intStats.getMinValue(), intStats.getMaxValue(), intStats.getFirstValue(), intStats.getLastValue(),
-          intStats.getSumValue());
-      isEmpty = false;
+    if (count == 0) {
+      initializeStats(intStats.getMinValue(), intStats.getMaxValue(), intStats.getSumValue());
     } else {
-      updateStats(intStats.getMinValue(), intStats.getMaxValue(), intStats.getFirstValue(), intStats.getLastValue(),
-          intStats.getSumValue());
+      updateStats(intStats.getMinValue(), intStats.getMaxValue(), intStats.getSumValue());
     }
-
+    count += stats.count;
   }
 
   @Override
@@ -141,16 +122,6 @@ public class IntegerStatistics extends Statistics<Integer> {
   }
 
   @Override
-  public ByteBuffer getFirstValueBuffer() {
-    return ReadWriteIOUtils.getByteBuffer(firstValue);
-  }
-
-  @Override
-  public ByteBuffer getLastValueBuffer() {
-    return ReadWriteIOUtils.getByteBuffer(lastValue);
-  }
-
-  @Override
   public ByteBuffer getSumValueBuffer() {
     return ReadWriteIOUtils.getByteBuffer(sumValue);
   }
@@ -166,16 +137,6 @@ public class IntegerStatistics extends Statistics<Integer> {
   }
 
   @Override
-  public byte[] getFirstValueBytes() {
-    return BytesUtils.intToBytes(firstValue);
-  }
-
-  @Override
-  public byte[] getLastValueBytes() {
-    return BytesUtils.intToBytes(lastValue);
-  }
-
-  @Override
   public byte[] getSumValueBytes() {
     return BytesUtils.doubleToBytes(sumValue);
   }
@@ -185,8 +146,6 @@ public class IntegerStatistics extends Statistics<Integer> {
     int byteLen = 0;
     byteLen += ReadWriteIOUtils.write(minValue, outputStream);
     byteLen += ReadWriteIOUtils.write(maxValue, outputStream);
-    byteLen += ReadWriteIOUtils.write(firstValue, outputStream);
-    byteLen += ReadWriteIOUtils.write(lastValue, outputStream);
     byteLen += ReadWriteIOUtils.write(sumValue, outputStream);
     return byteLen;
   }
@@ -195,8 +154,6 @@ public class IntegerStatistics extends Statistics<Integer> {
   void deserialize(InputStream inputStream) throws IOException {
     this.minValue = ReadWriteIOUtils.readInt(inputStream);
     this.maxValue = ReadWriteIOUtils.readInt(inputStream);
-    this.firstValue = ReadWriteIOUtils.readInt(inputStream);
-    this.lastValue = ReadWriteIOUtils.readInt(inputStream);
     this.sumValue = ReadWriteIOUtils.readDouble(inputStream);
   }
 
@@ -204,14 +161,11 @@ public class IntegerStatistics extends Statistics<Integer> {
   void deserialize(ByteBuffer byteBuffer) {
     this.minValue = ReadWriteIOUtils.readInt(byteBuffer);
     this.maxValue = ReadWriteIOUtils.readInt(byteBuffer);
-    this.firstValue = ReadWriteIOUtils.readInt(byteBuffer);
-    this.lastValue = ReadWriteIOUtils.readInt(byteBuffer);
     this.sumValue = ReadWriteIOUtils.readDouble(byteBuffer);
   }
 
   @Override
   public String toString() {
-    return "[minValue:" + minValue + ",maxValue:" + maxValue + ",firstValue:" + firstValue +
-        ",lastValue:" + lastValue + ",sumValue:" + sumValue + "]";
+    return "[minValue:" + minValue + ",maxValue:" + maxValue + ",sumValue:" + sumValue + "]";
   }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/LongStatistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/LongStatistics.java
index 5741715..7a1ffdd 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/LongStatistics.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/LongStatistics.java
@@ -30,8 +30,6 @@ public class LongStatistics extends Statistics<Long> {
 
   private long minValue;
   private long maxValue;
-  private long firstValue;
-  private long lastValue;
   private double sumValue;
 
   @Override
@@ -44,16 +42,13 @@ public class LongStatistics extends Statistics<Long> {
     return 40;
   }
 
-  private void initializeStats(long min, long max, long firstValue, long last, double sum) {
+  private void initializeStats(long min, long max, double sum) {
     this.minValue = min;
     this.maxValue = max;
-    this.firstValue = firstValue;
-    this.lastValue = last;
     this.sumValue += sum;
   }
 
-  private void updateStats(long minValue, long maxValue, long firstValue, long lastValue,
-      double sumValue) {
+  private void updateStats(long minValue, long maxValue, double sumValue) {
     if (minValue < this.minValue) {
       this.minValue = minValue;
     }
@@ -61,7 +56,6 @@ public class LongStatistics extends Statistics<Long> {
       this.maxValue = maxValue;
     }
     this.sumValue += sumValue;
-    this.lastValue = lastValue;
   }
 
   @Override
@@ -81,28 +75,18 @@ public class LongStatistics extends Statistics<Long> {
   }
 
   @Override
-  public Long getFirstValue() {
-    return firstValue;
-  }
-
-  @Override
-  public Long getLastValue() {
-    return lastValue;
-  }
-
-  @Override
   public double getSumValue() {
     return sumValue;
   }
 
   @Override
   void updateStats(long value) {
-    if (isEmpty) {
-      initializeStats(value, value, value, value, value);
-      isEmpty = false;
+    if (count == 0) {
+      initializeStats(value, value, value);
     } else {
-      updateStats(value, value, value, value, value);
+      updateStats(value, value, value);
     }
+    count++;
   }
 
   @Override
@@ -110,30 +94,18 @@ public class LongStatistics extends Statistics<Long> {
     for (int i = 0; i < batchSize; i++) {
       updateStats(values[i]);
     }
-  }
-
-  @Override
-  public void updateStats(long minValue, long maxValue) {
-    if (minValue < this.minValue) {
-      this.minValue = minValue;
-    }
-    if (maxValue > this.maxValue) {
-      this.maxValue = maxValue;
-    }
+    count += batchSize;
   }
 
   @Override
   protected void mergeStatisticsValue(Statistics stats) {
     LongStatistics longStats = (LongStatistics) stats;
-    if (isEmpty) {
-      initializeStats(longStats.getMinValue(), longStats.getMaxValue(), longStats.getFirstValue(),
-          longStats.getLastValue(), longStats.getSumValue());
-      isEmpty = false;
+    if (count == 0) {
+      initializeStats(longStats.getMinValue(), longStats.getMaxValue(), longStats.getSumValue());
     } else {
-      updateStats(longStats.getMinValue(), longStats.getMaxValue(), longStats.getFirstValue(), longStats.getLastValue(),
-          longStats.getSumValue());
+      updateStats(longStats.getMinValue(), longStats.getMaxValue(), longStats.getSumValue());
     }
-
+    count += stats.count;
   }
 
   @Override
@@ -147,16 +119,6 @@ public class LongStatistics extends Statistics<Long> {
   }
 
   @Override
-  public byte[] getFirstValueBytes() {
-    return BytesUtils.longToBytes(firstValue);
-  }
-
-  @Override
-  public byte[] getLastValueBytes() {
-    return BytesUtils.longToBytes(lastValue);
-  }
-
-  @Override
   public byte[] getSumValueBytes() {
     return BytesUtils.doubleToBytes(sumValue);
   }
@@ -172,16 +134,6 @@ public class LongStatistics extends Statistics<Long> {
   }
 
   @Override
-  public ByteBuffer getFirstValueBuffer() {
-    return ReadWriteIOUtils.getByteBuffer(firstValue);
-  }
-
-  @Override
-  public ByteBuffer getLastValueBuffer() {
-    return ReadWriteIOUtils.getByteBuffer(lastValue);
-  }
-
-  @Override
   public ByteBuffer getSumValueBuffer() {
     return ReadWriteIOUtils.getByteBuffer(sumValue);
   }
@@ -191,8 +143,6 @@ public class LongStatistics extends Statistics<Long> {
     int byteLen = 0;
     byteLen += ReadWriteIOUtils.write(minValue, outputStream);
     byteLen += ReadWriteIOUtils.write(maxValue, outputStream);
-    byteLen += ReadWriteIOUtils.write(firstValue, outputStream);
-    byteLen += ReadWriteIOUtils.write(lastValue, outputStream);
     byteLen += ReadWriteIOUtils.write(sumValue, outputStream);
     return byteLen;
   }
@@ -201,8 +151,6 @@ public class LongStatistics extends Statistics<Long> {
   void deserialize(InputStream inputStream) throws IOException {
     this.minValue = ReadWriteIOUtils.readLong(inputStream);
     this.maxValue = ReadWriteIOUtils.readLong(inputStream);
-    this.firstValue = ReadWriteIOUtils.readLong(inputStream);
-    this.lastValue = ReadWriteIOUtils.readLong(inputStream);
     this.sumValue = ReadWriteIOUtils.readDouble(inputStream);
   }
 
@@ -210,14 +158,11 @@ public class LongStatistics extends Statistics<Long> {
   void deserialize(ByteBuffer byteBuffer) {
     this.minValue = ReadWriteIOUtils.readLong(byteBuffer);
     this.maxValue = ReadWriteIOUtils.readLong(byteBuffer);
-    this.firstValue = ReadWriteIOUtils.readLong(byteBuffer);
-    this.lastValue = ReadWriteIOUtils.readLong(byteBuffer);
     this.sumValue = ReadWriteIOUtils.readDouble(byteBuffer);
   }
 
   @Override
   public String toString() {
-    return "[minValue:" + minValue + ",maxValue:" + maxValue + ",firstValue:" + firstValue +
-        ",lastValue:" + lastValue + ",sumValue:" + sumValue + "]";
+    return "[minValue:" + minValue + ",maxValue:" + maxValue + ",sumValue:" + sumValue + "]";
   }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java
index 4f4e6e8..0b189c2 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java
@@ -41,15 +41,11 @@ import org.slf4j.LoggerFactory;
 public abstract class Statistics<T> {
 
   private static final Logger LOG = LoggerFactory.getLogger(Statistics.class);
-  /**
-   * isEmpty being false means this statistic has been initialized and the max and min is not null;
-   */
-  protected boolean isEmpty = true;
 
   /**
    * number of time-value points
    */
-  private long count = 0;
+  protected long count = 0;
 
   private long startTime = Long.MAX_VALUE;
   private long endTime = Long.MIN_VALUE;
@@ -113,30 +109,18 @@ public abstract class Statistics<T> {
 
   public abstract T getMaxValue();
 
-  public abstract T getFirstValue();
-
-  public abstract T getLastValue();
-
   public abstract double getSumValue();
 
   public abstract byte[] getMinValueBytes();
 
   public abstract byte[] getMaxValueBytes();
 
-  public abstract byte[] getFirstValueBytes();
-
-  public abstract byte[] getLastValueBytes();
-
   public abstract byte[] getSumValueBytes();
 
   public abstract ByteBuffer getMinValueBuffer();
 
   public abstract ByteBuffer getMaxValueBuffer();
 
-  public abstract ByteBuffer getFirstValueBuffer();
-
-  public abstract ByteBuffer getLastValueBuffer();
-
   public abstract ByteBuffer getSumValueBuffer();
 
   /**
@@ -154,9 +138,7 @@ public abstract class Statistics<T> {
         this.endTime = stats.endTime;
       }
       // must be sure no overlap between two statistics
-      this.count += stats.count;
       mergeStatisticsValue(stats);
-      isEmpty = false;
     } else {
       String thisClass = this.getClass().toString();
       String statsClass = stats.getClass().toString();
@@ -174,7 +156,6 @@ public abstract class Statistics<T> {
     if (time > this.endTime) {
       endTime = time;
     }
-    count++;
     updateStats(value);
   }
 
@@ -185,7 +166,6 @@ public abstract class Statistics<T> {
     if (time > this.endTime) {
       endTime = time;
     }
-    count++;
     updateStats(value);
   }
 
@@ -196,7 +176,6 @@ public abstract class Statistics<T> {
     if (time > this.endTime) {
       endTime = time;
     }
-    count++;
     updateStats(value);
   }
 
@@ -207,7 +186,6 @@ public abstract class Statistics<T> {
     if (time > this.endTime) {
       endTime = time;
     }
-    count++;
     updateStats(value);
   }
 
@@ -218,7 +196,6 @@ public abstract class Statistics<T> {
     if (time > this.endTime) {
       endTime = time;
     }
-    count++;
     updateStats(value);
   }
 
@@ -229,7 +206,6 @@ public abstract class Statistics<T> {
     if (time > endTime) {
       endTime = time;
     }
-    count++;
     updateStats(value);
   }
 
@@ -240,7 +216,6 @@ public abstract class Statistics<T> {
     if (time[batchSize-1] > this.endTime) {
       endTime = time[batchSize-1];
     }
-    count += batchSize;
     updateStats(values, batchSize);
   }
 
@@ -251,7 +226,6 @@ public abstract class Statistics<T> {
     if (time[batchSize-1] > this.endTime) {
       endTime = time[batchSize-1];
     }
-    count += batchSize;
     updateStats(values, batchSize);
   }
 
@@ -262,7 +236,6 @@ public abstract class Statistics<T> {
     if (time[batchSize-1] > this.endTime) {
       endTime = time[batchSize-1];
     }
-    count += batchSize;
     updateStats(values, batchSize);
   }
 
@@ -273,7 +246,6 @@ public abstract class Statistics<T> {
     if (time[batchSize-1] > this.endTime) {
       endTime = time[batchSize-1];
     }
-    count += batchSize;
     updateStats(values, batchSize);
   }
 
@@ -284,7 +256,6 @@ public abstract class Statistics<T> {
     if (time[batchSize-1] > this.endTime) {
       endTime = time[batchSize-1];
     }
-    count += batchSize;
     updateStats(values, batchSize);
   }
 
@@ -295,20 +266,11 @@ public abstract class Statistics<T> {
     if (time[batchSize-1] > this.endTime) {
       endTime = time[batchSize-1];
     }
-    count += batchSize;
     updateStats(values, batchSize);
   }
 
   protected abstract void mergeStatisticsValue(Statistics stats);
 
-  public boolean isEmpty() {
-    return isEmpty;
-  }
-
-  public void setEmpty(boolean empty) {
-    isEmpty = empty;
-  }
-
   void updateStats(boolean value) {
     throw new UnsupportedOperationException();
   }
@@ -357,17 +319,6 @@ public abstract class Statistics<T> {
     throw new UnsupportedOperationException();
   }
 
-  /**
-   * This method with two parameters is only used by {@code unsequence} which
-   * updates/inserts/deletes timestamp.
-   *
-   * @param min min timestamp
-   * @param max max timestamp
-   */
-  public void updateStats(long min, long max) {
-    throw new UnsupportedOperationException();
-  }
-
   public static Statistics deserialize(InputStream inputStream, TSDataType dataType)
       throws IOException {
     Statistics statistics = getStatsByType(dataType);
@@ -375,7 +326,6 @@ public abstract class Statistics<T> {
     statistics.setStartTime(ReadWriteIOUtils.readLong(inputStream));
     statistics.setEndTime(ReadWriteIOUtils.readLong(inputStream));
     statistics.deserialize(inputStream);
-    statistics.isEmpty = false;
     return statistics;
   }
 
@@ -385,10 +335,13 @@ public abstract class Statistics<T> {
     statistics.setStartTime(ReadWriteIOUtils.readLong(buffer));
     statistics.setEndTime(ReadWriteIOUtils.readLong(buffer));
     statistics.deserialize(buffer);
-    statistics.isEmpty = false;
     return statistics;
   }
 
+  public boolean isEmpty() {
+    return count == 0;
+  }
+
   public long getStartTime() {
     return startTime;
   }
@@ -421,4 +374,14 @@ public abstract class Statistics<T> {
     return o != null && getClass() == o.getClass();
   }
 
+  @Override
+  public String toString() {
+    return "[count:" + count + "[start time:" + startTime + "[end time:" + endTime +
+        getString();
+  }
+
+  String getString() {
+    return "";
+  }
+
 }
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/header/PageHeaderTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/header/PageHeaderTest.java
index d7394e7..5c0f0bb 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/header/PageHeaderTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/header/PageHeaderTest.java
@@ -34,9 +34,6 @@ import org.junit.Test;
 public class PageHeaderTest {
   public static final int UNCOMPRESSED_SIZE = 123456;
   public static final int COMPRESSED_SIZE = 100000;
-  public static final int NUM_OF_VALUES = 10000;
-  public static final long MAX_TIMESTAMO = 523372036854775806L;
-  public static final long MIN_TIMESTAMO = 423372036854775806L;
   public static final TSDataType DATA_TYPE = TSDataType.INT64;
   private final String PATH = "target/outputPageHeader.tsfile";
 
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/BooleanStatisticsTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/BooleanStatisticsTest.java
index 0db1a37..d439d18 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/BooleanStatisticsTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/BooleanStatisticsTest.java
@@ -35,8 +35,6 @@ public class BooleanStatisticsTest {
     assertFalse(booleanStatistics.isEmpty());
     booleanStatistics.updateStats(false);
     assertFalse(booleanStatistics.isEmpty());
-    assertTrue(booleanStatistics.getFirstValue());
-    assertFalse(booleanStatistics.getLastValue());
   }
 
   @Test
@@ -52,11 +50,7 @@ public class BooleanStatisticsTest {
     Statistics<Boolean> booleanStats3 = new BooleanStatistics();
     booleanStats3.mergeStatistics(booleanStats1);
     assertFalse(booleanStats3.isEmpty());
-    assertFalse(booleanStats3.getFirstValue());
-    assertFalse(booleanStats3.getLastValue());
 
     booleanStats3.mergeStatistics(booleanStats2);
-    assertFalse(booleanStats3.getFirstValue());
-    assertTrue(booleanStats3.getLastValue());
   }
 }
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatisticsTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatisticsTest.java
index a531071..dfb19ae 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatisticsTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatisticsTest.java
@@ -37,8 +37,6 @@ public class DoubleStatisticsTest {
     assertEquals(2.32d, doubleStats.getMaxValue(), maxError);
     assertEquals(1.34d, doubleStats.getMinValue(), maxError);
     assertEquals(2.32d + 1.34d, doubleStats.getSumValue(), maxError);
-    assertEquals(1.34d, doubleStats.getFirstValue(), maxError);
-    assertEquals(2.32d, doubleStats.getLastValue(), maxError);
   }
 
   @Test
@@ -57,15 +55,11 @@ public class DoubleStatisticsTest {
     assertEquals(100.13453d, doubleStats3.getMaxValue(), maxError);
     assertEquals(1.34d, doubleStats3.getMinValue(), maxError);
     assertEquals(100.13453d + 1.34d, doubleStats3.getSumValue(), maxError);
-    assertEquals(1.34d, doubleStats3.getFirstValue(), maxError);
-    assertEquals(100.13453d, doubleStats3.getLastValue(), maxError);
 
     doubleStats3.mergeStatistics(doubleStats2);
     assertEquals(200.435d, doubleStats3.getMaxValue(), maxError);
     assertEquals(1.34d, doubleStats3.getMinValue(), maxError);
     assertEquals(100.13453d + 1.34d + 200.435d, doubleStats3.getSumValue(), maxError);
-    assertEquals(1.34d, doubleStats3.getFirstValue(), maxError);
-    assertEquals(200.435d, doubleStats3.getLastValue(), maxError);
   }
 
 }
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/FloatStatisticsTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/FloatStatisticsTest.java
index 590b462..d154716 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/FloatStatisticsTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/FloatStatisticsTest.java
@@ -37,8 +37,6 @@ public class FloatStatisticsTest {
     assertEquals(2.32f, (double) floatStats.getMaxValue(), maxError);
     assertEquals(1.34f, (double) floatStats.getMinValue(), maxError);
     assertEquals(2.32f + 1.34f, (double) floatStats.getSumValue(), maxError);
-    assertEquals(1.34f, (double) floatStats.getFirstValue(), maxError);
-    assertEquals(2.32f, (double) floatStats.getLastValue(), maxError);
   }
 
   @Test
@@ -57,15 +55,11 @@ public class FloatStatisticsTest {
     assertEquals(100.13453f, floatStats3.getMaxValue(), maxError);
     assertEquals(1.34f, floatStats3.getMinValue(), maxError);
     assertEquals(100.13453f + 1.34f, (float) floatStats3.getSumValue(), maxError);
-    assertEquals(1.34f, floatStats3.getFirstValue(), maxError);
-    assertEquals(100.13453f, floatStats3.getLastValue(), maxError);
 
     floatStats3.mergeStatistics(floatStats2);
     assertEquals(200.435d, floatStats3.getMaxValue(), maxError);
     assertEquals(1.34d, floatStats3.getMinValue(), maxError);
     assertEquals(100.13453f + 1.34f + 200.435d, (float) floatStats3.getSumValue(), maxError);
-    assertEquals(1.34f, floatStats3.getFirstValue(), maxError);
-    assertEquals(200.435f, floatStats3.getLastValue(), maxError);
 
   }
 
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/IntegerStatisticsTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/IntegerStatisticsTest.java
index b9552c6..b820754 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/IntegerStatisticsTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/IntegerStatisticsTest.java
@@ -34,9 +34,7 @@ public class IntegerStatisticsTest {
     assertFalse(intStats.isEmpty());
     assertEquals(2, (int) intStats.getMaxValue());
     assertEquals(1, (int) intStats.getMinValue());
-    assertEquals(1, (int) intStats.getFirstValue());
     assertEquals(3, (int) intStats.getSumValue());
-    assertEquals(2, (int) intStats.getLastValue());
   }
 
   @Test
@@ -54,15 +52,11 @@ public class IntegerStatisticsTest {
     assertFalse(intStats3.isEmpty());
     assertEquals(100, (int) intStats3.getMaxValue());
     assertEquals(1, (int) intStats3.getMinValue());
-    assertEquals(1, (int) intStats3.getFirstValue());
     assertEquals(1 + 100, (int) intStats3.getSumValue());
-    assertEquals(100, (int) intStats3.getLastValue());
 
     intStats3.mergeStatistics(intStats2);
     assertEquals(200, (int) intStats3.getMaxValue());
     assertEquals(1, (int) intStats3.getMinValue());
-    assertEquals(1, (int) intStats3.getFirstValue());
     assertEquals(101 + 200, (int) intStats3.getSumValue());
-    assertEquals(200, (int) intStats3.getLastValue());
   }
 }
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/LongStatisticsTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/LongStatisticsTest.java
index 715a88f..f7201ec 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/LongStatisticsTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/LongStatisticsTest.java
@@ -40,9 +40,7 @@ public class LongStatisticsTest {
     assertFalse(longStats.isEmpty());
     assertEquals(secondValue, (long) longStats.getMaxValue());
     assertEquals(firstValue, (long) longStats.getMinValue());
-    assertEquals(firstValue, (long) longStats.getFirstValue());
     assertEquals(firstValue + secondValue, (long) longStats.getSumValue());
-    assertEquals(secondValue, (long) longStats.getLastValue());
   }
 
   @Test
@@ -63,15 +61,11 @@ public class LongStatisticsTest {
     assertEquals(max1, (long) longStats3.getMaxValue());
     assertEquals(1, (long) longStats3.getMinValue());
     assertEquals(max1 + 1, (long) longStats3.getSumValue());
-    assertEquals(1, (long) longStats3.getFirstValue());
-    assertEquals(max1, (long) longStats3.getLastValue());
 
     longStats3.mergeStatistics(longStats2);
     assertEquals(max2, (long) longStats3.getMaxValue());
     assertEquals(1, (long) longStats3.getMinValue());
     assertEquals(max2 + max1 + 1, (long) longStats3.getSumValue());
-    assertEquals(1, (long) longStats3.getFirstValue());
-    assertEquals(max2, (long) longStats3.getLastValue());
 
     // Test mismatch
     IntegerStatistics intStats5 = new IntegerStatistics();
@@ -89,8 +83,6 @@ public class LongStatisticsTest {
     // intStats5
     assertEquals(1, (long) longStats3.getMinValue());
     assertEquals(max2 + max1 + 1, (long) longStats3.getSumValue());
-    assertEquals(1, (long) longStats3.getFirstValue());
-    assertEquals(max2, (long) longStats3.getLastValue());
   }
 
 }
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/StringStatisticsTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/StringStatisticsTest.java
index 88094ae..289bdb8 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/StringStatisticsTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/statistics/StringStatisticsTest.java
@@ -18,7 +18,6 @@
  */
 package org.apache.iotdb.tsfile.file.metadata.statistics;
 
-import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 
 import org.apache.iotdb.tsfile.utils.Binary;
@@ -33,8 +32,6 @@ public class StringStatisticsTest {
     assertFalse(binaryStats.isEmpty());
     binaryStats.updateStats(new Binary("bbb"));
     assertFalse(binaryStats.isEmpty());
-    assertEquals("aaa", binaryStats.getFirstValue().getStringValue());
-    assertEquals("bbb", binaryStats.getLastValue().getStringValue());
   }
 
   @Test
@@ -50,11 +47,7 @@ public class StringStatisticsTest {
     Statistics<Binary> stringStats3 = new BinaryStatistics();
     stringStats3.mergeStatistics(stringStats1);
     assertFalse(stringStats3.isEmpty());
-    assertEquals("aaa", stringStats3.getFirstValue().getStringValue());
-    assertEquals("ccc", stringStats3.getLastValue().getStringValue());
 
     stringStats3.mergeStatistics(stringStats2);
-    assertEquals("aaa", (String) stringStats3.getFirstValue().getStringValue());
-    assertEquals("ddd", stringStats3.getLastValue().getStringValue());
   }
 }
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/TestHelper.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/TestHelper.java
index feab49a..6569a85 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/TestHelper.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/TestHelper.java
@@ -67,7 +67,7 @@ public class TestHelper {
 
   public static PageHeader createTestPageHeader() {
     Statistics<?> statistics = Statistics.getStatsByType(PageHeaderTest.DATA_TYPE);
-    statistics.setEmpty(false);
+    statistics.update(1L,1L);
     return new PageHeader(PageHeaderTest.UNCOMPRESSED_SIZE,
         PageHeaderTest.COMPRESSED_SIZE, statistics);
   }
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/Utils.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/Utils.java
index 09ef7d8..2084fcc 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/Utils.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/Utils.java
@@ -227,9 +227,7 @@ public class Utils {
       if (!statistics1.isEmpty() && !statistics2.isEmpty()) {
         assertEquals(statistics1.getMinValue(), statistics2.getMinValue());
         assertEquals(statistics1.getMaxValue(), statistics2.getMaxValue());
-        assertEquals(statistics1.getFirstValue(), statistics2.getFirstValue());
         assertEquals(statistics1.getSumValue(), statistics2.getSumValue(), maxError);
-        assertEquals(statistics1.getLastValue(), statistics2.getLastValue());
       }
     }
   }
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileIOWriterTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileIOWriterTest.java
index cfde477..66df4b9 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileIOWriterTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileIOWriterTest.java
@@ -54,7 +54,7 @@ public class TsFileIOWriterTest {
 
     // chunk statistics
     Statistics statistics = Statistics.getStatsByType(measurementSchema.getType());
-    statistics.updateStats(0L, 0L);
+    statistics.update(0L, 0L);
 
     // chunk group 1
     writer.startChunkGroup(deviceId);