Skip to content

Core: add labels to the load table/view read path - #18045

Open
laskoviymishka wants to merge 1 commit into
mainfrom
laskoviymishka/labels-serde
Open

laskoviymishka wants to merge 1 commit into
mainfrom
laskoviymishka/labels-serde

Conversation

@laskoviymishka

@laskoviymishka laskoviymishka commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

Part 1 of a 5-PR stack implementing the client/engine side of catalog labels. The REST spec was merged in #15750.

This PR adds the Java model and REST serde for the labels field returned on the load-table and load-view responses:

  • Labels and FieldLabel immutable value types
  • LabelsParser / FieldLabelParser (wire keys object-labels, fields, field-id)
  • wires labels into LoadTableResponse / LoadViewResponse and their parsers, alongside the existing remote-signing-config
  • unit and round-trip tests

Note: the Java type is FieldLabel (singular) while the OpenAPI schema stays FieldLabels — an intentional Java-vs-spec divergence so fieldLabel.labels() reads cleanly. The wire contract (field-id, fields, labels) is unchanged.

Stack (linear; each based on the previous)

  1. Core: add labels to the load table/view read path #18045 — read-path serde (this PR)
  2. Core: expose catalog labels on the loaded table via SupportsLabels #18046 — expose on the loaded table (SupportsLabels)
  3. Core: add labels metadata table #18048 — labels metadata table
  4. Spark 4.1: expose catalog labels via DESCRIBE #18049 — Spark 4.1 DESCRIBE
  5. OpenAPI: emit labels from the REST server test fixture #18047 — REST server test fixture

Restructures the earlier cross-fork PRs (#17337 / #17410 / #17411) into a reviewable native stack; those remain open for now.

Comment thread core/src/main/java/org/apache/iceberg/FieldLabels.java Outdated
Comment thread core/src/test/java/org/apache/iceberg/TestFieldLabelsParser.java Outdated
Comment thread core/src/test/java/org/apache/iceberg/TestFieldLabelsParser.java Outdated
Comment thread core/src/test/java/org/apache/iceberg/TestFieldLabelsParser.java Outdated
Comment thread core/src/main/java/org/apache/iceberg/FieldLabels.java Outdated
@nastra
nastra requested a review from danielcweeks September 11, 2026 13:57
Reference client implementation for the IRC labels read-path spec change
(#15750). Without it, RESTObjectMapper (which sets
FAIL_ON_UNKNOWN_PROPERTIES = false) silently drops the labels field on
deserialization, so labels returned by a catalog are invisible to the Java
client.

New rest.labels package (mirroring rest.credentials): Labels (object + fields
sub-scopes, with a shared empty instance) and FieldLabels (per-field, keyed by
field-id) value types as immutables interfaces, each with a JSON parser.
FieldLabels validates field-id >= 1 and a non-empty labels map, matching
Credential.

Wire an optional labels field into LoadTableResponse / LoadViewResponse and
their parsers. labels() never returns null (empty instance when absent), on
LoadViewResponse via a @Value.Default default method so no interface API break
is introduced. Labels are omitted from the wire when absent (or empty), so the
change is additive and backward compatible.
@laskoviymishka
laskoviymishka force-pushed the laskoviymishka/labels-serde branch from 98d20c7 to 4cf923b Compare September 14, 2026 15:31
return JsonUtil.generate(gen -> toJson(fieldLabels, gen), pretty);
}

public static void toJson(FieldLabel fieldLabels, JsonGenerator gen) throws IOException {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: fieldLabels -> fieldLabel

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants