huaxingao commented on code in PR #17822:
URL: https://github.com/apache/iceberg/pull/17822#discussion_r4108430387


##########
format/spec.md:
##########
@@ -654,6 +655,129 @@ Sorting floating-point numbers should produce the 
following behavior: `-NaN` < `
 
 A data or delete file is associated with a sort order by the sort order's id 
within [a manifest](#manifests). Therefore, the table must declare all the sort 
orders for lookup. A table could also be configured with a default sort order 
id, indicating how the new data should be sorted by default. Writers should use 
this default sort order to sort the data on write, but are not required to if 
the default order is prohibitively expensive, as it would be for streaming 
writes.
 
+### Constraints
+
+A **constraint** declares a property that a table's rows are expected to 
satisfy. A constraint's definition is stored in table metadata. Whether a 
constraint holds is recorded for each snapshot, see [Constraint 
Validation](#constraint-validation).
+
+Iceberg does not evaluate constraints. Enforcement and validation are 
performed by engines that write to a table. Iceberg stores constraint 
definitions and records the status that a writer reports for a commit without 
verifying it.
+
+Constraints are added in v4 and are not supported in v3 or earlier.
+
+Three constraint types are defined:
+
+* `check` -- every row must satisfy a predicate
+* `unique` -- the non-null values of a set of fields must be distinct across 
all rows; more than one row may have a null value
+* `primary-key` -- the values of a set of fields must be distinct across all 
rows and must not be null
+
+Constraints are stored separately from schemas because the two evolve 
independently. Every constraint references the fields that it applies to by 
field ID, so a constraint continues to apply to the same columns after a column 
is renamed or reordered.
+
+A required field in a schema expresses `NOT NULL`. It is not represented as a 
constraint.

Review Comment:
   deleted this sentence. 



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