lakebase_vector

Important

Cette fonctionnalité est en version bêta. Les administrateurs d’espace de travail peuvent contrôler l’accès à cette fonctionnalité à partir de la page Aperçus . Consultez Gérer les préversions d’Azure Databricks.

L’extension lakebase_vector ajoute approximativement la recherche vectorielle du voisin le plus proche (ANN) à Lakebase via le type d’index lakebase_ann . Il s’agit d’un compagnon de dépôt pour pgvector : les mêmes types de vecteurs, opérateurs de distance et syntaxe de requête fonctionnent sans modification.

Installer

Tout d’abord, activez La recherche Lakebase dans les paramètres de votre projet. Installez ensuite l’extension :

CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;

Le CASCADE mot clé s’installe pgvector automatiquement en tant que dépendance.

Démarrage rapide

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

Peupler à partir de tables synchronisées

Si vous chargez des embeddings depuis Unity Catalog au lieu de les insérer directement, les tables synchronisées peuvent mapper une colonne d’embedding lakehouse directement sur une colonne Postgres vector pendant la synchronisation, au lieu de la correspondance par défaut JSONB . Voir Mappage personnalisé de types pour la recherche Lakebase.

Configurer l’index

Définissez build_mode à la création de l’index pour contrôler la précision/la vitesse de compromis :

  • standard (par défaut) : optimise le rappel. Utilisez la plupart des charges de travail.
  • fast: s’appuie plus rapidement sur un rappel inférieur. Utilisez quand le temps de génération importe plus que la qualité de la recherche.
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops) WITH (build_mode = 'fast');

Générer des index simultanément

Permet CREATE INDEX CONCURRENTLY de générer sans verrouiller la table, puis REINDEX CONCURRENTLY de reconstruire sans temps d’arrêt :

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

REINDEX INDEX CONCURRENTLY items_embedding_ann;

Ajuster la précision de la recherche

Avant le réglage, appelez lakebase_ann_index_info(index_name) pour obtenir les valeurs et lists les valeurs de default_probesdefault_epsilonl’index.

Définissez lakebase_ann.probes au moment de la requête pour contrôler le compromis de précision/vitesse. Les valeurs plus élevées améliorent le rappel, mais les requêtes lentes.

Avant de définir lakebase_ann.probes, appelez lakebase_ann_index_info pour rechercher votre lists tableau. Définissez une valeur de sonde par entrée de liste :

lists à partir des informations d’index probes pour définir
[] (vide)
[222] '22'
[3333, 33333] '33, 333'

Note

Le lakebase_ann.probes paramètre nécessite une valeur par entrée dans lists. Lorsque le lists tableau est vide (ce qui se produit sur de petites tables où le générateur d’index ne crée aucune partition IVF), ne définissez probespas . La définition d’une valeur lorsque le lists tableau est vide provoque une erreur. Les partitions IVF apparaissent une fois que votre jeu de données est suffisamment grand pour que le générateur d’index le partitionne.

-- 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 contrôle la marge de re-classement. La valeur par défaut fonctionne 1.9 bien pour la plupart des charges de travail.

SET lakebase_ann.epsilon TO '1.5';

Classes d’opérateurs

Mesure de distance Classe d’opérateur Opérateur de requête
L2 (euclidienne) vector_l2_ops <->
Produit interne négatif vector_ip_ops <#>
Similarité cosinus vector_cosine_ops <=>

Choisissez la classe d’opérateur qui correspond à la façon dont vos incorporations ont été entraînées et utilisez la même métrique pour l’index et la requête :

  • vector_cosine_ops (<=>) est la similarité cosinus. Utilisez-la pour la plupart des incorporations de texte. C’est le choix le plus courant.
  • vector_l2_ops (<->) est la distance euclide (L2). Utilisez-la lorsque la distance spatiale absolue importe et que les vecteurs ne sont pas normalisés.
  • vector_ip_ops (<#>) est un produit intérieur négatif. Utilisez-le lorsque les vecteurs sont prédéfinisés en longueur unitaire. Pour les vecteurs unitaires, le produit interne est égal à la similarité cosinus et est généralement plus rapide.

Informations de référence sur les options d’index

Option Type Default Description
build_mode ficelle 'standard' Contrôle le compromis de précision/vitesse au moment de la génération d’index. 'standard' optimise le rappel ; 'fast' s’accélère avec un rappel inférieur.

Informations de référence sur GUC

Paramètre Type Default Description
lakebase_ann.probes entier[] (unset) Tableau de nombres de sondes par partition, une valeur par entrée dans lists. Les valeurs plus élevées améliorent le rappel au coût de la vitesse des requêtes. Vérifiez lakebase_ann_index_info la lists longueur pour déterminer le nombre de valeurs à définir.
lakebase_ann.epsilon float 1.9 Re-classement de la marge. Plage valide : 0.0 à 4.0.

Fonctions utilitaires

Fonction Returns Description
lakebase_ann_prewarm(regclass) void Charge un index en mémoire pour éliminer la latence de démarrage à froid sur la première requête.
lakebase_ann_index_info(regclass) text Retourne les métadonnées d’index sous forme de texte, y compris lists, default_probeset default_epsilon.

Étapes suivantes