Skip to content

[Umbrella] First-class UUID type support #16619

Description

@ankitsultana

Creating an issue to gauge the community interest.

UUIDs are super-common in Pinot, and I am sure this is not limited to us at Uber. At present users can only use String columns to deal with UUIDs. This means that:

  • Storage: They are stored as 36 bytes in uncompressed file formats.
  • Scans: They are scanned as 36 bytes, and during conversion to String another 36 bytes are allocated for the String's internal byte buffer. While the allocation buffer is usually re-used, the String internal buffer is not. Moreover, it costs additional CPU cycles to copy over the larger byte count.
  • In-Memory Representation: After scanning, UUIDs are passed around as 36 byte values. This adds a memory/cpu overhead to a lot of operations like data shuffles, open-addressed hash table comparisons, etc.

UUIDs in the end are 2 long values and can be represented using only 16 bytes. There are some usability benefits too, but regardless wanted to share this as something we are exploring.

Last year we had released the UUID Hash Function for Upsert Primary Keys and that has been quite useful at Uber in increasing the per-server primary key capacity: #12538


Implementation tracking

This is the umbrella tracker for first-class logical UUID support in Pinot. The original monolithic implementation, design contract, migration notes, and benchmarks are in #18140. That implementation was split into reviewable layers below.

Core implementation

Merge the numbered stack from bottom to top unless a PR is called out as independent.

Stack note: #18873 is currently stacked on #18872, #18874 on #18873, and #18875 on #18874. #18876 still carries the older layer-7 UDF commit, so it should be restacked on the current #18875 and reconciled with #19091 before merge.

Supporting merged work

Documentation PRs

Existing UUID capabilities

Historical or superseded PRs

Completion criteria

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentationfeatureNew functionalityparent-issueTracking issue with sub-tasksrelease-notesReferenced by PRs that need attention when compiling the next release notes

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions