apache/iceberg · error · UnsupportedOperationException

Unsupported file content type:

Error message

Unsupported file content type: 

What it means

PartitionsTable's internal task accumulates counts per file content type when building the partitions metadata table rows; unknown FileContent values throw UnsupportedOperationException. Like errors 586/587, this rejects file content kinds the current version does not know how to categorize.

Source

Thrown at core/src/main/java/org/apache/iceberg/PartitionsTable.java:357

        }
      }

      switch (file.content()) {
        case DATA:
          this.dataRecordCount += file.recordCount();
          this.dataFileCount += 1;
          this.dataFileSizeInBytes += file.fileSizeInBytes();
          break;
        case POSITION_DELETES:
          this.posDeleteRecordCount += file.recordCount();
          this.posDeleteFileCount += 1;
          break;
        case EQUALITY_DELETES:
          this.eqDeleteRecordCount += file.recordCount();
          this.eqDeleteFileCount += 1;
          break;
        default:
          throw new UnsupportedOperationException(
              "Unsupported file content type: " + file.content());
      }
    }

    /** Needed because StructProjection is not serializable */
    private static PartitionData toPartitionData(
        StructLike key, PartitionData partitionDataTemplate) {
      return partitionDataTemplate.copyFor(key);
    }
  }
}

View on GitHub (pinned to 86d9c8fc54)

Solutions

  1. Upgrade the Iceberg runtime (Spark/Flink plugin and core) to match the writer version that introduced the new content type.
  2. Identify the offending file via the table's manifests and compact/rewrite it with a supported version.
  3. Avoid querying the partitions metadata table on tables containing unsupported content types until upgraded.

Example fix

// before (old runtime)
spark.sql("SELECT * FROM tbl.partitions"); // throws on unknown content
// after
// upgrade iceberg-spark runtime so the switch covers the new FileContent
Defensive patterns

Strategy: try-catch

Try / catch

try {
  spark.sql("SELECT * FROM tbl.partitions").collect();
} catch (UnsupportedOperationException e) {
  if (!e.getMessage().contains("Unsupported file content type")) throw e;
  // surface a clear error advising a runtime upgrade
}

Prevention

When it happens

Trigger: Querying the table's 'partitions' metadata table (SELECT * FROM table.partitions) when a data file/manifest entry has a FileContent outside DATA/POSITION_DELETES/EQUALITY_DELETES.

Common situations: Reading partitions metadata of a table written by a newer Iceberg or experimental format version that introduces new file content types.

Related errors


AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12). Data as JSON: /api/errors/182da593eaa6b4b9. Report an issue: GitHub.