public static AbstractOptimizingPlanner createOptimizingPlanner(
      DefaultTableRuntime tableRuntime,
      MixedTable table,
      double availableCore,
      long maxInputSizePerThread) {
    DefaultOptimizingState optimizingState = tableRuntime.getOptimizingState();
    Expression partitionFilter =
        optimizingState.getPendingInput() == null
            ? Expressions.alwaysTrue()
            : tableRuntime.getOptimizingState().getPendingInput().getPartitions().entrySet()
                .stream()
                .map(
                    entry ->
                        ExpressionUtil.convertPartitionDataToDataFilter(
                            table, entry.getKey(), entry.getValue()))
                .reduce(Expressions::or)
                .orElse(Expressions.alwaysTrue());
    long planTime = System.currentTimeMillis();
    long processId = Math.max(optimizingState.getNewestProcessId() + 1, planTime);
    ServerTableIdentifier identifier = tableRuntime.getTableIdentifier();
    OptimizingConfig config = optimizingState.getOptimizingConfig();
    long lastMinor = optimizingState.getLastMinorOptimizingTime();
    long lastFull = optimizingState.getLastFullOptimizingTime();
    TableSnapshot snapshot = IcebergTableUtil.getSnapshot(table, tableRuntime);
    if (TableFormat.ICEBERG.equals(table.format())) {
      return new IcebergOptimizingPlanner(
          identifier,
          config,
          table,
          snapshot,
          partitionFilter,
          processId,
          availableCore,
          maxInputSizePerThread,
          lastMinor,
          lastFull);
    } else if (TableFormat.MIXED_ICEBERG.equals(table.format())) {
      return new MixedIcebergOptimizingPlanner(
          identifier,
          config,
          table,
          snapshot,
          partitionFilter,
          processId,
          availableCore,
          maxInputSizePerThread,
          lastMinor,
          lastFull);
    } else if (TableFormat.MIXED_HIVE.equals(table.format())) {
      return new MixedHiveOptimizingPlanner(
          identifier,
          config,
          table,
          snapshot,
          partitionFilter,
          processId,
          availableCore,
          maxInputSizePerThread,
          lastMinor,
          lastFull);
    }
    throw new IllegalStateException("Unsupported table format:" + table.format().toString());
  }
Fetch all manifest files of an Iceberg Table

@param table An iceberg table, or maybe base store or change store of mixed-iceberg format.
@return Path set of all valid manifest files.
amoro-ams/src/main/java/org/apache/amoro/server/utils/IcebergTableUtil.java