lakebase_vector

Important

這項功能位於 測試版 (Beta) 中。 工作區管理員可以從 「預覽 」頁面控制對此功能的存取。 請參閱 管理 Azure Databricks 預覽。

擴充 lakebase_vector 功能透過索引類型為 Lakebase lakebase_ann 新增了近似最近鄰(ANN)向量搜尋功能。 它是 pgvector 的可直接補充:相同的向量類型、距離運算子和查詢語法都能使用,且不需修改。

Install

首先,在專案設定 中啟用 Lakebase Search 。 然後安裝擴充功能:

CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;

關鍵字 CASCADEpgvector 自動安裝為相依項目。

快速入門

-- 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_probesdefault_epsilon 和 數值。

在查詢時設定 lakebase_ann.probes ,以控制準確度與速度的權衡。 較高的值能提升回憶但查詢速度較慢。

在設定 lakebase_ann.probes前,先呼叫 lakebase_ann_index_info 找你的 lists 陣列。 為每個清單項目設定一個探測值:

lists 資料來源:索引資訊 probes 設定
[] (空的)
[222] '22'
[3333, 33333] '33, 333'

Note

lakebase_ann.probes 參數在 中 lists每個元素中需要一個值。 當 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';

運算子類別

距離度量 操作員類別 查詢運算子
L2(歐幾里得) vector_l2_ops <->
負內積 vector_ip_ops <#>
餘弦相似性 vector_cosine_ops <=>

選擇與你嵌入訓練方式相符的運算子類別,並使用相同的指標作為索引和查詢:

  • vector_cosine_ops<=>) 是餘弦相似度。 大多數文字嵌入都用它。 這是最常見的選擇。
  • vector_l2_ops<->) 是歐幾里得(L2)距離。 當絕對空間距離很重要且向量未正規化時,才會用它。
  • vector_ip_ops<#>) 是負內積。 當向量預正規化為單位長度時使用。 對於單位向量,內積等於餘弦相似度,通常速度更快。

索引選項參考

Option 類型 預設 Description
build_mode 字串 'standard' 控制指數組裝時的準確度與速度權衡。 'standard' 優化回憶; 'fast' 用較低的召回速度快速累積。

GUC 參考

參數 類型 預設 Description
lakebase_ann.probes 整數[] (未設定) 每個分割探測計數陣列,每個項目一個值。lists 較高的值能提升回憶性,但代價是查詢速度下降。 檢查lakebase_ann_index_infolists長度來決定要設定多少數值。
lakebase_ann.epsilon float 1.9 重新排序差距。 有效範圍: 0.04.0

公用程式函數

功能 Returns Description
lakebase_ann_prewarm(regclass) 無效 在第一次查詢時將索引載入記憶體,消除冷啟動延遲。
lakebase_ann_index_info(regclass) 收發簡訊 回傳索引中繼資料為文字,包括 lists、、 default_probesdefault_epsilon

下一步