Tags, Branches, and Rollback
Manage retained versions and branches. For SQL tag DDL, see Create Tables, Views, and Tags. For retention and branch behavior, see Manage Tags and Manage Branches.
For catalog selection and invocation syntax, see Procedures.
create_tag
Create a tag based on given snapshot.
Arguments
table(STRING, required): the target table identifier.tag(STRING, required): name of the new tag.snapshot(BIGINT, optional): id of the snapshot which the new tag is based on.time_retained(STRING, optional): The maximum time retained for newly created tags.
-- based on snapshot 10 with 1d
CALL sys.create_tag(table => 'default.T', tag => 'my_tag', snapshot => 10, time_retained => '1 d');
-- based on the latest snapshot
CALL sys.create_tag(table => 'default.T', tag => 'my_tag');
create_tag_from_timestamp
Create a tag based on given timestamp.
Arguments
table(STRING, required): the target table identifier.tag(STRING, required): name of the new tag.timestamp(BIGINT, optional): Find the first retained snapshot (including tagged snapshots) whose commit time is at or after this Unix timestamp in milliseconds.time_retained(STRING, optional): The maximum time retained for newly created tags.
CALL sys.create_tag_from_timestamp(
`table` => 'default.T',
`tag` => 'my_tag',
`timestamp` => 1724404318750,
time_retained => '1 d'
);
replace_tag
Replace an existing tag with new tag info.
Arguments
table(STRING, required): the target table identifier.tag(STRING, required): name of the existed tag.snapshot(BIGINT, optional): id of the snapshot which the tag is based on, it is optional.time_retained(STRING, optional): The maximum time retained for the existing tag, it is optional.
CALL sys.replace_tag(table => 'default.T', tag => 'tag1', snapshot => 10, time_retained => '1 d');
rename_tag
Rename a tag with a new tag name.
Arguments
table(STRING, required): the target table identifier.tag(STRING, required): name of the tag.target_tag(STRING, required): the new tag name to rename.
CALL sys.rename_tag(table => 'default.T', tag => 'tag1', target_tag => 'tag2');
delete_tag
Delete a tag.
Arguments
table(STRING, required): the target table identifier.tag(STRING, required): name of the tag to be deleted. If you specify multiple tags, delimiter is ','.
CALL sys.delete_tag(table => 'default.T', tag => 'my_tag');
expire_tags
Expire tags by time.
Arguments
table(STRING, required): the target table identifier.older_than(STRING, optional): tagCreateTime before which tags will be removed.
CALL sys.expire_tags(table => 'default.T', older_than => '2024-09-06 11:00:00');
trigger_tag_automatic_creation
Trigger the tag automatic creation.
Arguments
table(STRING, required): the target table identifier.
CALL sys.trigger_tag_automatic_creation(table => 'default.T');
create_branch
Create an empty branch, or create a branch from an existing tag. Without tag, the new branch
contains the table schema and no data.
Arguments
table(STRING, required): the source table or branch identifier.branch(STRING, required): the name of the new branch.tag(STRING, optional): an existing tag in the source table or branch to start from.ignoreIfExists(STRING, optional): STRING parsed as a boolean. Use 'true' to ignore an existing branch. Default is 'false'.
CALL sys.create_branch(table => 'test_db.T', branch => 'test_branch');
CALL sys.create_branch(table => 'test_db.T', branch => 'test_branch', tag => 'my_tag');
CALL sys.create_branch(
table => 'test_db.T$branch_existBranchName',
branch => 'test_branch',
tag => 'my_tag'
);
delete_branch
Delete one or more branches.
Arguments
table(STRING, required): the target table identifier.branch(STRING, required): names of the branches to delete, separated by commas.
CALL sys.delete_branch(table => 'test_db.T', branch => 'test_branch');
rename_branch
Rename a branch.
Arguments
table(STRING, required): the target table identifier.from_branch(STRING, required): name of the branch to be renamed.to_branch(STRING, required): new name of the branch.
CALL sys.rename_branch(table => 'test_db.T', from_branch => 'test_branch', to_branch => 'new_branch');
fast_forward
Fast_forward a branch to main branch.
Arguments
table(STRING, required): the target table identifier.branch(STRING, required): name of the branch to be merged.
CALL sys.fast_forward(table => 'test_db.T', branch => 'test_branch');
merge_branch
Merge data files from source branch into target branch for append-only tables. The table must be
created with 'branch-merge.enabled' = 'true'. This option enforces a pure-append table history by
rejecting compaction and INSERT OVERWRITE, and it is incompatible with deletion vectors. Requires
compatible schema history and consistent row-tracking settings between source and target.
Arguments
table(STRING, required): the table identifier.source_branch(STRING, required): name of the source branch to merge from.target_branch(STRING, optional): name of the target branch to merge into. Default is 'main'.
CALL sys.merge_branch(table => 'test_db.T', source_branch => 'branch1');
CALL sys.merge_branch(table => 'test_db.T', source_branch => 'branch1', target_branch => 'branch2');
rollback
Roll back to a retained snapshot or tag. Specify exactly one of snapshot, tag, or the legacy
version argument.
Arguments
table(STRING, required): the target table identifier.version(STRING, optional): Legacy snapshot ID or tag name. Prefersnapshotortagfor new calls.snapshot(BIGINT, optional): snapshot that will roll back to.tag(STRING, optional): tag that will roll back to.
CALL sys.rollback(table => 'default.T', version => 'my_tag');
CALL sys.rollback(table => 'default.T', version => 10);
CALL sys.rollback(table => 'default.T', tag => 'tag1');
CALL sys.rollback(table => 'default.T', snapshot => 2);
rollback_to_timestamp
Rollback to the snapshot which earlier or equal than timestamp.
Arguments
table(STRING, required): the target table identifier.timestamp(BIGINT, required): roll back to the snapshot which earlier or equal than timestamp.
CALL sys.rollback_to_timestamp(table => 'default.T', timestamp => 1730292023000);
rollback_to_watermark
Rollback to the snapshot which earlier or equal than watermark.
Arguments
table(STRING, required): the target table identifier.watermark(BIGINT, required): roll back to the snapshot which earlier or equal than watermark.
CALL sys.rollback_to_watermark(table => 'default.T', watermark => 1730292023000);