@Override
  public MaterializedViewFreshness getMaterializedViewFreshness(
      ConnectorSession session, SchemaTableName materializedViewName) {
    Optional<ConnectorMaterializedViewDefinition> materializedViewDefinition =
        getMaterializedView(session, materializedViewName);
    if (materializedViewDefinition.isEmpty()) {
      // View not found, might have been concurrently deleted
      return new MaterializedViewFreshness(STALE);
    }

    SchemaTableName storageTableName =
        materializedViewDefinition
            .get()
            .getStorageTable()
            .map(CatalogSchemaTableName::getSchemaTableName)
            .orElseThrow(
                () ->
                    new IllegalStateException(
                        "Storage table missing in definition of materialized view "
                            + materializedViewName));

    Table icebergTable = loadTable(session, storageTableName);
    String dependsOnTables =
        icebergTable.currentSnapshot().summary().getOrDefault(DEPENDS_ON_TABLES, "");
    if (dependsOnTables.isEmpty()) {
      // Information missing. While it's "unknown" whether storage is stale,
      // we return "stale": under no normal circumstances dependsOnTables should be missing.
      return new MaterializedViewFreshness(STALE);
    }
    boolean hasUnknownTables = false;
    Iterable<String> tableToSnapshotIds = Splitter.on(',').split(dependsOnTables);
    for (String entry : tableToSnapshotIds) {
      if (entry.equals(UNKNOWN_SNAPSHOT_TOKEN)) {
        // This is a "federated" materialized view (spanning across connectors).
        // Trust user's choice and assume "fresh or fresh enough".
        hasUnknownTables = true;
        continue;
      }
      List<String> keyValue = Splitter.on("=").splitToList(entry);
      if (keyValue.size() != 2) {
        throw new TrinoException(
            ICEBERG_INVALID_METADATA,
            format("Invalid entry in '%s' property: %s'", DEPENDS_ON_TABLES, entry));
      }
      String tableName = keyValue.get(0);
      String value = keyValue.get(1);
      List<String> strings = Splitter.on(".").splitToList(tableName);
      if (strings.size() == 3) {
        strings = strings.subList(1, 3);
      } else if (strings.size() != 2) {
        throw new TrinoException(
            ICEBERG_INVALID_METADATA,
            format("Invalid table name in '%s' property: %s'", DEPENDS_ON_TABLES, strings));
      }
      String schema = strings.get(0);
      String name = strings.get(1);
      SchemaTableName schemaTableName = new SchemaTableName(schema, name);
      IcebergTableHandle tableHandle = getTableHandle(session, schemaTableName);

      if (tableHandle == null) {
        throw new MaterializedViewNotFoundException(materializedViewName);
      }
      Optional<TableToken> tableToken;
      if (value.isEmpty()) {
        tableToken = Optional.empty();
      } else {
        tableToken = Optional.of(new TableToken(Long.parseLong(value)));
      }
      if (!isTableCurrent(session, tableHandle, tableToken)) {
        return new MaterializedViewFreshness(STALE);
      }
    }
    return new MaterializedViewFreshness(hasUnknownTables ? UNKNOWN : FRESH);
  }
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