nastra commented on code in PR #14234:
URL: https://github.com/apache/iceberg/pull/14234#discussion_r3201522638


##########
format/spec.md:
##########
@@ -707,6 +714,131 @@ For `geography` only, xmin (X value of `lower_bounds`) 
may be greater than xmax
 
 When calculating upper and lower bounds for `geometry` and `geography`, null 
or NaN values in a coordinate dimension are skipped; for example, POINT (1 NaN) 
contributes a value to X but no values to Y, Z, or M dimension bounds. If a 
dimension has only null or NaN values, that dimension is omitted from the 
bounding box. If either the X or Y dimension is missing then the bounding box 
itself is not produced.
 
+##### Content Stats
+
+In Iceberg v4 stats have been redesigned and are represented by using nested 
structs (`struct<struct<...>>`). The statistics for fields are tracked inside a 
nested struct of value counts and bounds (described in the next section). Each 
field-level statistics struct is a field of the `content_stats` struct, which 
holds all statistics for table fields.
+
+###### ID assignment for stats fields
+
+ID assignment follows a deterministic mapping from the **table ID space** to 
the **stats ID space**, where a given field ID from the **table ID space** gets 
an ID assigned from the **stats ID space** for each field-level statistics 
struct.
+Each field-level statistic listed in the [field stats types 
section](#field-stats-types) has a fixed offset. Its stats field ID is the 
enclosing stats struct's ID plus that offset.
+
+**Data columns (normal table field ids)**
+Mapping a table field ID from the **table ID space** to the **stats ID space** 
is done via:
+
+`stats_struct_id = 10_000 + (200 * table_field_id)`
+
+The constant `10_000` is `stats_space_field_id_start_for_data_fields`. `200` 
represents the number of supports stats per column 
(`num_supported_stats_per_column = 200`).
+
+The formula is defined as:
+`stats_struct_id = stats_space_field_id_start_for_data_fields + 
(num_supported_stats_per_column * table_field_id)`
+
+Each field statistic listed under [Field stats types](#field-stats-types) has 
a fixed **offset** within that block. The field id for an individual field 
statistic is:
+
+`stats_field_id = stats_struct_id + offset`
+
+**Metadata columns (reserved table field ids)**

Review Comment:
   Dealing with all of the reserved field IDs was a big discussion point in the 
design doc, hence why I came up with a calculation to generally deal with 
reserved field IDs. Also having custom defined ID ranges for a particular 
subset of field IDs seems brittle to me, because we'd have to define a new 
range whenever a new reserved field ID is added anywhere to the schema



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