@Override
  public AggrStats getAggrColStatsFor(org.apache.hadoop.hive.ql.metadata.Table hmsTable, List<String> colNames,
        List<String> partNames) throws MetaException {
    Table table = IcebergTableUtil.getTable(conf, hmsTable.getTTable());

    Snapshot snapshot = IcebergTableUtil.getTableSnapshot(table, hmsTable);
    if (snapshot == null) {
      return new AggrStats(Collections.emptyList(), 0);
    }

    boolean useDensityFunctionForNDVEstimation = MetastoreConf.getBoolVar(getConf(),
        MetastoreConf.ConfVars.STATS_NDV_DENSITY_FUNCTION);
    double ndvTuner = MetastoreConf.getDoubleVar(getConf(), MetastoreConf.ConfVars.STATS_NDV_TUNER);

    List<ColumnStatistics> partStats = IcebergTableUtil.getColStatsPath(table, snapshot.snapshotId())
        .map(statsPath -> readColStats(table, statsPath, Sets.newHashSet(partNames)))
        .orElse(Collections.emptyList());

    partStats.forEach(colStats ->
        colStats.getStatsObj().removeIf(statsObj -> !colNames.contains(statsObj.getColName())));

    List<ColumnStatisticsObj> colStatsList = MetaStoreServerUtils.aggrPartitionStats(partStats,
        MetaStoreUtils.getDefaultCatalog(conf), hmsTable.getDbName(), hmsTable.getTableName(),
        partNames, colNames,
        partStats.size() == partNames.size(),
        useDensityFunctionForNDVEstimation, ndvTuner);

    return new AggrStats(colStatsList, partStats.size());
  }
@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