Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Importante
Questa funzionalità è in versione beta.
L'ottimizzazione vettoriale accelera le ricerche di similarità su colonne vettoriali nelle tabelle gestite da Unity Catalog. Quando esegui una query di ricerca vettoriale con APPROX NEAREST BY, Azure Databricks può utilizzare l'ottimizzazione vettoriale per restringere la ricerca ai dati che probabilmente contengono le corrispondenze più vicine. Questo riduce la quantità di dati scansionati, specialmente per tabelle grandi.
Per utilizzare l'ottimizzazione vettoriale, si crea un indice vettoriale su una colonna e si specifica una metrica di punteggio: similarità coseno, prodotto scalare o distanza L2. L'Ottimizzazione Predittiva aggiorna automaticamente l'indice man mano che i tuoi dati cambiano. Le query idonee che utilizzano la colonna indicizzata e la funzione di confronto corrispondente usano l'ottimizzazione; altre query utilizzano la ricerca a forza bruta. Per la sintassi delle query ed esempi, vedi clausola NEAREST BY.
Requirements
Per creare un indice vettoriale su una tabella:
- Usa Databricks Runtime 19 o superiore.
- Devi avere i permessi
SELECTeMODIFYsulla tabella,USE CATALOGsul suo catalogo eUSE SCHEMAsul suo schema. - La tabella deve essere una tabella Delta Lake o Iceberg gestita da Unity Catalog.
- Crea l'indice nello stesso catalogo e schema della tabella.
- L'Ottimizzazione Predittiva deve essere abilitata sulla tabella per aggiornare automaticamente l'indice.
- Il tracciamento delle righe deve essere abilitato prima di creare l'indice. Consulta Rilevamento delle righe in Databricks.
- La tabella deve contenere i dati quando si crea l'indice.
- La colonna vettoriale deve avere il tipo
ARRAY<FLOAT>di dato , e tutti i vettori devono avere lo stesso numero di elementi.
Per usare l'ottimizzazione vettoriale in una APPROX NEAREST BY join, posiziona la tabella con l'indice vettoriale a destra e usa la funzione di confronto che corrisponde alla metrica di punteggio dell'indice. Anche la tabella dei vettori di query a sinistra deve avere abilitato il tracciamento delle righe.
Creare un indice vettoriale
Usa CREATE VECTOR INDEX per creare un indice per una colonna e una metrica di punteggio. Ad esempio, questa affermazione crea un indice con similitudine coseno per la embedding colonna:
CREATE VECTOR INDEX main.analytics.documents_embedding_cosine_idx
ON main.analytics.documents (embedding)
OPTIONS (scoring_metric = 'cosine_similarity');
Puoi creare più indici vettoriali sulla stessa colonna per supportare diverse metriche di punteggio.
Ogni metrica di punteggio corrisponde a una funzione di interrogazione:
| Metrica di assegnazione dei punteggi | Funzione di query |
|---|---|
cosine_similarity |
vector_cosine_similarity |
inner_product |
vector_inner_product |
l2_distance |
vector_l2_distance |
Importante
Usa la funzione di query che corrisponde alla metrica di punteggio dell'indice nella tua APPROX NEAREST BY query. Se non esiste un indice corrispondente, la query viene eseguita senza ottimizzazione vettoriale.
Interrogare i dati con ottimizzazione vettoriale
Posiziona la tabella con l'indice vettoriale sul lato destro di una APPROX NEAREST BY join. Puoi filtrare la tabella dei vettori di query a sinistra usando comunque l'ottimizzazione vettoriale. Il seguente batch join restituisce fino a 10 documenti per ogni vettore di interrogazione:
SELECT
q.query_id,
d.document_id
FROM main.analytics.query_vectors AS q
INNER JOIN main.analytics.documents AS d
APPROX NEAREST 10 BY SIMILARITY
vector_cosine_similarity(q.embedding, d.embedding);
Manutenzione e stato dell'indice
Dopo aver creato un indice vettoriale, l'Ottimizzazione Predittiva lo aggiorna automaticamente man mano che la tabella cambia. Le query includono immediatamente le righe appena aggiunte, anche prima che quelle righe siano state indicizzate.
Per trovare gli indici associati a una tabella, esegui DESCRIBE EXTENDED:
DESCRIBE EXTENDED main.analytics.documents;
La sezione # Indexes dell'output mostra il nome di ciascun indice e il nome completo qualificato. Ad esempio:
# Indexes
documents_embedding_cosine_idx main.analytics.documents_embedding_cosine_idx
Per ispezionare l'indice, usa il suo nome completamente qualificato:
DESCRIBE INDEX main.analytics.documents_embedding_cosine_idx;
L'output include informazioni sulla colonna indicizzata e sulla metrica di punteggio. Ad esempio:
| proprietà | valore |
|---|---|
| Name | documents_embedding_cosine_idx |
| Columns | embedding |
| Metrica di punteggio | cosine_similarity |
L'ottimizzazione predittiva aggiorna l'indice ma non lo riaddestra automaticamente. Se la distribuzione dei vettori nella tua tabella cambia significativamente, il ritraining può aiutare a mantenere la qualità della ricerca.
Per riaddestrare l'indice, eliminalo e ricrealo con la stessa colonna e metrica di punteggio. Ad esempio:
DROP INDEX main.analytics.documents_embedding_cosine_idx;
CREATE VECTOR INDEX main.analytics.documents_embedding_cosine_idx
ON main.analytics.documents (embedding)
OPTIONS (scoring_metric = 'cosine_similarity');
Elimina un indice vettoriale
Da usare DROP INDEX per rimuovere un indice vettoriale:
DROP INDEX main.analytics.documents_embedding_cosine_idx;
Dopo aver rimosso l'indice, le query che si basavano su di esso vengono eseguite senza l'accelerazione di quell'indice.
Note
Prima di rinominare, eliminare o cambiare il tipo di una colonna indicizzata, elimina ogni indice vettoriale su quella colonna.
Limitations
Quando si crea l'indice, la tabella può avere fino a 1 miliardo di righe, e i vettori possono contenere fino a 4.096 elementi.
Nei casi seguenti, le query utilizzano la ricerca a forza bruta invece dell'ottimizzazione vettoriale:
- La query utilizza il time travel sulla tabella indicizzata.
- La tabella contiene filtri riga, maschere a colonna o policy di controllo di accesso basate su attributi (ABAC).
- La tabella è una sorgente o una destinazione OpenSharing.
Questo vale anche se aggiungi queste politiche o inizi a condividere la tabella dopo aver creato l'indice.