lakebase_vector

重要

この機能は ベータ版です。 ワークスペース管理者は、[ プレビュー] ページからこの機能へのアクセスを制御できます。 Manage Azure Databricks プレビューを参照してください。

lakebase_vector拡張機能は、lakebase_ann インデックスの種類を使用して、ほぼ最近隣 (ANN) ベクター検索を Lakebase に追加します。 これは pgvector のドロップイン コンパニオンです。同じベクター型、距離演算子、およびクエリ構文は変更なしで機能します。

Install

まず、プロジェクト設定で Lakebase Search を有効にします 。 次に、拡張機能をインストールします。

CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;

CASCADE キーワードは、依存関係としてpgvectorを自動的にインストールします。

簡単スタート

-- Create a table with a vector column
CREATE TABLE items (id BIGSERIAL PRIMARY KEY, embedding VECTOR(3));

-- Insert sample data
INSERT INTO items (embedding)
SELECT ARRAY[random(), random(), random()]::real[]
FROM generate_series(1, 1000);

-- Create a lakebase_ann index
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops);

-- Query using standard pgvector distance operators
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;

同期したテーブルからポピュレーション

Unity Catalogから埋め込みを直接挿入するのではなく読み込む場合、 同期したテーブルは 、Lakehouseの埋め込みカラムを同期時にPostgresの vector カラムに直接マッピングできます。デフォルトの JSONB マッピングとは異なります。 湖 底検索のカスタムタイプマッピングを参照してください。

インデックスの構成

インデックスの作成時に build_mode を設定して、精度/速度のトレードオフを制御します。

  • standard (既定値): 再現率を最適化します。 ほとんどのワークロードに使用します。
  • fast: より低い再現率でより高速にビルドします。 ビルド時間が検索品質よりも重要な場合に使用します。
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops) WITH (build_mode = 'fast');

インデックスを同時に作成する

CREATE INDEX CONCURRENTLYを使用してテーブルをロックせずにビルドし、ダウンタイムなしで再構築REINDEX CONCURRENTLYします。

CREATE INDEX CONCURRENTLY items_embedding_ann ON items
  USING lakebase_ann (embedding vector_l2_ops);

REINDEX INDEX CONCURRENTLY items_embedding_ann;

検索精度を調整する

チューニングの前に、 lakebase_ann_index_info(index_name) を呼び出して、インデックスの listsdefault_probes、および default_epsilon 値を取得します。

クエリ時に lakebase_ann.probes を設定して、精度/速度のトレードオフを制御します。 値を大きくすると、呼び戻しは向上しますが、クエリは遅くなります。

lakebase_ann.probesを設定する前に、lakebase_ann_index_infoを呼び出してlists配列を見つけます。 リスト エントリごとに 1 つのプローブ値を設定します。

lists インデックス情報から probes を設定する
[] (空)
[222] '22'
[3333, 33333] '33, 333'

Note

lakebase_ann.probes パラメーターには、listsのエントリごとに 1 つの値が必要です。 lists配列が空の場合 (インデックス ビルダーによって IVF パーティションが作成されない小さなテーブルで発生します)、probes設定しないでください。 lists配列が空の場合に値を設定すると、エラーが発生します。 IVF パーティションは、データセットがインデックス ビルダーでパーティション分割するのに十分な大きさになると表示されます。

-- Check your index's lists length first
SELECT lakebase_ann_index_info('items_embedding_ann');

-- Set probes matching the lists array (example: one partition)
SET lakebase_ann.probes TO '22';
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 10;

lakebase_ann.epsilon は、再ランク付けマージンを制御します。 1.9の既定値は、ほとんどのワークロードに適しています。

SET lakebase_ann.epsilon TO '1.5';

演算子クラス

距離メトリック Operator クラス クエリ演算子
L2 (ユークリッド) vector_l2_ops <->
負の内部積 vector_ip_ops <#>
コサインの類似性 vector_cosine_ops <=>

埋め込みのトレーニング方法に一致する演算子クラスを選択し、インデックスとクエリに同じメトリックを使用します。

  • vector_cosine_ops (<=>)はコサイン類似性である。 ほとんどのテキスト埋め込みで使用します。 これが最も一般的な選択肢です。
  • vector_l2_ops (<->) はユークリッド (L2) 距離です。 絶対空間距離が重要であり、ベクトルが正規化されていない場合に使用します。
  • vector_ip_ops (<#>)は負の内部積である。 ベクトルが単位長に事前に正規化されている場合に使用します。 単位ベクトルの場合、内部積はコサインの類似性に等しく、通常は高速です。

インデックス オプションリファレンス

オプション タイプ Default Description
build_mode 文字列 'standard' インデックスのビルド時の精度/速度のトレードオフを制御します。 'standard' 再現率を最適化します。 'fast' は、呼び戻しが少ないほど高速にビルドされます。

GUC リファレンス

パラメーター タイプ Default Description
lakebase_ann.probes 整数[] (未設定) パーティションごとのプローブ数の配列。 listsのエントリごとに 1 つの値。 値を大きくすると、クエリ速度を犠牲にして再現率が向上します。 lakebase_ann_index_infoの長さをlistsチェックして、設定する値の数を決定します。
lakebase_ann.epsilon float 1.9 余白を再ランク付けします。 有効な範囲: 0.04.0します。

ユーティリティ関数

Function 返品 Description
lakebase_ann_prewarm(regclass) 無効 インデックスをメモリに読み込み、最初のクエリのコールド スタート待機時間を排除します。
lakebase_ann_index_info(regclass) SMS 送信 listsdefault_probesdefault_epsilonなど、インデックス メタデータをテキストとして返します。

次のステップ