private CloseableIterable<MixedFileScanTask> planChangeFiles() {
    StructLikeMap<Long> partitionOptimizedSequence = MixedTableUtil.readOptimizedSequence(table);
    Expression partitionExpressions = Expressions.alwaysTrue();
    if (expression != null) {
      // Only push down filters related to partition
      partitionExpressions = new BasicPartitionEvaluator(table.spec()).project(expression);
    }

    ChangeTableIncrementalScan changeTableScan =
        table.changeTable().newScan().fromSequence(partitionOptimizedSequence);

    changeTableScan = changeTableScan.filter(partitionExpressions);

    return CloseableIterable.transform(changeTableScan.planFiles(), s -> (MixedFileScanTask) s);
  }
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