lakebase_vector

Ważna

Ta funkcja jest dostępna w wersji beta. Administratorzy obszaru roboczego mogą kontrolować dostęp do tej funkcji ze strony Podglądy . Zobacz Zarządzanie wersjami zapoznawczami usługi Azure Databricks.

Rozszerzenie lakebase_vector dodaje przybliżone wyszukiwanie wektorów najbliższego sąsiada (ANN) do usługi Lakebase za pośrednictwem typu indeksu lakebase_ann . Jest to upuszczanie towarzysza pgvector: te same typy wektorów, operatory odległości i składnia zapytań działają bez modyfikacji.

Install

Najpierw włącz usługę Lakebase Search w ustawieniach projektu. Następnie zainstaluj rozszerzenie:

CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;

Słowo CASCADE kluczowe automatycznie instaluje pgvector się jako zależność.

Szybki start

-- 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;

Wypełnianie z zsynchronizowanych tabel

Jeśli ładujesz osadzenia z Unity Catalog zamiast wstawiać je bezpośrednio, tabele synchronizowane mogą mapować kolumnę osadzenia Lakehouse bezpośrednio na kolumnę Postgres vector podczas synchronizacji, zamiast domyślnego JSONB mapowania. Zobacz Mapowanie niestandardowych typów dla wyszukiwania bazy jeziora.

Konfigurowanie indeksu

Ustaw build_mode wartość przy tworzeniu indeksu, aby kontrolować dokładność/szybkość kompromisu:

  • standard (ustawienie domyślne): optymalizuje kompletność. Służy do obsługi większości obciążeń.
  • fast: kompiluje się szybciej przy niższym odwołaniu. Użyj, gdy czas kompilacji ma znaczenie więcej niż jakość wyszukiwania.
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops) WITH (build_mode = 'fast');

Współbieżne tworzenie indeksów

Użyj CREATE INDEX CONCURRENTLY polecenia , aby skompilować bez blokowania tabeli, a następnie REINDEX CONCURRENTLY ponownie skompilować bez przestoju:

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

REINDEX INDEX CONCURRENTLY items_embedding_ann;

Dostrajanie dokładności wyszukiwania

Przed dostrajaniem wywołaj metodę lakebase_ann_index_info(index_name) , aby pobrać wartości i listsdefault_probes indeksudefault_epsilon.

Ustaw lakebase_ann.probes w czasie zapytania, aby kontrolować dokładność/szybkość kompromisu. Wyższe wartości zwiększają kompletność, ale wolne zapytania.

Przed ustawieniem lakebase_ann.probeswywołaj metodę lakebase_ann_index_info , aby znaleźć tablicę lists . Ustaw jedną wartość sondy na wpis listy:

lists z informacji o indeksie probes aby ustawić
[] (puste)
[222] '22'
[3333, 33333] '33, 333'

Note

Parametr lakebase_ann.probes wymaga jednej wartości na wpis w pliku lists. Gdy tablica lists jest pusta (co występuje w małych tabelach, w których konstruktor indeksu nie tworzy partycji IVF), nie ustawiaj wartości probes. Ustawienie wartości, gdy tablica lists jest pusta, powoduje błąd. Partycje IVF są wyświetlane, gdy zestaw danych jest wystarczająco duży, aby konstruktor indeksu mógł go podzielić na partycje.

-- 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 steruje marginesem ponownego klasyfikowania. Wartość domyślna 1.9 działa dobrze w przypadku większości obciążeń.

SET lakebase_ann.epsilon TO '1.5';

Klasy operatorów

Metryka odległości Klasa operatora Operator zapytania
L2 (euklidesowy) vector_l2_ops <->
Ujemny wewnętrzny produkt vector_ip_ops <#>
Podobieństwo cosinusowe vector_cosine_ops <=>

Wybierz klasę operatora zgodną ze sposobem trenowania osadzania i użyj tej samej metryki dla indeksu i zapytania:

  • vector_cosine_ops (<=>) jest podobieństwem cosinusu. Służy do osadzania większości tekstu. Jest to najbardziej typowy wybór.
  • vector_l2_ops (<->) to odległość euklidesowa (L2). Użyj go, gdy bezwzględne odległości przestrzenne ma znaczenie i wektory nie są znormalizowane.
  • vector_ip_ops (<#>) jest ujemnym produktem wewnętrznym. Użyj go, gdy wektory są wstępnie znormalizowane do długości jednostki. W przypadku wektorów jednostkowych wewnętrzny produkt jest równy podobieństwu cosinus i jest zwykle szybszy.

Dokumentacja opcji indeksu

Option Typ Default Description
build_mode ciąg 'standard' Kontroluje dokładność/szybkość kompromisu w czasie kompilacji indeksu. 'standard' optymalizuje kompletność; 'fast' kompiluje się szybciej dzięki mniejszej kompletności.

Dokumentacja interfejsu GUC

Parameter Typ Default Description
lakebase_ann.probes liczba całkowita[] (nieustawiony) Tablica liczby sond na partycję, jedna wartość na wpis w pliku lists. Wyższe wartości zwiększają kompletność kosztem szybkości zapytań. Sprawdź lakebase_ann_index_info długość, lists aby określić, ile wartości ma być ustawionych.
lakebase_ann.epsilon float 1.9 Ponowne klasyfikowanie marginesu. Prawidłowy zakres: 0.0 do 4.0.

Funkcje użytkowe

Function Zwroty Description
lakebase_ann_prewarm(regclass) nieważny Ładuje indeks do pamięci, aby wyeliminować opóźnienie zimnego startu w pierwszym zapytaniu.
lakebase_ann_index_info(regclass) SMS Zwraca metadane indeksu jako tekst, w tym lists, default_probesi default_epsilon.

Następne kroki