RussellSpitzer commented on code in PR #18526:
URL: https://github.com/apache/iceberg/pull/18526#discussion_r4364566776


##########
format/spec.md:
##########
@@ -1071,6 +1077,23 @@ Inheriting sequence numbers through the metadata tree 
allows writing a new manif
 
 Inheritance does not apply to v1, which does not have inherited fields like 
sequence number. When reading v1 manifests with no sequence number column, 
sequence numbers for all files must default to 0.
 
+##### Commit Timestamp Inheritance
+
+In v4 and later, the `snapshot_timestamp` tracking field records the commit 
time (the snapshot's `timestamp-ms` converted to microseconds) of the snapshot 
that added or last modified a file's data, and is used to assign 
`_last_updated_time` for [row lineage](#row-lineage).
+
+The snapshot's `timestamp-ms` is not known until the snapshot is successfully 
committed and may change when a commit is retried, so writers set 
`snapshot_timestamp` to `null` when the value must come from the committing 
snapshot. Writers must set `snapshot_timestamp` for data file and leaf manifest 
entries as follows:
+
+* An ADDED entry must have a `null` `snapshot_timestamp`.
+* An entry MODIFIED by column files must have a `null` `snapshot_timestamp`.
+* Any other entry written to a new manifest must have a non-null 
`snapshot_timestamp` (inherited or previously persisted).
+
+When reading, a `null` commit timestamp is inherited:
+
+* For an entry in the root manifest, from the snapshot's `timestamp-ms` 
converted to microseconds.
+* For an entry in a leaf manifest, from the inherited or persisted 
`snapshot_timestamp` of the root manifest entry that tracks the leaf manifest.
+
+Manifest lists and manifests written before a table was upgraded to v4 do not 
have a `snapshot_timestamp` field and are read as if it is `null`. When reading 
a manifest list written before v4, each manifest inherits the snapshot's 
`timestamp-ms` converted to microseconds, and entries in a manifest written 
before v4 inherit the commit timestamp of their manifest. As a result, rows in 
the table at the time of the upgrade have a `_last_updated_time` equal to the 
commit time of the last snapshot before the upgrade.

Review Comment:
   ```suggestion
   Manifest lists and manifests written before a table was upgraded to v4 do 
not have a `snapshot_timestamp` field and the field should be read as if it is 
`null`. When reading a manifest list written before v4, each manifest inherits 
the snapshot's `timestamp-ms` converted to microseconds, and entries in a 
manifest written before v4 inherit the commit timestamp of their manifest. As a 
result, rows in the table at the time of the upgrade have a 
`_last_updated_time` equal to the commit time of the last snapshot before the 
upgrade.
   ```



-- 
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