Hi all,

I'd like to invite the community to discuss a spec ambiguity in Apache
Iceberg that has caused some confusion across implementations. We've seen
this come up in Python, Rust, and now Go.

The issue: the spec documents the `day` partition transform's result type
as plain `int`, but Java, PyIceberg, and Rust all write manifest partition
fields using Avro's logical `date` type. Go currently writes plain `int`,
which is the strict reading of the spec. Since both forms have the same
physical representation, the difference is only the Avro schema annotation
-- but it's worth clarifying the spec so all implementations are aligned.

The full analysis, including a breakdown of each implementation's
writer/reader behavior and proposed resolution options, is here:
https://github.com/apache/iceberg/issues/16414

At a high level, the questions for the community are:
1. What should implementations write: Avro `int` (plain integer) or Avro
`date` (integer with a date logical type)?
2. Should implementations be required to read both forms, or just
encouraged to?
3. Should the spec's transform result type table be updated from `int` to
`date`?

I'd love to hear your thoughts. Thanks!

Best,
Kevin Liu

Reply via email to