iceberg-python icon indicating copy to clipboard operation
iceberg-python copied to clipboard

Support creating tags

Open enkidulan opened this issue 1 year ago • 3 comments

Feature Request / Improvement

Historical tags in iceberg docs - https://iceberg.apache.org/docs/1.5.0/branching/#historical-tags

Not sure if it was intentional behavior, but pyiceberg v0.6.0 allowed tagging by using public set_ref_snapshot method:

with table.transaction() as transaction:
    transaction.set_ref_snapshot(
        snapshot_id=snapshot_id,
        parent_snapshot_id=snapshot_id,
        ref_name=revision,
        type="tag",
    )

The new dev version (the current main branch) has deprecated the set_ref_snapshot method, so I can't find a way to create a tag using public methods on the transaction object.

enkidulan avatar Apr 03 '24 05:04 enkidulan

For the reference, I was able to make a tag only by using some private properties of the transaction object:

from pyiceberg.table import SetSnapshotRefUpdate, update_table_metadata

with table.transaction() as txn:
    update = SetSnapshotRefUpdate(
        ref_name=tag,
        type="tag",
        snapshot_id=snapshot_id,
        max_ref_age_ms=None,
        max_snapshot_age_ms=None,
        min_snapshots_to_keep=None,
    )
    txn._updates = [update]
    txn.table_metadata = update_table_metadata(txn.table_metadata, [update])

This seems to work fine as a temporary workaround for development purposes, but it would be great to have a public method for creating tags.

enkidulan avatar Apr 03 '24 05:04 enkidulan

@enkidulan Thanks for reaching out here. Are you interested in creating the API for this? :)

Fokko avatar Apr 05 '24 08:04 Fokko

@Fokko I saw this issue has been inactive for over a month, so I created a PR that might close the issue. Please review when possible :)

chinmay-bhat avatar May 12 '24 16:05 chinmay-bhat