private static Optional<Types.NestedField> filterField(
      Types.NestedField field, Set<Integer> requestedFieldIds) {
    Type fieldType = field.type();
    if (requestedFieldIds.contains(field.fieldId())) {
      return Optional.of(field);
    }

    if (fieldType.isStructType()) {
      List<Types.NestedField> requiredChildren =
          filterFieldList(fieldType.asStructType().fields(), requestedFieldIds);
      if (requiredChildren.isEmpty()) {
        return Optional.empty();
      }
      return Optional.of(
          Types.NestedField.of(
              field.fieldId(),
              field.isOptional(),
              field.name(),
              Types.StructType.of(requiredChildren),
              field.doc()));
    }

    return Optional.empty();
  }
Iceberg original TrinoDeleteFilter has some problems for mixed-format table, such as iceberg
version, table type.
amoro-format-mixed/amoro-mixed-trino/src/main/java/org/apache/amoro/trino/unkeyed/TrinoDeleteFilter.java