@Override
  public Iterator<TableColumnsMetadata> streamTableColumns(
      ConnectorSession session, SchemaTablePrefix prefix) {
    requireNonNull(prefix, "prefix is null");
    List<SchemaTableName> schemaTableNames;
    if (prefix.getTable().isEmpty()) {
      schemaTableNames = catalog.listTables(session, prefix.getSchema());
    } else {
      schemaTableNames = ImmutableList.of(prefix.toSchemaTableName());
    }
    return schemaTableNames.stream()
        .flatMap(
            tableName -> {
              try {
                if (redirectTable(session, tableName).isPresent()) {
                  return Stream.of(TableColumnsMetadata.forRedirectedTable(tableName));
                }

                Table icebergTable = loadTable(session, tableName);
                List<ColumnMetadata> columns = getColumnMetadatas(icebergTable.schema());
                return Stream.of(TableColumnsMetadata.forTable(tableName, columns));
              } catch (TableNotFoundException e) {
                // Table disappeared during listing operation
                return Stream.empty();
              } catch (UnknownTableTypeException e) {
                // Skip unsupported table type in case that the table redirects are not enabled
                return Stream.empty();
              } catch (RuntimeException e) {
                // Table can be being removed and this may cause all sorts of exceptions.
                // Log, because we're catching broadly.
                log.warn(
                    e,
                    "Failed to access metadata of table %s during streaming table columns for %s",
                    tableName,
                    prefix);
                return Stream.empty();
              }
            })
        .iterator();
  }
Iceberg original metadata has some problems for mixed-format table, such as iceberg version,
table type. So copy from IcebergMetadata and made some change
amoro-format-mixed/amoro-mixed-trino/src/main/java/org/apache/amoro/trino/unkeyed/IcebergMetadata.java