You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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:
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.
pinot-spi) — mergedDataSchema, Arrow, and JSON) — mergedCAST, and transformsStack 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
UUID/VARIANTnon-reserved after the Calcite upgradejava.util.UUIDand internalbyte[16]conversionBYTESmin/max correctness split from [UUID 2/8] UUID ingest and segment storage #18870 reviewBYTES/BIG_DECIMALGenericRowSerDe split from [UUID 2/8] UUID ingest and segment storage #18870 reviewjsonPathStringwithout JSON quotesDocumentation PRs
Existing UUID capabilities
Historical or superseded PRs
FieldSpec.DataTypecleanup proposal (closed; replaced by Rework UUID type conversion to use java.util.UUID as the external form #18927)Completion criteria