Тип данных QBit реорганизует хранение векторов, чтобы ускорить приближенный поиск. Вместо того чтобы хранить элементы каждого вектора вместе, он группирует одинаковые позиции битов во всех векторах.
При этом векторы хранятся с полной точностью, а во время поиска вы можете выбирать уровень квантования: считывать меньше битов, чтобы сократить I/O и ускорить вычисления, или больше битов для более высокой точности. Это дает выигрыш в скорости за счет уменьшения объема передаваемых данных и вычислений благодаря квантованию, при этом все исходные данные при необходимости остаются доступными.
Чтобы объявить столбец типа QBit, используйте следующий синтаксис:
element_type – тип каждого элемента вектора. Допустимые типы: Int8, BFloat16, Float32 и Float64
dimension – размерность, то есть число элементов в каждом векторе
Использование типа QBit при определении столбца таблицы:
Преобразование массивов в QBit
Массивы преобразуются в QBit, если длина массива соответствует размерности QBit. Тип элементов массива не обязательно должен совпадать с типом элементов QBit. Любой числовой тип элементов автоматически преобразуется в нужный тип. Это позволяет напрямую перенести существующий столбец эмбеддингов в столбец QBit:
Явное преобразование также работает с CAST, например CAST(embedding AS QBit(Float32, 8)).
Преобразование QBit в массивы
Обратное преобразование восстанавливает исходный вектор из битово-транспонированного представления, поэтому приведение QBit к Array возвращает сохранённые значения. Это обратная операция к преобразованию массивов в QBit:
Восстановленный массив использует тип элементов QBit, после чего его элементы преобразуются в запрошенный тип элементов массива. Поэтому работает и приведение, которое одновременно меняет тип элементов, например из QBit(Float32, N) в Array(Float64).
Преобразование по цепочке Array -> QBit -> Array не приводит к потере данных для Int8, Float32 и Float64. Для BFloat16 оно соответствует прямому преобразованию в BFloat16 — единственная потеря точности связана с самим BFloat16.
Когда dimension не кратна 8, конечные элементы дополнения, присутствующие во внутреннем представлении, отбрасываются, поэтому результат всегда содержит ровно dimension элементов.
QBit реализует шаблон доступа к подстолбцам, который позволяет обращаться к отдельным битовым плоскостям сохранённых векторов. Доступ к каждой битовой позиции можно получить с помощью синтаксиса .N, где N — это позиция бита:
Количество доступных подстолбцов зависит от типа элементов:
Int8: 8 подстолбцов (1-8)
BFloat16: 16 подстолбцов (1-16)
Float32: 32 подстолбца (1-32)
Float64: 64 подстолбца (1-64)
Функции векторного поиска
Это функции расстояния для поиска по векторному сходству, использующие тип данных QBit:
Последнее изменение 1 июля 2026 г.