QBit Data Type
The QBit data type reorganizes vector storage for faster approximate searches. Instead of storing each vector's elements together, it groups the same binary digit positions across all vectors.
This stores vectors at full precision while letting you choose the fine-grained quantization level at search time: read fewer bits for less I/O and faster calculations, or more bits for higher accuracy. You get the speed benefits of reduced data transfer and computation from quantization, but all the original data remains available when needed.
To declare a column of QBit type, use the following syntax:
element_type– the type of each vector element. The allowed types areInt8,BFloat16,Float32andFloat64dimension– the number of elements in each vector
Creating QBit
Using the QBit type in table column definition:
Converting arrays to QBit
Arrays convert to QBit when the array length matches the QBit dimension. The array's element type does not need to match the QBit element type. Any numeric element type is converted to it automatically. This lets you move an existing column of embeddings straight into a QBit column:
The conversion also works explicitly with CAST, for example CAST(embedding AS QBit(Float32, 8)).
Converting QBit to arrays
The reverse conversion reconstructs the original vector from the bit-transposed representation, so casting a QBit to an Array returns the stored values. This is the inverse of converting arrays to QBit:
The reconstructed array uses the QBit's element type, and its elements are then converted to the requested array element type. A cast that also changes the element type, such as QBit(Float32, N) to Array(Float64), therefore works as well.
An Array -> QBit -> Array round trip is lossless for Int8, Float32 and Float64. For BFloat16 it matches a direct conversion to BFloat16 — the only precision lost is that of BFloat16 itself.
When the dimension is not a multiple of 8, the trailing padding elements present in the internal representation are dropped, so the result always has exactly dimension elements.
QBit subcolumns
QBit implements a subcolumn access pattern that allows you to access individual bit planes of the stored vectors. Each bit position can be accessed using the .N syntax, where N is the bit position:
The number of accessible subcolumns depends on the element type:
Int8: 8 subcolumns (1-8)BFloat16: 16 subcolumns (1-16)Float32: 32 subcolumns (1-32)Float64: 64 subcolumns (1-64)
Vector search functions
These are the distance functions for vector similarity search that use QBit data type: