private void executeExpireSnapshots(
      ConnectorSession session, IcebergTableExecuteHandle executeHandle) {
    IcebergExpireSnapshotsHandle expireSnapshotsHandle =
        (IcebergExpireSnapshotsHandle) executeHandle.getProcedureHandle();

    Table table = loadTable(session, executeHandle.getSchemaTableName());
    Duration retention =
        requireNonNull(expireSnapshotsHandle.getRetentionThreshold(), "retention is null");
    validateTableExecuteParameters(
        table,
        executeHandle.getSchemaTableName(),
        EXPIRE_SNAPSHOTS.name(),
        retention,
        getExpireSnapshotMinRetention(session),
        IcebergConfig.EXPIRE_SNAPSHOTS_MIN_RETENTION,
        IcebergSessionProperties.EXPIRE_SNAPSHOTS_MIN_RETENTION);

    long expireTimestampMillis = session.getStart().toEpochMilli() - retention.toMillis();
    TrinoFileSystem fileSystem = fileSystemFactory.create(session);
    List<String> pathsToDelete = new ArrayList<>();
    // deleteFunction is not accessed from multiple threads unless .executeDeleteWith() is used
    Consumer<String> deleteFunction =
        path -> {
          pathsToDelete.add(path);
          if (pathsToDelete.size() == DELETE_BATCH_SIZE) {
            try {
              fileSystem.deleteFiles(pathsToDelete);
              pathsToDelete.clear();
            } catch (IOException e) {
              throw new TrinoException(
                  ICEBERG_FILESYSTEM_ERROR, "Failed to delete files during snapshot expiration", e);
            }
          }
        };

    table
        .expireSnapshots()
        .expireOlderThan(expireTimestampMillis)
        .deleteWith(deleteFunction)
        .commit();
    try {
      fileSystem.deleteFiles(pathsToDelete);
    } catch (IOException e) {
      throw new TrinoException(
          ICEBERG_FILESYSTEM_ERROR, "Failed to delete files during snapshot expiration", e);
    }
  }
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