private Optional<ConnectorTableExecuteHandle> getTableHandleForOptimize(
      IcebergTableHandle tableHandle, Map<String, Object> executeProperties, RetryMode retryMode) {
    DataSize maxScannedFileSize = (DataSize) executeProperties.get("file_size_threshold");

    return Optional.of(
        new IcebergTableExecuteHandle(
            tableHandle.getSchemaTableName(),
            OPTIMIZE,
            new IcebergOptimizeHandle(
                tableHandle.getSnapshotId(),
                tableHandle.getTableSchemaJson(),
                tableHandle
                    .getPartitionSpecJson()
                    .orElseThrow(
                        () -> new VerifyException("Partition spec missing in the table handle")),
                getColumns(SchemaParser.fromJson(tableHandle.getTableSchemaJson()), typeManager),
                getFileFormat(tableHandle.getStorageProperties()),
                tableHandle.getStorageProperties(),
                maxScannedFileSize,
                retryMode != NO_RETRIES),
            tableHandle.getTableLocation()));
  }
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