You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Overwrite keeps deleted-only manifests, so the manifest list grows by one on every overwrite #4165
When an overwrite removes files explicitly (update_snapshot().overwrite() with delete_data_file), the new snapshot keeps every earlier manifest that holds only DELETED entries. Each overwrite also writes a manifest recording its own deletions, so the manifest list grows by one per commit and only one manifest ever holds live files. Each later commit and scan plan opens all of them.
In _OverwriteFiles._existing_manifests, each parent manifest is read with fetch_manifest_entry(discard_deleted=True). A manifest whose entries are all DELETED comes back empty, so found_deleted_entries is empty and the manifest takes the "intercept is empty" branch, where it is kept unchanged.
Java drops these. MergingSnapshotProducer.apply keeps a manifest only if hasAddedFiles() || hasExistingFiles() || snapshotId() == snapshotId(). The equivalent check in pyiceberg would skip parent manifests with no added or existing files before reading them.
Table.overwrite() is not affected. It deletes through _DeleteFiles before appending.
Output: overwrite 1: 2 manifests, 1 with live files up to overwrite 10: 11 manifests, 1 with live files.
In production, a table overwritten a few hundred times reached 388 manifests, 387 of them deleted-only. Each overwrite commit went from about 3 s to about 24 s on S3.
Activity