Перейти к основному содержимому
Перейти к основному содержимому

Тип данных QBit

Тип данных QBit реорганизует хранение векторов для более быстрого приближённого поиска. Вместо хранения элементов каждого вектора вместе он группирует одинаковые позиции двоичных разрядов по всем векторам. Это позволяет хранить векторы с полной точностью и при этом выбирать тонкий уровень квантизации на этапе поиска: считывать меньше бит для снижения объёма операций ввода-вывода и ускорения вычислений или больше бит для повышения точности. Вы получаете выигрыш в производительности за счёт уменьшения объёма передаваемых данных и вычислений благодаря квантизации, при этом все исходные данные остаются доступными при необходимости.

Чтобы объявить столбец типа QBit, используйте следующий синтаксис:

column_name QBit(element_type, dimension)
  • element_type – тип каждого элемента вектора. Допустимые типы: BFloat16, Float32 и Float64
  • dimension – количество элементов в каждом векторе

Создание QBit

Использование типа QBit при определении столбца таблицы:

CREATE TABLE test (id UInt32, vec QBit(Float32, 8)) ENGINE = Memory;
INSERT INTO test VALUES (1, [1, 2, 3, 4, 5, 6, 7, 8]), (2, [9, 10, 11, 12, 13, 14, 15, 16]);
SELECT vec FROM test ORDER BY id;
┌─vec──────────────────────┐
│ [1,2,3,4,5,6,7,8]        │
│ [9,10,11,12,13,14,15,16] │
└──────────────────────────┘

Подстолбцы QBit

QBit реализует механизм доступа к подстолбцам, который позволяет обращаться к отдельным битовым плоскостям хранимых векторов. К каждой битовой позиции можно обратиться с помощью синтаксиса .N, где N — это номер битовой позиции:

CREATE TABLE test (id UInt32, vec QBit(Float32, 8)) ENGINE = Memory;
INSERT INTO test VALUES (1, [0, 0, 0, 0, 0, 0, 0, 0]);
INSERT INTO test VALUES (1, [-0, -0, -0, -0, -0, -0, -0, -0]);
SELECT bin(vec.1) FROM test;
┌─bin(tupleElement(vec, 1))─┐
│ 00000000                  │
│ 11111111                  │
└───────────────────────────┘

Количество доступных подстолбцов зависит от типа элемента:

  • BFloat16: 16 подстолбцов (1–16)
  • Float32: 32 подстолбца (1–32)
  • Float64: 64 подстолбца (1–64)

Функции векторного поиска

Это функции вычисления расстояния, используемые при поиске по векторному сходству и использующие тип данных QBit: