[UUID 3/8] UUID result rendering (DataSchema, Arrow/JSON encoders) - #18871
Merged
Conversation
This was referenced Jun 29, 2026
xiangfu0
force-pushed
the
uuid-split/03-result-rendering
branch
3 times, most recently
from
June 30, 2026 09:14
3772a6a to
cfd3765
Compare
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #18871 +/- ##
============================================
+ Coverage 65.49% 65.51% +0.02%
Complexity 1421 1421
============================================
Files 3428 3428
Lines 217518 217587 +69
Branches 34558 34570 +12
============================================
+ Hits 142453 142544 +91
+ Misses 63527 63508 -19
+ Partials 11538 11535 -3
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
xiangfu0
force-pushed
the
uuid-split/03-result-rendering
branch
7 times, most recently
from
July 7, 2026 07:08
10b0acb to
16d0757
Compare
xiangfu0
force-pushed
the
uuid-split/03-result-rendering
branch
6 times, most recently
from
July 8, 2026 08:05
9667e39 to
b40ea56
Compare
Jackie-Jiang
reviewed
Jul 8, 2026
xiangfu0
force-pushed
the
uuid-split/03-result-rendering
branch
4 times, most recently
from
July 13, 2026 08:02
09bec51 to
04a5acb
Compare
xiangfu0
force-pushed
the
uuid-split/03-result-rendering
branch
10 times, most recently
from
July 21, 2026 08:10
aa6a09d to
b3fbfa1
Compare
xiangfu0
force-pushed
the
uuid-split/03-result-rendering
branch
4 times, most recently
from
July 25, 2026 08:01
e976bdf to
faa0149
Compare
Jackie-Jiang
approved these changes
Jul 26, 2026
Part 3/8 of splitting apache#18140 (logical UUID type). Rebased onto master, which now includes the merged apache#18869 type foundation and apache#18870 ingest/storage layer. Renders UUID result columns as canonical lowercase RFC-4122 strings: - DataSchema.ColumnDataType.UUID / UUID_ARRAY plus the conversion and format helpers, backed by the UuidUtils class merged in apache#18869. - Arrow and JSON broker response encoders. UUID null placeholder: ColumnDataType.UUID overrides getNullPlaceholder() to return the nil UUID, matching the default null sentinel FieldSpec already uses for UUID columns. Its stored type BYTES supplies a zero-length placeholder, which is not a valid 16-byte UUID and fails to render, so the three call sites that build null-aware blocks (DataBlockBuilder, GroupByResultsBlock, GroupByDataTableReducer) now resolve the placeholder on the logical type rather than the stored type. For every other logical type the two are identical, an invariant pinned by a new DataSchemaTest case. DataSchema.fromBytes now reports an unrecognized ColumnDataType token with a message naming the mixed-version cause instead of a bare IllegalArgumentException. Rolling-upgrade note: DataSchema serializes ColumnDataType by name, so an old broker/server that receives a UUID token from a new node cannot parse it. Treat as an atomic-upgrade feature - UUID columns should only be queried once the whole cluster is upgraded. No existing (non-UUID) column is affected.
xiangfu0
force-pushed
the
uuid-split/03-result-rendering
branch
from
July 26, 2026 08:02
faa0149 to
69c8a42
Compare
Contributor
Author
|
Documentation follow-up: pinot-contrib/pinot-docs#940 |
xiangfu0
added a commit
to pinot-contrib/pinot-docs
that referenced
this pull request
Jul 26, 2026
xiangfu0
added a commit
to xiangfu0/pinot
that referenced
this pull request
Jul 28, 2026
Adds the UUID scalar function surface on top of the logical UUID type: - IS_UUID / TO_UUID: polymorphic over STRING and BYTES, sharing dispatch via AbstractStringOrBytesUuidFunction - UUID_TO_BYTES, BYTES_TO_UUID, UUID_TO_STRING, UUID_VERSION, UUID_TIMESTAMP - UUID_V4 / UUID_V7 generators, marked isDeterministic = false so the broker's CompileTimeFunctionsInvoker does not fold one value across every row - Matching multi-stage Udf wrappers so the functions are registered with the MSE UDF registry Depends only on UuidUtils (apache#18869) and ColumnDataType.UUID (apache#18871), both already on master. Split out of apache#18875 so it can be reviewed independently of the UUID partitioning work.
xiangfu0
added a commit
to xiangfu0/pinot
that referenced
this pull request
Jul 28, 2026
Adds the UUID scalar function surface on top of the logical UUID type: - IS_UUID / TO_UUID: polymorphic over STRING and BYTES, sharing dispatch via AbstractStringOrBytesUuidFunction - UUID_TO_BYTES, BYTES_TO_UUID, UUID_TO_STRING, UUID_VERSION, UUID_TIMESTAMP - UUID_V4 / UUID_V7 generators, marked isDeterministic = false so the broker's CompileTimeFunctionsInvoker does not fold one value across every row - Matching multi-stage Udf wrappers so the functions are registered with the MSE UDF registry Depends only on UuidUtils (apache#18869) and ColumnDataType.UUID (apache#18871), both already on master. Split out of apache#18875 so it can be reviewed independently of the UUID partitioning work.
28 tasks
xiangfu0
added a commit
to xiangfu0/pinot
that referenced
this pull request
Jul 29, 2026
Adds the UUID scalar function surface on top of the logical UUID type: - IS_UUID / TO_UUID: polymorphic over STRING and BYTES, sharing dispatch via AbstractStringOrBytesUuidFunction - UUID_TO_BYTES, BYTES_TO_UUID, UUID_TO_STRING, UUID_VERSION, UUID_TIMESTAMP - UUID_V4 / UUID_V7 generators, marked isDeterministic = false so the broker's CompileTimeFunctionsInvoker does not fold one value across every row - Matching multi-stage Udf wrappers so the functions are registered with the MSE UDF registry Depends only on UuidUtils (apache#18869) and ColumnDataType.UUID (apache#18871), both already on master. Split out of apache#18875 so it can be reviewed independently of the UUID partitioning work.
xiangfu0
added a commit
to xiangfu0/pinot
that referenced
this pull request
Jul 30, 2026
Adds the UUID scalar function surface on top of the logical UUID type: - IS_UUID / TO_UUID: polymorphic over STRING and BYTES, sharing dispatch via AbstractStringOrBytesUuidFunction - UUID_TO_BYTES, BYTES_TO_UUID, UUID_TO_STRING, UUID_VERSION, UUID_TIMESTAMP - UUID_V4 / UUID_V7 generators, marked isDeterministic = false so the broker's CompileTimeFunctionsInvoker does not fold one value across every row - Matching multi-stage Udf wrappers so the functions are registered with the MSE UDF registry Depends only on UuidUtils (apache#18869) and ColumnDataType.UUID (apache#18871), both already on master. Split out of apache#18875 so it can be reviewed independently of the UUID partitioning work.
xiangfu0
added a commit
that referenced
this pull request
Jul 30, 2026
* Add UUID scalar functions and multi-stage UDF wrappers Adds the UUID scalar function surface on top of the logical UUID type: - IS_UUID / TO_UUID: polymorphic over STRING and BYTES, sharing dispatch via AbstractStringOrBytesUuidFunction - UUID_TO_BYTES, BYTES_TO_UUID, UUID_TO_STRING, UUID_VERSION, UUID_TIMESTAMP - UUID_V4 / UUID_V7 generators, marked isDeterministic = false so the broker's CompileTimeFunctionsInvoker does not fold one value across every row - Matching multi-stage Udf wrappers so the functions are registered with the MSE UDF registry Depends only on UuidUtils (#18869) and ColumnDataType.UUID (#18871), both already on master. Split out of #18875 so it can be reviewed independently of the UUID partitioning work. * Fix UUID-to-string scalar evaluation * Support polymorphic UUID scalar inputs * Harden polymorphic UUID scalar support
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Parent tracking issue: #16619
What
Renders UUID result columns as canonical lowercase RFC-4122 strings.
Changes
DataSchema.ColumnDataType.UUID/UUID_ARRAY+ conversion and format helpersColumnDataType.UUIDoverridesgetNullPlaceholder()to return the nil UUID, matching the default null sentinelFieldSpecalready uses for UUID columns. Its stored typeBYTESsupplies a zero-length placeholder, which is not a valid 16-byte UUID and fails to render, so the three call sites that build null-aware blocks (DataBlockBuilder,GroupByResultsBlock,GroupByDataTableReducer) now resolve the placeholder on the logical type rather than the stored type. For every other logical type the two are identical — an invariant pinned by a newDataSchemaTestcase.DataSchema.fromBytesreports an unrecognizedColumnDataTypetoken with a message naming the mixed-version cause instead of a bareIllegalArgumentException.Enables
SELECT,GROUP BY,DISTINCT, and join outputs render UUID strings instead of hex.DataSchemaserializesColumnDataTypeby name; an old broker/server that receives aUUIDcolumn token from a new node will fail to parse it. Treat as an atomic-upgrade feature — UUID columns should only be queried once the whole cluster is upgraded. No existing (non-UUID) column is affected.About this PR / how to review
This is part 3 of 8 splitting #18140 (first-class logical
UUIDtype) into layered PRs, as requested there.The split is enabled by the v1 design:
DataType.UUIDhas stored typeBYTES, so most paths handle it automatically; each PR adds explicit UUID semantics to one subsystem. Head branch lives onxiangfu0/pinot.Both parents (#18869, #18870) have merged, so this PR is now rebased directly on
masterand the Files-changed tab shows only this layer.Full stack (merge bottom → top)
[UUID 1/8] Add logical UUID type foundation (pinot-spi) #18869 — [UUID 1/8] logical UUID type foundation (pinot-spi)✅ merged[UUID 2/8] UUID ingest and segment storage #18870 — [UUID 2/8] UUID ingest and segment storage✅ mergedPRs 4 and 7 (#18872, #18875) depend only on the merged foundation and can be reviewed in parallel; PRs 5/6 (#18873, #18874) also need this one; PR 8 (#18876) needs #18874.
Full feature description, v1 design contract, scope exclusions, and benchmark numbers: #18140.