public static IDataBlockReader constructReader(
      IDeviceID deviceId,
      List<String> measurementIds,
      List<IMeasurementSchema> measurementSchemas,
      List<String> allSensors,
      FragmentInstanceContext fragmentInstanceContext,
      QueryDataSource queryDataSource,
      boolean isAlign) {
    IFullPath seriesPath;
    if (isAlign) {
      seriesPath = new AlignedFullPath(deviceId, measurementIds, measurementSchemas);
    } else {
      seriesPath = new NonAlignedFullPath(deviceId, measurementSchemas.get(0));
    }
    return new SeriesDataBlockReader(
        seriesPath, new HashSet<>(allSensors), fragmentInstanceContext, queryDataSource, true);
  }
Construct series data block reader.

@param measurementIds if device is aligned, then measurementIds contain all measurements. If
    device is not aligned, then measurementIds only contain one measurement.
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/ReadPointCompactionPerformer.java