@Override
  public ConnectorAnalyzeMetadata getStatisticsCollectionMetadata(
      ConnectorSession session,
      ConnectorTableHandle tableHandle,
      Map<String, Object> analyzeProperties) {
    if (!isExtendedStatisticsEnabled(session)) {
      throw new TrinoException(
          NOT_SUPPORTED,
          "Analyze is not enabled. You can enable analyze using %s config or %s catalog session property"
              .formatted(
                  IcebergConfig.EXTENDED_STATISTICS_CONFIG,
                  IcebergSessionProperties.EXTENDED_STATISTICS_ENABLED));
    }

    IcebergTableHandle handle = (IcebergTableHandle) tableHandle;
    checkArgument(
        handle.getTableType() == DATA, "Cannot analyze non-DATA table: %s", handle.getTableType());

    if (handle.getSnapshotId().isEmpty()) {
      // No snapshot, table is empty
      return new ConnectorAnalyzeMetadata(tableHandle, TableStatisticsMetadata.empty());
    }

    ConnectorTableMetadata tableMetadata = getTableMetadata(session, handle);
    Set<String> allScalarColumnNames =
        tableMetadata.getColumns().stream()
            .filter(column -> !column.isHidden())
            .filter(column -> column.getType().getTypeParameters().isEmpty()) // is scalar type
            .map(ColumnMetadata::getName)
            .collect(toImmutableSet());

    Set<String> analyzeColumnNames =
        getColumnNames(analyzeProperties)
            .map(
                columnNames -> {
                  // validate that proper column names are passed via `columns` analyze property
                  if (columnNames.isEmpty()) {
                    throw new TrinoException(
                        INVALID_ANALYZE_PROPERTY,
                        "Cannot specify empty list of columns for analysis");
                  }
                  if (!allScalarColumnNames.containsAll(columnNames)) {
                    throw new TrinoException(
                        INVALID_ANALYZE_PROPERTY,
                        format(
                            "Invalid columns specified for analysis: %s",
                            Sets.difference(columnNames, allScalarColumnNames)));
                  }
                  return columnNames;
                })
            .orElse(allScalarColumnNames);

    Set<ColumnStatisticMetadata> columnStatistics =
        tableMetadata.getColumns().stream()
            .filter(column -> analyzeColumnNames.contains(column.getName()))
            .map(
                column ->
                    new ColumnStatisticMetadata(
                        column.getName(),
                        NUMBER_OF_DISTINCT_VALUES_NAME,
                        NUMBER_OF_DISTINCT_VALUES_FUNCTION))
            .collect(toImmutableSet());

    return new ConnectorAnalyzeMetadata(
        tableHandle,
        new TableStatisticsMetadata(columnStatistics, ImmutableSet.of(), ImmutableList.of()));
  }
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