public CloseableIterable<T> readData(FileScanTask task) {

    Map<Integer, ?> idToConstant =
        DataReaderCommon.getIdToConstant(task, projectedSchema, convertConstant);

    DeleteFilter<T> deleteFilter =
        new GenericDeleteFilter(task, tableSchema, projectedSchema, structLikeCollections);

    CloseableIterable<T> iterable =
        deleteFilter.filter(newIterable(task, deleteFilter.requiredSchema(), idToConstant));

    if (dataNodeFilter != null) {
      return dataNodeFilter.filter(iterable);
    }

    return iterable;
  }
Abstract implementation of iceberg data reader consuming {@link MixedFileScanTask}.

@param <T> to indicate the record data type.
amoro-format-iceberg/src/main/java/org/apache/amoro/io/reader/AbstractUnkeyedDataReader.java