Skip to content

Track Iceberg v4 spec support #1107

Open

Description

@manuzhang

This is the parent tracking issue for implementing the Iceberg format version 4 spec in iceberg-cpp.

Note

v4 is still under active development and has not been formally adopted (see Format Versioning). The list below reflects the spec on apache/iceberg main as of 2026-11-10 and will be updated as the spec evolves. Until v4 is adopted, v4 support here should be treated as experimental and should not change the default format version.

iceberg-cpp currently supports up to v3 (TableMetadata::kSupportedTableFormatVersion = 3); #1070 adds the v4 table metadata foundations. Remaining v3 work is tracked separately in #959.

If you are interested in working on any of the items below, please open a dedicated sub-issue (or link an existing one) and reference this issue so progress is easy to follow. Where the Java implementation already exists, please keep behavior consistent with it; the relevant Java PRs are linked as references.

1. Foundation

2. Relative paths

Spec: Paths in Metadata (apache/iceberg#13141, apache/iceberg#15630)

3. Adaptive metadata tree

Spec: Manifests (apache/iceberg#16025)

3.1 Data model

3.2 Read path

3.3 Write path

4. Content stats

Spec: Content Stats (apache/iceberg#13153, apache/iceberg#14234)

5. Column updates

Spec: Column File (apache/iceberg#15146, apache/iceberg#16425)

  • Track column_files on tracked files (metadata only)
  • Read path: stitch column files with the base data file by row position
  • Write path: commit column files as MODIFIED / REPLACED entries with correct sequence number handling

6. Schema and types

7. Constraints

Spec: Constraints (apache/iceberg#17822)

  • constraints and last-constraint-id in table metadata; constraint-statuses in snapshots
  • Rewrite identifier-field-ids as an unenforced primary-key constraint when upgrading to v4
  • Table update API and REST update/requirement types for constraints

8. Snapshots and commits

  • Enforce strictly increasing timestamp-ms relative to the parent snapshot for commits to v4 tables
  • Remove/disable the deprecated file-system (Hadoop-style) metadata commit scheme for v4 tables, if applicable

Still under discussion upstream (not yet in the spec)

These are tracked in the Iceberg V4 Spec milestone and will be added above once merged:

Suggested order

  1. Foundation + relative paths (small, self-contained, already implemented in Java)
  2. Tracked file data model + Parquet manifest reader + content stats read path → read-only v4 support
  3. Manifest writers and commit path → v4 write support
  4. Column updates, file type, constraints, default value expressions

If anything is missing or you have suggestions, feel free to comment or open additional sub-issues.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions