Hi all,

Now that the IRC "labels" field has merged in Iceberg Spec ([0]) and the
Polaris Tag work is close ([1]), I'd like to open a thread on how Polaris
should support labels.

There are two ways Polaris could do labels:

A) Labels as a separate entity - their own definitions/store, parallel to
Tags.
B) Labels as a projection over Tags - read-only IRC view / projection of
the existing tag model.

I propose B. Tags already are the structured model: definitions,
assignments, allowed values, inheritance, reverse lookup. IRC labels are
designed as the flat read surface of such models (object-level key/values
plus per-field labels by field-id). A separate labels entity would
duplicate the tag model and create two sources of truth to reconcile; a
projection keeps one model with two surfaces,  a structured authoring API
and an interoperable flat read field. Column identity already lines up:
Tags use the Iceberg field-id, and IRC labels fields are keyed by field-id.

Given B, a Polaris catalog plays two roles:

1. Producer. Polaris resolves a target's effective tags (inheritance
applied, closest-wins) and projects them into IRC labels on
loadTable/loadView. The Tag API stays the authoring/management surface and
labels is the read projection for IRC compliant engines.

2. Consumer. When Polaris federates a foreign IRC catalog, it reads that
catalog's labels and stores them as tags owned by the source catalog:
read-only in Polaris and clearly marked as foreign. A Polaris user cannot
edit them (they change only when Polaris re-syncs from the source) and they
stay separate from Polaris's own natively-authored tags. That is how a
foreign catalog's metadata becomes usable in Polaris without pretending it
is local.

Mostly I'd like the community read on whether projection-over-tags feels
right, and whether the producer/consumer split is worth keeping in mind in
the Tag design so the contract leaves room for it. Would like to hear if
this framing is wrong, or where a separate entity would actually serve
better.

Thanks,
Andrei

[0] IRC Labels spec PR - https://github.com/apache/iceberg/pull/15750
[1] Tags discussion thread -
https://lists.apache.org/thread/28h8bvg3pwwmpob2p4gcrpfs1x5cgkmn

Reply via email to