メインコンテンツへスキップ
QBit データ型は、より高速な近似検索のためにベクトルの格納方法を再構成します。各ベクトルの要素をまとめて格納するのではなく、すべてのベクトルにまたがって同じビット位置ごとにまとめて格納します。 これにより、ベクトルは元の精度のまま保持しつつ、検索時にきめ細かな量子化レベルを選択できます。ビットの読み取り量を減らせば I/O が減って計算が高速になり、より高い精度が必要な場合は多くのビットを読み取れます。量子化によるデータ転送量と計算量の削減による高速化のメリットを得ながら、必要に応じて元のデータをそのまま利用できます。 QBit 型のカラムを宣言するには、次の構文を使用します。
column_name QBit(element_type, dimension)
  • element_type – 各ベクトル要素の型。指定できる型は BFloat16Float32Float64 です
  • 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 データ型を使用する距離関数です。
最終更新日 2026年6月10日