重要
この機能は ベータ版です。 ワークスペース管理者は、[ プレビュー] ページからこの機能へのアクセスを制御できます。 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) を呼び出して、インデックスの lists、 default_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.0に4.0します。 |
ユーティリティ関数
| Function | 返品 | Description |
|---|---|---|
lakebase_ann_prewarm(regclass) |
無効 | インデックスをメモリに読み込み、最初のクエリのコールド スタート待機時間を排除します。 |
lakebase_ann_index_info(regclass) |
SMS 送信 |
lists、default_probes、default_epsilonなど、インデックス メタデータをテキストとして返します。 |