public static List<MixedFormatSplit> mergeOnReadPlan(
      KeyedTable keyedTable, List<Expression> filters, AtomicInteger splitCount) {
    KeyedTableScan keyedTableScan = keyedTable.newScan();
    if (filters != null) {
      filters.forEach(keyedTableScan::filter);
    }
    CloseableIterable<CombinedScanTask> combinedScanTasks = keyedTableScan.planTasks();
    List<MixedFormatSplit> morSplits = Lists.newArrayList();
    try (CloseableIterator<CombinedScanTask> initTasks = combinedScanTasks.iterator()) {

      while (initTasks.hasNext()) {
        CombinedScanTask combinedScanTask = initTasks.next();
        combinedScanTask
            .tasks()
            .forEach(
                keyedTableScanTask ->
                    morSplits.add(new MergeOnReadSplit(splitCount.get(), keyedTableScanTask)));
      }
    } catch (IOException e) {
      throw new UncheckedIOException(e);
    }
    return morSplits;
  }
Plans full table scanning for a {@link KeyedTable} with optional filters and a specified split
count.

@param keyedTable The {@link KeyedTable} to scan.
@param filters Optional list of filters to apply to the scan.
@param splitCount The atomic integer to track the split count.
@return The list of planned {@link MixedFormatSplit} included {@link MergeOnReadSplit}.
amoro-format-mixed/amoro-mixed-flink/amoro-mixed-flink-common/src/main/java/org/apache/amoro/flink/read/FlinkSplitPlanner.java