private CloseableIterable<MixedFileScanTask> planBaseFiles() {
    TableScan scan = table.baseTable().newScan();
    if (this.expression != null) {
      scan = scan.filter(this.expression);
    }
    CloseableIterable<FileScanTask> fileScanTasks = scan.planFiles();
    return CloseableIterable.transform(
        fileScanTasks,
        fileScanTask ->
            new BasicMixedFileScanTask(
                DefaultKeyedFile.parseBase(fileScanTask.file()),
                fileScanTask.deletes(),
                fileScanTask.spec(),
                expression));
  }
Config this scan with filter by the {@link Expression}. For Change Table, only filters related
to partition will take effect.

@param expr a filter expression
@return scan based on this with results filtered by the expression
amoro-format-iceberg/src/main/java/org/apache/amoro/scan/BasicKeyedTableScan.java