public static BaseAndChangeTask ofIceberg(CloseableIterable<FileScanTask> tasks) {
      try (CloseableIterator<FileScanTask> tasksIterator = tasks.iterator()) {
        Map<Long, TransactionTask> transactionTasks = new HashMap<>();
        long startTime = System.currentTimeMillis();
        int count = 0;
        while (tasksIterator.hasNext()) {
          count++;
          MixedFileScanTask fileScanTask = (MixedFileScanTask) tasksIterator.next();
          if (fileScanTask.file().type().equals(DataFileType.INSERT_FILE)) {
            taskMap(Collections.singleton(fileScanTask), true, transactionTasks);
          } else if (fileScanTask.file().type().equals(DataFileType.EQ_DELETE_FILE)) {
            taskMap(Collections.singleton(fileScanTask), false, transactionTasks);
          } else {
            throw new IllegalArgumentException(
                String.format(
                    "DataFileType %s is not supported during change log reading period.",
                    fileScanTask.file().type()));
          }
        }
        LOG.info(
            "Read {} change log from {} in {} ms",
            count,
            tasksIterator.getClass(),
            System.currentTimeMillis() - startTime);
        return new BaseAndChangeTask(Collections.emptySet(), transactionTasks);
      } catch (IOException e) {
        throw new UncheckedIOException(e);
      }
    }
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