private boolean writeColStats(List<ColumnStatistics> colStats, Table tbl) {
    try {
      if (!shouldRewriteColStats(tbl)) {
        checkAndMergeColStats(colStats, tbl);
      }
      StatisticsFile statisticsFile;
      String statsPath = tbl.location() + STATS + UUID.randomUUID();

      try (PuffinWriter puffinWriter = Puffin.write(tbl.io().newOutputFile(statsPath))
          .createdBy(Constants.HIVE_ENGINE).build()) {
        long snapshotId = tbl.currentSnapshot().snapshotId();
        long snapshotSequenceNumber = tbl.currentSnapshot().sequenceNumber();

        colStats.forEach(statsObj -> {
          byte[] serializeColStats = SerializationUtils.serialize(statsObj);
          puffinWriter.add(
            new Blob(
              ColumnStatisticsObj.class.getSimpleName(),
              ImmutableList.of(1),
              snapshotId,
              snapshotSequenceNumber,
              ByteBuffer.wrap(serializeColStats),
              PuffinCompressionCodec.NONE,
              ImmutableMap.of("partition",
                  String.valueOf(statsObj.getStatsDesc().getPartName()))
            ));
        });
        puffinWriter.finish();

        statisticsFile =
            new GenericStatisticsFile(
                snapshotId,
                statsPath,
                puffinWriter.fileSize(),
                puffinWriter.footerSize(),
                puffinWriter.writtenBlobsMetadata().stream()
                    .map(GenericBlobMetadata::from)
                    .collect(ImmutableList.toImmutableList())
            );
      } catch (IOException e) {
        LOG.warn("Unable to write stats to puffin file {}", e.getMessage());
        return false;
      }
      tbl.updateStatistics()
          .setStatistics(statisticsFile.snapshotId(), statisticsFile)
          .commit();
      return true;

    } catch (Exception e) {
      LOG.warn("Unable to invalidate or merge stats: {}", e.getMessage());
    }
    return false;
  }
@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