private List<ColumnStatistics> readColStats(Table table, Path statsPath, Set<String> partNames) {
    List<ColumnStatistics> colStats = Lists.newArrayList();

    try (PuffinReader reader = Puffin.read(table.io().newInputFile(statsPath.toString())).build()) {
      List<BlobMetadata> blobMetadata = reader.fileMetadata().blobs();

      if (partNames != null) {
        blobMetadata = blobMetadata.stream()
            .filter(metadata -> partNames.contains(metadata.properties().get("partition")))
            .collect(Collectors.toList());
      }
      Iterator<ByteBuffer> it = Iterables.transform(reader.readAll(blobMetadata), Pair::second).iterator();
      LOG.info("Using col stats from : {}", statsPath);

      while (it.hasNext()) {
        byte[] byteBuffer = ByteBuffers.toByteArray(it.next());
        colStats.add(SerializationUtils.deserialize(byteBuffer));
      }
    } catch (Exception e) {
      LOG.warn(" Unable to read col stats: ", e);
    }
    return colStats;
  }
@param jobConf Job configuration for InputFormat to access
@param deserializer Deserializer
@param exprNodeDesc Filter expression extracted by Hive
@return Entire filter to take advantage of Hive's pruning as well as Iceberg's pruning.
iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergStorageHandler.java