Skip to content

Reader does not promote date partition values and column bounds to timestamp / timestamp_ns #3503

Open

Description

@anoopj

Follow-up to #3483. The spec lists date -> timestamp and date -> timestamp_ns as valid v3+ primitive promotions (timestamptz/timestamptz_ns are explicitly not allowed). As with int -> long, the Avro manifest format does not store the type of lower/upper bounds and promotion does not rewrite them, so a value written under date must be decoded and compared using its written type.

iceberg-rust only handles int -> long and float -> double:

Even though this is a latent bug, users don't hit this because iceberg-rust cannot produce this promotion itself today (no column-type update in core), so no user hits it via a round trip. But a date column promoted to timestamp by a v3-capable engine is a valid table that iceberg-rust reads, and such a read would compare date-days against timestamp-micros: wrong pruning and, for a promoted partition source, detached deletes, pretty much the same class of silent mismatch #3483 fixes for int/float.

Possible fix

Teach the value/bound promotion path about the date promotions, ideally as part of moving bound promotion into the reader (the sibling follow-up), so there is one promotion point

Tests

bound pruning where a promoted date column's bounds decide a file; equality-delete / deletion-vector matching across a date -> timestamp promotion; and an overflow case for timestamp_ns asserting a runtime error rather than a wrapped value.

Activity

  1. added a commit that references this issue on Oct 28, 2026
    8fc8a81
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions