You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2022/11/27 03:16:10 UTC

[iotdb] 01/03: [IOTDB-5050] Try to make TsBlock returned by ScanOperator larger

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

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

commit 10105f484aab908b85cf23d9f570f2fe341fe2d3
Author: JackieTien97 <ja...@gmail.com>
AuthorDate: Sat Nov 26 20:12:03 2022 +0800

    [IOTDB-5050] Try to make TsBlock returned by ScanOperator larger
---
 .../operator/source/AlignedSeriesScanOperator.java | 110 ++++++++++++++-------
 .../operator/source/SeriesScanOperator.java        | 105 +++++++++++++-------
 .../apache/iotdb/db/utils/ErrorHandlingUtils.java  |   4 +-
 .../read/common/block/column/BinaryColumn.java     |   9 --
 .../read/common/block/column/BooleanColumn.java    |   9 --
 .../read/common/block/column/DoubleColumn.java     |   9 --
 .../read/common/block/column/FloatColumn.java      |   9 --
 .../tsfile/read/common/block/column/IntColumn.java |   9 --
 .../read/common/block/column/LongColumn.java       |   9 --
 .../block/column/RunLengthEncodedColumn.java       |  15 ---
 .../read/common/block/column/TimeColumn.java       |   7 --
 11 files changed, 141 insertions(+), 154 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/AlignedSeriesScanOperator.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/AlignedSeriesScanOperator.java
index 8406437802..8eb1d44925 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/AlignedSeriesScanOperator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/AlignedSeriesScanOperator.java
@@ -24,18 +24,24 @@ import org.apache.iotdb.db.mpp.execution.operator.OperatorContext;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeId;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
 import org.apache.iotdb.tsfile.read.common.block.TsBlock;
+import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.Column;
+import org.apache.iotdb.tsfile.read.common.block.column.ColumnBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.TimeColumn;
+import org.apache.iotdb.tsfile.read.common.block.column.TimeColumnBuilder;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 
 import java.io.IOException;
 import java.util.HashSet;
+import java.util.concurrent.TimeUnit;
 
 public class AlignedSeriesScanOperator implements DataSourceOperator {
 
   private final OperatorContext operatorContext;
   private final AlignedSeriesScanUtil seriesScanUtil;
   private final PlanNodeId sourceId;
-  private TsBlock tsBlock;
-  private boolean hasCachedTsBlock = false;
+
+  private final TsBlockBuilder builder;
   private boolean finished = false;
 
   private final long maxReturnSize;
@@ -61,6 +67,7 @@ public class AlignedSeriesScanOperator implements DataSourceOperator {
     this.maxReturnSize =
         (1L + seriesPath.getMeasurementList().size())
             * TSFileDescriptor.getInstance().getConfig().getPageSizeInByte();
+    this.builder = new TsBlockBuilder(seriesScanUtil.getTsDataTypeList());
   }
 
   @Override
@@ -70,49 +77,48 @@ public class AlignedSeriesScanOperator implements DataSourceOperator {
 
   @Override
   public TsBlock next() {
-    if (hasCachedTsBlock || hasNext()) {
-      hasCachedTsBlock = false;
-      TsBlock res = tsBlock;
-      tsBlock = null;
-      return res;
-    }
-    throw new IllegalStateException("no next batch");
+    TsBlock block = builder.build();
+    builder.reset();
+    return block;
   }
 
   @Override
   public boolean hasNext() {
-
     try {
-      if (hasCachedTsBlock) {
-        return true;
-      }
-
-      /*
-       * consume page data firstly
-       */
-      if (readPageData()) {
-        hasCachedTsBlock = true;
-        return true;
-      }
 
-      /*
-       * consume chunk data secondly
-       */
-      if (readChunkData()) {
-        hasCachedTsBlock = true;
-        return true;
-      }
+      // start stopwatch
+      long maxRuntime = operatorContext.getMaxRunTime().roundTo(TimeUnit.NANOSECONDS);
+      long start = System.nanoTime();
+
+      // here use do-while to promise doing this at least once
+      do {
+        /*
+         * consume page data firstly
+         */
+        if (readPageData()) {
+          continue;
+        }
 
-      /*
-       * consume next file finally
-       */
-      while (seriesScanUtil.hasNextFile()) {
+        /*
+         * consume chunk data secondly
+         */
         if (readChunkData()) {
-          hasCachedTsBlock = true;
-          return true;
+          continue;
         }
-      }
-      return hasCachedTsBlock;
+
+        /*
+         * consume next file finally
+         */
+        if (readFileData()) {
+          continue;
+        }
+        break;
+
+      } while (System.nanoTime() - start < maxRuntime && !builder.isFull());
+
+      finished = builder.isEmpty();
+
+      return !finished;
     } catch (IOException e) {
       throw new RuntimeException("Error happened while scanning the file", e);
     }
@@ -120,7 +126,7 @@ public class AlignedSeriesScanOperator implements DataSourceOperator {
 
   @Override
   public boolean isFinished() {
-    return finished || (finished = !hasNext());
+    return finished;
   }
 
   @Override
@@ -138,6 +144,15 @@ public class AlignedSeriesScanOperator implements DataSourceOperator {
     return 0L;
   }
 
+  private boolean readFileData() throws IOException {
+    while (seriesScanUtil.hasNextFile()) {
+      if (readChunkData()) {
+        return true;
+      }
+    }
+    return false;
+  }
+
   private boolean readChunkData() throws IOException {
     while (seriesScanUtil.hasNextChunk()) {
       if (readPageData()) {
@@ -149,14 +164,33 @@ public class AlignedSeriesScanOperator implements DataSourceOperator {
 
   private boolean readPageData() throws IOException {
     while (seriesScanUtil.hasNextPage()) {
-      tsBlock = seriesScanUtil.nextPage();
+      TsBlock tsBlock = seriesScanUtil.nextPage();
       if (!isEmpty(tsBlock)) {
+        appendToBuilder(tsBlock);
         return true;
       }
     }
     return false;
   }
 
+  private void appendToBuilder(TsBlock tsBlock) {
+    int size = tsBlock.getPositionCount();
+    TimeColumnBuilder timeColumnBuilder = builder.getTimeColumnBuilder();
+    TimeColumn timeColumn = tsBlock.getTimeColumn();
+    for (int i = 0; i < size; i++) {
+      timeColumnBuilder.writeLong(timeColumn.getLong(i));
+    }
+    for (int columnIndex = 0, columnSize = tsBlock.getValueColumnCount();
+        columnIndex < columnSize;
+        columnIndex++) {
+      ColumnBuilder columnBuilder = builder.getColumnBuilder(columnIndex);
+      Column column = tsBlock.getColumn(columnIndex);
+      for (int i = 0; i < size; i++) {
+        columnBuilder.write(column, i);
+      }
+    }
+  }
+
   private boolean isEmpty(TsBlock tsBlock) {
     return tsBlock == null || tsBlock.isEmpty();
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanOperator.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanOperator.java
index 05685f758d..d20ea48b2d 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanOperator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanOperator.java
@@ -25,18 +25,24 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeId;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.block.TsBlock;
+import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.Column;
+import org.apache.iotdb.tsfile.read.common.block.column.ColumnBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.TimeColumn;
+import org.apache.iotdb.tsfile.read.common.block.column.TimeColumnBuilder;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 
 import java.io.IOException;
 import java.util.Set;
+import java.util.concurrent.TimeUnit;
 
 public class SeriesScanOperator implements DataSourceOperator {
 
   private final OperatorContext operatorContext;
   private final SeriesScanUtil seriesScanUtil;
   private final PlanNodeId sourceId;
-  private TsBlock tsBlock;
-  private boolean hasCachedTsBlock = false;
+  private final TsBlockBuilder builder;
+
   private boolean finished = false;
 
   private final long maxReturnSize;
@@ -62,6 +68,7 @@ public class SeriesScanOperator implements DataSourceOperator {
             valueFilter,
             ascending);
     this.maxReturnSize = TSFileDescriptor.getInstance().getConfig().getPageSizeInByte();
+    this.builder = new TsBlockBuilder(seriesScanUtil.getTsDataTypeList());
   }
 
   @Override
@@ -71,49 +78,48 @@ public class SeriesScanOperator implements DataSourceOperator {
 
   @Override
   public TsBlock next() {
-    if (hasCachedTsBlock || hasNext()) {
-      hasCachedTsBlock = false;
-      TsBlock res = tsBlock;
-      tsBlock = null;
-      return res;
-    }
-    throw new IllegalStateException("no next batch");
+    TsBlock block = builder.build();
+    builder.reset();
+    return block;
   }
 
   @Override
   public boolean hasNext() {
-
     try {
-      if (hasCachedTsBlock) {
-        return true;
-      }
-
-      /*
-       * consume page data firstly
-       */
-      if (readPageData()) {
-        hasCachedTsBlock = true;
-        return true;
-      }
 
-      /*
-       * consume chunk data secondly
-       */
-      if (readChunkData()) {
-        hasCachedTsBlock = true;
-        return true;
-      }
+      // start stopwatch
+      long maxRuntime = operatorContext.getMaxRunTime().roundTo(TimeUnit.NANOSECONDS);
+      long start = System.nanoTime();
+
+      // here use do-while to promise doing this at least once
+      do {
+        /*
+         * consume page data firstly
+         */
+        if (readPageData()) {
+          continue;
+        }
 
-      /*
-       * consume next file finally
-       */
-      while (seriesScanUtil.hasNextFile()) {
+        /*
+         * consume chunk data secondly
+         */
         if (readChunkData()) {
-          hasCachedTsBlock = true;
-          return true;
+          continue;
         }
-      }
-      return hasCachedTsBlock;
+
+        /*
+         * consume next file finally
+         */
+        if (readFileData()) {
+          continue;
+        }
+        break;
+
+      } while (System.nanoTime() - start < maxRuntime && !builder.isFull());
+
+      finished = builder.isEmpty();
+
+      return !finished;
     } catch (IOException e) {
       throw new RuntimeException("Error happened while scanning the file", e);
     }
@@ -121,7 +127,7 @@ public class SeriesScanOperator implements DataSourceOperator {
 
   @Override
   public boolean isFinished() {
-    return finished || (finished = !hasNext());
+    return finished;
   }
 
   @Override
@@ -139,6 +145,15 @@ public class SeriesScanOperator implements DataSourceOperator {
     return 0L;
   }
 
+  private boolean readFileData() throws IOException {
+    while (seriesScanUtil.hasNextFile()) {
+      if (readChunkData()) {
+        return true;
+      }
+    }
+    return false;
+  }
+
   private boolean readChunkData() throws IOException {
     while (seriesScanUtil.hasNextChunk()) {
       if (readPageData()) {
@@ -150,14 +165,28 @@ public class SeriesScanOperator implements DataSourceOperator {
 
   private boolean readPageData() throws IOException {
     while (seriesScanUtil.hasNextPage()) {
-      tsBlock = seriesScanUtil.nextPage();
+      TsBlock tsBlock = seriesScanUtil.nextPage();
+
       if (!isEmpty(tsBlock)) {
+        appendToBuilder(tsBlock);
         return true;
       }
     }
     return false;
   }
 
+  private void appendToBuilder(TsBlock tsBlock) {
+    TimeColumnBuilder timeColumnBuilder = builder.getTimeColumnBuilder();
+    TimeColumn timeColumn = tsBlock.getTimeColumn();
+    ColumnBuilder columnBuilder = builder.getColumnBuilder(0);
+    Column column = tsBlock.getColumn(0);
+
+    for (int i = 0, size = tsBlock.getPositionCount(); i < size; i++) {
+      timeColumnBuilder.writeLong(timeColumn.getLong(i));
+      columnBuilder.write(column, i);
+    }
+  }
+
   private boolean isEmpty(TsBlock tsBlock) {
     return tsBlock == null || tsBlock.isEmpty();
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
index 782c990c59..c993bf74a0 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
@@ -85,9 +85,9 @@ public class ErrorHandlingUtils {
             String.format(
                 "Status code: %s, Query Statement: %s failed", status.getCode(), operation);
         if (status.getCode() == TSStatusCode.SQL_PARSE_ERROR.getStatusCode()) {
-          LOGGER.error(message);
+          LOGGER.warn(message);
         } else {
-          LOGGER.error(message, e);
+          LOGGER.warn(message, e);
         }
       }
       return status;
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/BinaryColumn.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/BinaryColumn.java
index 21d822da9d..85d910fd88 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/BinaryColumn.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/BinaryColumn.java
@@ -82,7 +82,6 @@ public class BinaryColumn implements Column {
 
   @Override
   public Binary getBinary(int position) {
-    checkReadablePosition(position);
     return values[position + arrayOffset];
   }
 
@@ -98,7 +97,6 @@ public class BinaryColumn implements Column {
 
   @Override
   public TsPrimitiveType getTsPrimitiveType(int position) {
-    checkReadablePosition(position);
     return new TsPrimitiveType.TsBinary(getBinary(position));
   }
 
@@ -109,7 +107,6 @@ public class BinaryColumn implements Column {
 
   @Override
   public boolean isNull(int position) {
-    checkReadablePosition(position);
     return valueIsNull != null && valueIsNull[position + arrayOffset];
   }
 
@@ -163,10 +160,4 @@ public class BinaryColumn implements Column {
       }
     }
   }
-
-  private void checkReadablePosition(int position) {
-    if (position < 0 || position >= getPositionCount()) {
-      throw new IllegalArgumentException("position is not valid");
-    }
-  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/BooleanColumn.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/BooleanColumn.java
index cf2e6a4f2d..5dc1d427b6 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/BooleanColumn.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/BooleanColumn.java
@@ -81,7 +81,6 @@ public class BooleanColumn implements Column {
 
   @Override
   public boolean getBoolean(int position) {
-    checkReadablePosition(position);
     return values[position + arrayOffset];
   }
 
@@ -97,7 +96,6 @@ public class BooleanColumn implements Column {
 
   @Override
   public TsPrimitiveType getTsPrimitiveType(int position) {
-    checkReadablePosition(position);
     return new TsPrimitiveType.TsBoolean(getBoolean(position));
   }
 
@@ -108,7 +106,6 @@ public class BooleanColumn implements Column {
 
   @Override
   public boolean isNull(int position) {
-    checkReadablePosition(position);
     return valueIsNull != null && valueIsNull[position + arrayOffset];
   }
 
@@ -162,10 +159,4 @@ public class BooleanColumn implements Column {
       }
     }
   }
-
-  private void checkReadablePosition(int position) {
-    if (position < 0 || position >= getPositionCount()) {
-      throw new IllegalArgumentException("position is not valid");
-    }
-  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/DoubleColumn.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/DoubleColumn.java
index cac26a14cc..9b13800838 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/DoubleColumn.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/DoubleColumn.java
@@ -81,7 +81,6 @@ public class DoubleColumn implements Column {
 
   @Override
   public double getDouble(int position) {
-    checkReadablePosition(position);
     return values[position + arrayOffset];
   }
 
@@ -97,7 +96,6 @@ public class DoubleColumn implements Column {
 
   @Override
   public TsPrimitiveType getTsPrimitiveType(int position) {
-    checkReadablePosition(position);
     return new TsPrimitiveType.TsDouble(getDouble(position));
   }
 
@@ -108,7 +106,6 @@ public class DoubleColumn implements Column {
 
   @Override
   public boolean isNull(int position) {
-    checkReadablePosition(position);
     return valueIsNull != null && valueIsNull[position + arrayOffset];
   }
 
@@ -162,10 +159,4 @@ public class DoubleColumn implements Column {
       }
     }
   }
-
-  private void checkReadablePosition(int position) {
-    if (position < 0 || position >= getPositionCount()) {
-      throw new IllegalArgumentException("position is not valid");
-    }
-  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/FloatColumn.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/FloatColumn.java
index 12c1178691..4d8f3e0440 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/FloatColumn.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/FloatColumn.java
@@ -80,7 +80,6 @@ public class FloatColumn implements Column {
 
   @Override
   public float getFloat(int position) {
-    checkReadablePosition(position);
     return values[position + arrayOffset];
   }
 
@@ -96,7 +95,6 @@ public class FloatColumn implements Column {
 
   @Override
   public TsPrimitiveType getTsPrimitiveType(int position) {
-    checkReadablePosition(position);
     return new TsPrimitiveType.TsFloat(getFloat(position));
   }
 
@@ -107,7 +105,6 @@ public class FloatColumn implements Column {
 
   @Override
   public boolean isNull(int position) {
-    checkReadablePosition(position);
     return valueIsNull != null && valueIsNull[position + arrayOffset];
   }
 
@@ -160,10 +157,4 @@ public class FloatColumn implements Column {
       }
     }
   }
-
-  private void checkReadablePosition(int position) {
-    if (position < 0 || position >= getPositionCount()) {
-      throw new IllegalArgumentException("position is not valid");
-    }
-  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/IntColumn.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/IntColumn.java
index 5a6a71ab60..120e4f44da 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/IntColumn.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/IntColumn.java
@@ -80,7 +80,6 @@ public class IntColumn implements Column {
 
   @Override
   public int getInt(int position) {
-    checkReadablePosition(position);
     return values[position + arrayOffset];
   }
 
@@ -96,7 +95,6 @@ public class IntColumn implements Column {
 
   @Override
   public TsPrimitiveType getTsPrimitiveType(int position) {
-    checkReadablePosition(position);
     return new TsPrimitiveType.TsInt(getInt(position));
   }
 
@@ -107,7 +105,6 @@ public class IntColumn implements Column {
 
   @Override
   public boolean isNull(int position) {
-    checkReadablePosition(position);
     return valueIsNull != null && valueIsNull[position + arrayOffset];
   }
 
@@ -160,10 +157,4 @@ public class IntColumn implements Column {
       }
     }
   }
-
-  private void checkReadablePosition(int position) {
-    if (position < 0 || position >= getPositionCount()) {
-      throw new IllegalArgumentException("position is not valid");
-    }
-  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/LongColumn.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/LongColumn.java
index 3eb65f3d04..b87b61d2b3 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/LongColumn.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/LongColumn.java
@@ -80,7 +80,6 @@ public class LongColumn implements Column {
 
   @Override
   public long getLong(int position) {
-    checkReadablePosition(position);
     return values[position + arrayOffset];
   }
 
@@ -96,7 +95,6 @@ public class LongColumn implements Column {
 
   @Override
   public TsPrimitiveType getTsPrimitiveType(int position) {
-    checkReadablePosition(position);
     return new TsPrimitiveType.TsLong(getLong(position));
   }
 
@@ -107,7 +105,6 @@ public class LongColumn implements Column {
 
   @Override
   public boolean isNull(int position) {
-    checkReadablePosition(position);
     return valueIsNull != null && valueIsNull[position + arrayOffset];
   }
 
@@ -160,10 +157,4 @@ public class LongColumn implements Column {
       }
     }
   }
-
-  private void checkReadablePosition(int position) {
-    if (position < 0 || position >= getPositionCount()) {
-      throw new IllegalArgumentException("position is not valid");
-    }
-  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/RunLengthEncodedColumn.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/RunLengthEncodedColumn.java
index 0446782087..b512b9f252 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/RunLengthEncodedColumn.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/RunLengthEncodedColumn.java
@@ -76,43 +76,36 @@ public class RunLengthEncodedColumn implements Column {
 
   @Override
   public boolean getBoolean(int position) {
-    checkReadablePosition(position);
     return value.getBoolean(0);
   }
 
   @Override
   public int getInt(int position) {
-    checkReadablePosition(position);
     return value.getInt(0);
   }
 
   @Override
   public long getLong(int position) {
-    checkReadablePosition(position);
     return value.getLong(0);
   }
 
   @Override
   public float getFloat(int position) {
-    checkReadablePosition(position);
     return value.getFloat(0);
   }
 
   @Override
   public double getDouble(int position) {
-    checkReadablePosition(position);
     return value.getDouble(0);
   }
 
   @Override
   public Binary getBinary(int position) {
-    checkReadablePosition(position);
     return value.getBinary(0);
   }
 
   @Override
   public Object getObject(int position) {
-    checkReadablePosition(position);
     return value.getObject(0);
   }
 
@@ -167,7 +160,6 @@ public class RunLengthEncodedColumn implements Column {
 
   @Override
   public TsPrimitiveType getTsPrimitiveType(int position) {
-    checkReadablePosition(position);
     return value.getTsPrimitiveType(0);
   }
 
@@ -178,7 +170,6 @@ public class RunLengthEncodedColumn implements Column {
 
   @Override
   public boolean isNull(int position) {
-    checkReadablePosition(position);
     return value.isNull(0);
   }
 
@@ -217,10 +208,4 @@ public class RunLengthEncodedColumn implements Column {
   public void reverse() {
     // do nothing because the underlying column has only one value
   }
-
-  private void checkReadablePosition(int position) {
-    if (position < 0 || position >= positionCount) {
-      throw new IllegalArgumentException("position is not valid");
-    }
-  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/TimeColumn.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/TimeColumn.java
index af7ba86808..df6232ed9f 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/TimeColumn.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/TimeColumn.java
@@ -71,7 +71,6 @@ public class TimeColumn implements Column {
 
   @Override
   public long getLong(int position) {
-    checkReadablePosition(position);
     return values[position + arrayOffset];
   }
 
@@ -143,10 +142,4 @@ public class TimeColumn implements Column {
   public long[] getTimes() {
     return values;
   }
-
-  private void checkReadablePosition(int position) {
-    if (position < 0 || position >= getPositionCount()) {
-      throw new IllegalArgumentException("position is not valid");
-    }
-  }
 }