@Override
  public Optional<ConnectorTableExecuteHandle> getTableHandleForExecute(
      ConnectorSession session,
      ConnectorTableHandle connectorTableHandle,
      String procedureName,
      Map<String, Object> executeProperties,
      RetryMode retryMode) {
    IcebergTableHandle tableHandle = (IcebergTableHandle) connectorTableHandle;
    checkArgument(
        tableHandle.getTableType() == DATA,
        "Cannot execute table procedure %s on non-DATA table: %s",
        procedureName,
        tableHandle.getTableType());
    Table icebergTable = loadTable(session, tableHandle.getSchemaTableName());
    if (tableHandle.getSnapshotId().isPresent()
        && (tableHandle.getSnapshotId().get() != icebergTable.currentSnapshot().snapshotId())) {
      throw new TrinoException(
          NOT_SUPPORTED,
          "Cannot execute table procedure %s on old snapshot %s"
              .formatted(procedureName, tableHandle.getSnapshotId().get()));
    }

    IcebergTableProcedureId procedureId;
    try {
      procedureId = IcebergTableProcedureId.valueOf(procedureName);
    } catch (IllegalArgumentException e) {
      throw new IllegalArgumentException("Unknown procedure '" + procedureName + "'");
    }

    return switch (procedureId) {
      case OPTIMIZE -> getTableHandleForOptimize(tableHandle, executeProperties, retryMode);
      case DROP_EXTENDED_STATS -> getTableHandleForDropExtendedStats(session, tableHandle);
      case EXPIRE_SNAPSHOTS -> getTableHandleForExpireSnapshots(
          session, tableHandle, executeProperties);
      case REMOVE_ORPHAN_FILES -> getTableHandleForRemoveOrphanFiles(
          session, tableHandle, executeProperties);
    };
  }
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