@Override
  public Iterator<TableColumnsMetadata> streamTableColumns(
      ConnectorSession session, SchemaTablePrefix prefix) {
    if (prefix.getTable().isPresent()) {
      MixedTable mixedTable;
      try {
        mixedTable =
            getMixedTable(new SchemaTableName(prefix.getSchema().get(), prefix.getTable().get()));
      } catch (NoSuchTableException e) {
        List<TableColumnsMetadata> schemaTableNames = ImmutableList.of();
        return schemaTableNames.iterator();
      }
      if (mixedTable.isKeyedTable()) {
        return keyedConnectorMetadata.streamTableColumns(session, prefix);
      } else {
        return icebergMetadata.streamTableColumns(session, prefix);
      }
    } else {
      return Iterators.concat(
          keyedConnectorMetadata.streamTableColumns(session, prefix),
          icebergMetadata.streamTableColumns(session, prefix));
    }
  }
{@link MixedFormatConnectorMetadata} is a Union {@link ConnectorMetadata} contain {@link
KeyedConnectorMetadata} and {@link IcebergMetadata}. This is final {@link ConnectorMetadata}
provided to Trino
amoro-format-mixed/amoro-mixed-trino/src/main/java/org/apache/amoro/trino/MixedFormatConnectorMetadata.java