omarsmak commented on a change in pull request #3425:
URL: https://github.com/apache/iceberg/pull/3425#discussion_r740820895



##########
File path: site/docs/snapshot-tag-branch.md
##########
@@ -0,0 +1,148 @@
+# Snapshot Tagging and Branching
+
+Iceberg snapshot tagging and branching feature offers user a Git-like 
experience in manging table snapshots.
+Users can assign tags to snapshots, create branches and configure customized 
retention policy for them.
+
+## Example use cases
+
+### Time-based Snapshot tagging
+
+Users can leverage Iceberg snapshot tagging to keep multiple versions of the 
table across different points in time.
+For example, a table can be configured to keep all snapshots within 24 hours, 
then 1 tagged snapshot per day, per week, per month, etc.
+The daily snapshots are retained for 1 week, weekly snapshots are retained for 
1 month, monthly snapshots are retained for 1 year, etc.
+
+### Critical snapshot maintenance branch
+
+There are snapshots that are critical for legal or business reasons, such as 
the yearly snapshots used for financial auditing.
+Because they are kept for an extended period of time (maybe even forever), 
data files in the table are commonly compacted and encrypted with periodic key 
rotation.
+Occasionally, rows in the snapshot also have to be deleted or updated to 
satisfy GDPR requirements.
+Users can create an Iceberg branch for such snapshots to maintain its 
independent lifecycle.
+
+### Experimental Branch
+
+An experimental branch is useful for many user groups, including:
+
+1. Data scientists and ML researchers can easily create an Iceberg branch to 
experiment with table data without worrying about polluting the main table 
snapshot.
+2. Data engineers can perform production AB testing against the experimental 
branch to ensure the correctness of certain table updates.
+3. Data producers can perform test load in a table in an experimental branch, 
and then append all the loaded files back to the main branch (similar to Git 
cherry-pick).
+
+!!!Note
+    Iceberg does not plan to offer a Git-like merge operation through 
branching.
+    Merging arbitrary changes requires a lot of work to keep track of the 
intent of the commit and the context. 
+    Merging in a table is actually committing a transaction. The expectation 
is different from a merge in Git, where the lack of a conflict is the 
definition of "correct". 
+    In a table, the lack of a file conflict does not mean that the transaction 
can be committed.
+    In addition, longer transaction lengths from branch-like behavior 
dramatically increases the likelihood that the transaction could fail.
+    The merge feature would likely be supported through multi-table 
transaction in the future.
+
+## Snapshot Reference
+
+In version control systems like git, branch and tag are both references of 
commits.
+In Iceberg, we use a similar concept of **Snapshot Reference** to implement 
branching and tagging.
+
+Each Iceberg table metadata contains a list of `refs` (references), and a 
`current-branch` indicating the current branch to use.
+When user creates an Iceberg table, the first commit belongs to the default 
`main` branch.
+Each snapshot reference has a uniquely identifiable name across all references 
of a table.
+A snapshot can have multiple references. The exact snapshot reference spec is 
documented at the [Spec](../spec/#snapshot-reference) page.
+Here we will provide some more explanations to the concepts in snapshot 
reference.
+
+### Reference Type
+
+There are clearly 2 types of snapshot reference, which are `branch` and `tag`. 
Their key differences are:
+
+- **New commit**: when a new snapshot is added as a child of a referenced 
snapshot, tag remains on the old snapshot, but branch reference moves to the 
child.
+
+- **Retention policy**: retention policy affects all the snapshots in a 
branch, but only a single tagged snapshot. (More details in the next section)
+
+### Retention Policy
+
+Iceberg offers a [snapshot expiration 
procedure](../spark-procedures/#expire_snapshots) to clean up snapshots that 
are not needed to free up storage space.
+Retention policy can be configured both globally and on snapshot reference to 
provide highly flexible customization to the expiration behavior.
+
+#### Global snapshot retention policy

Review comment:
       I am bit lost here, I thought we will there will be as well a property 
to disable the retention either on snapshot or globally?

##########
File path: site/docs/snapshot-tag-branch.md
##########
@@ -0,0 +1,148 @@
+# Snapshot Tagging and Branching
+
+Iceberg snapshot tagging and branching feature offers user a Git-like 
experience in manging table snapshots.

Review comment:
       I am wondering here about `offers user a Git-like experience`, since we 
don't intend to offer a full fledged git like experience, does it make sense to 
add `limited Git-like experience`? In order not to confuse users I guess, WDYT?

##########
File path: site/docs/snapshot-tag-branch.md
##########
@@ -0,0 +1,148 @@
+# Snapshot Tagging and Branching
+
+Iceberg snapshot tagging and branching feature offers user a Git-like 
experience in manging table snapshots.
+Users can assign tags to snapshots, create branches and configure customized 
retention policy for them.
+
+## Example use cases
+
+### Time-based Snapshot tagging
+
+Users can leverage Iceberg snapshot tagging to keep multiple versions of the 
table across different points in time.
+For example, a table can be configured to keep all snapshots within 24 hours, 
then 1 tagged snapshot per day, per week, per month, etc.
+The daily snapshots are retained for 1 week, weekly snapshots are retained for 
1 month, monthly snapshots are retained for 1 year, etc.
+
+### Critical snapshot maintenance branch
+
+There are snapshots that are critical for legal or business reasons, such as 
the yearly snapshots used for financial auditing.
+Because they are kept for an extended period of time (maybe even forever), 
data files in the table are commonly compacted and encrypted with periodic key 
rotation.
+Occasionally, rows in the snapshot also have to be deleted or updated to 
satisfy GDPR requirements.
+Users can create an Iceberg branch for such snapshots to maintain its 
independent lifecycle.
+
+### Experimental Branch
+
+An experimental branch is useful for many user groups, including:
+
+1. Data scientists and ML researchers can easily create an Iceberg branch to 
experiment with table data without worrying about polluting the main table 
snapshot.
+2. Data engineers can perform production AB testing against the experimental 
branch to ensure the correctness of certain table updates.
+3. Data producers can perform test load in a table in an experimental branch, 
and then append all the loaded files back to the main branch (similar to Git 
cherry-pick).
+
+!!!Note
+    Iceberg does not plan to offer a Git-like merge operation through 
branching.
+    Merging arbitrary changes requires a lot of work to keep track of the 
intent of the commit and the context. 
+    Merging in a table is actually committing a transaction. The expectation 
is different from a merge in Git, where the lack of a conflict is the 
definition of "correct". 
+    In a table, the lack of a file conflict does not mean that the transaction 
can be committed.
+    In addition, longer transaction lengths from branch-like behavior 
dramatically increases the likelihood that the transaction could fail.
+    The merge feature would likely be supported through multi-table 
transaction in the future.
+
+## Snapshot Reference
+
+In version control systems like git, branch and tag are both references of 
commits.
+In Iceberg, we use a similar concept of **Snapshot Reference** to implement 
branching and tagging.
+
+Each Iceberg table metadata contains a list of `refs` (references), and a 
`current-branch` indicating the current branch to use.
+When user creates an Iceberg table, the first commit belongs to the default 
`main` branch.

Review comment:
       Here a branch is created when the user configure `current-branch` 
property?




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to