Skip to main content
QBit データ型は、より高速な近似検索のためにベクトルの格納方法を再構成します。各ベクトルの要素をまとめて格納するのではなく、すべてのベクトルにまたがって同じビット位置ごとにまとめて格納します。 これにより、ベクトルは元の精度のまま保持しつつ、検索時にきめ細かな量子化レベルを選択できます。ビットの読み取り量を減らせば I/O が減って計算が高速になり、より高い精度が必要な場合は多くのビットを読み取れます。量子化によるデータ転送量と計算量の削減による高速化のメリットを得ながら、必要に応じて元のデータをそのまま利用できます。 QBit 型のカラムを宣言するには、次の構文を使用します。
  • element_type – 各ベクトル要素の型。指定できる型は Int8BFloat16Float32Float64 です
  • dimension – 各ベクトルの次元数

QBit の作成

テーブルのカラム定義で QBit 型を使用する場合:

配列をQBitに変換する

配列の長さがQBitの次元と一致していれば、配列はQBitに変換されます。配列の要素型は、QBitの要素型と一致している必要はありません。数値型の要素であれば、どの型でも自動的に変換されます。これにより、既存の埋め込みカラムをそのままQBitカラムへ移行できます。
この変換は、CAST を使って明示的に行うこともできます。たとえば、CAST(embedding AS QBit(Float32, 8)) のように指定します。

QBit を Array に変換する

逆方向の変換では、ビット転置された表現から元のベクトルを再構築するため、QBitArray に CAST すると格納されている値が返されます。これは Array を QBit に変換する の逆です。
再構成された配列では QBit の要素型が使用され、その後、各要素は指定された配列の要素型に変換されます。したがって、QBit(Float32, N) から Array(Float64) のように要素型も変更するキャストも可能です。 Array -> QBit -> Array のラウンドトリップは、Int8Float32Float64 では情報損失なしで行えます。BFloat16 の場合は、BFloat16 への直接変換と同じ結果になり、失われる精度は BFloat16 自体に起因するものだけです。 dimension が 8 の倍数でない場合、内部表現に含まれる末尾のパディング要素は取り除かれるため、結果には常にちょうど dimension 個の要素が含まれます。

QBit サブカラム

QBit はサブカラムアクセスパターンを実装しており、保存されたベクトルの各ビットプレーンに個別にアクセスできます。各ビット位置には .N 構文でアクセスでき、N はビット位置を表します。
アクセス可能なサブカラム数は、要素型によって異なります。
  • Int8: 8 個のサブカラム (1-8)
  • BFloat16: 16 個のサブカラム (1-16)
  • Float32: 32 個のサブカラム (1-32)
  • Float64: 64 個のサブカラム (1-64)

ベクトル検索関数

以下は、ベクトル類似度検索で QBit データ型を使用する距離関数です。
最終更新日 2026年7月1日