lakebase_vector
ベータ版
この機能はベータ版です。ワークスペース管理者は、 プレビュー ページからこの機能へのアクセスを制御できます。Databricksのプレビューを管理するを参照してください。
lakebase_vector 拡張は lakebase_ann インデックスタイプを通じてLakebaseにapproximate nearest-neighbor (ANN) ベクトル検索を追加します。これはpgvectorのそのまま使えるコンパニオンです。同じベクトルタイプ、距離演算子、クエリー構文は修正なしで機能します。
インストール
まず、プロジェクト設定で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 列に直接マッピングできます(default JSONB マッピングの代わり)。Lakebase Search のカスタム型マッピングを参照してください。
インデックスを設定
インデックス作成時に build_mode を設定して、精度と速度のトレードオフを制御します。
standard(default):再現率とインデックス構築時間のバランスをとります。ほとんどのワークロードで使用します。quality:再現率を向上させますが、構築に時間がかかります。
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops)
WITH (build_mode = 'quality');
fastビルドモードは、後方互換性のために引き続きサポートされています。
By default、lakebase_ann はテーブルの統計情報とインデックスの構成に基づいてリストを選択します。パーティション"Layout"を明示的に制御するには、lists を設定します:
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops)
WITH (lists = '1000');
インデックスを同時実行で構築する
テーブルをロックせずに構築するには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を使用して、検索するIVFパーティションの数を制御します。値を大きくすると再現率は向上しますが、クエリー速度が低下します。The defaultは'auto'です。再現率のターゲットを満たすために、さまざまな値をテストしてください。
probesの形状はlistsの形状と一致している必要があります。lakebase_ann_index_infoを呼び出してlists配列を見つけ、1レベルのインデックスには値を1つ、2レベルのインデックスにはコンマ区切りの値を2つ設定します。
|
|
|---|---|
|
|
|
|
|
|
小さなデータセットでは、lakebase_annはIVFパーティショニングの代わりに完全(フラット)検索を使用し、lakebase_ann_index_infoは空のlistsとdefault_probesを返します。この場合、probesは''に設定したままにしてください。listsが空でない場合、形状がlistsと一致しないprobes値はエラーの原因となります。
-- Check your index's lists array first
SELECT lakebase_ann_index_info('items_embedding_ann');
-- Then set probes to match the shape of lists.
-- One-level index (single-value lists): set one value.
SET lakebase_ann.probes TO '10';
-- Two-level index: set two ascending comma-separated values, for example '10, 20'.
-- Flat index (empty lists): leave probes set to ''.
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 10;
lakebase_ann.epsilon フル精度の距離を使用して再ランク付けされる候補の数を制御します。値を大きくすると、より多くの候補が再ランク付けされ、時間がかかります。The default value of 'auto' works well for most workloads.小さなデータセットでのフラット検索中も、epsilon がフル精度の再ランク付けを制御します。
プリフィルター
By default、PostgresはANNインデックスが候補行を返した後に、非ベクトルフィルター条件を適用します。フル精度の距離リランキングの前にそれらの条件を評価するには、lakebase_ann.prefilterを有効にしてください:
SET lakebase_ann.prefilter TO on;
SELECT * FROM items
WHERE id % 100 = 0
ORDER BY embedding <-> '[3,1,2]'
LIMIT 10;
プリフィルタリングは、フィルターの評価コストが低く、ほとんどの行を除外する場合に最も効果的です。多くの行に一致するフィルターや高コストな計算が必要なフィルターの場合はオフのままにしてください。インデックス内でフィルターを評価するとオーバーヘッドが増加する可能性があるためです。
オペレータークラス
距離メトリクス | オペレータークラス | クエリ演算子 |
|---|---|---|
L2 (ユークリッド) |
|
|
負の内積 |
|
|
コサイン類似度 |
|
|
エンベディングのトレーニング方法に合ったオペレータークラスを選択し、インデックスとクエリに同じメトリクスを使用してください。
vector_cosine_ops(<=>) はコサイン類似度です。ほとんどのテキスト埋め込みに使用してください。これは最も一般的な選択肢です。vector_l2_ops(<->) はユークリッド (L2) 距離です。絶対的な空間距離が重要であり、ベクトルが正規化されていない場合に使用してください。vector_ip_ops(<#>)は負の内積です。ベクトルが単位長に事前正規化されている場合に使用します。単位ベクトルでは、内積はコサイン類似度に等しく、通常、より高速です。
インデックス オプション リファレンス
オプション | Type | デフォルト | 説明 |
|---|---|---|---|
| string |
| 精度と速度のトレードオフを制御します。インデックス構築に時間はかかりますが、より高い再現率を得るには |
| string |
| IVFパーティションのLayoutを設定します。 |
GUC参照
パラメーター | Type | デフォルト | 説明 |
|---|---|---|---|
| string |
| 各レベルでスキャンするIVFパーティションの数。値を大きくすると再現率は向上しますが、クエリー速度が低下します。形状は |
| string |
| フル精度の距離を使用して再ランク付けされる候補の数を制御します。値を大きくすると、より多くの候補が再ランク付けされますが、時間がかかります。 |
| enum |
| フル精度の距離による再ランク付けの前に、非ベクトルフィルターを評価します。有効な値は |
ユーティリティ関数
関数 | 戻り値 | 説明 |
|---|---|---|
| 無効 | 最初のクエリにおけるコールドスタート時の遅延を解消するため、インデックスをメモリにロードします。 |
| TEXT |
|