Optimización vectorial en tablas gestionadas de Unity Catalog

Importante

Esta característica se encuentra en su versión beta.

La optimización vectorial acelera las búsquedas de similitud sobre columnas vectoriales en tablas gestionadas por el Catálogo de Unity. Cuando ejecutas una consulta de búsqueda vectorial con APPROX NEAREST BY, Azure Databricks puede usar optimización vectorial para restringir la búsqueda a datos que probablemente contengan las coincidencias más cercanas. Esto reduce la cantidad de datos escaneados, especialmente en tablas grandes.

Para usar la optimización vectorial, crea un índice vectorial en una columna y especifica una métrica de puntuación: similitud coseno, producto interno o distancia L2. La optimización predictiva actualiza automáticamente el índice a medida que tus datos cambian. Las consultas elegibles que usan la columna indexada y la función de comparación correspondiente usan la optimización; otras consultas utilizan búsqueda por fuerza bruta. Para la sintaxis de consultas y ejemplos, véase la cláusula NEAREST BY.

Requirements

Para crear un índice vectorial en una tabla:

  • Utiliza Databricks Runtime 19 o superior.
  • Debes tener los permisos SELECT y MODIFY en la tabla, USE CATALOG en su catálogo y USE SCHEMA en su schema.
  • La tabla debe ser una tabla de Delta Lake o Iceberg administrada por Unity Catalog.
  • Crea el índice en el mismo catálogo y esquema que la tabla.
  • La Optimización Predictiva debe estar activada en la tabla para actualizar automáticamente el índice.
  • El seguimiento de filas debe estar habilitado antes de crear el índice. Consulte Seguimiento de filas en Databricks.
  • La tabla debe contener datos al crear el índice.
  • La columna vectorial debe tener el tipo ARRAY<FLOAT>de dato , y todos los vectores deben tener el mismo número de elementos.

Para usar la optimización vectorial en un APPROX NEAREST BY join, coloca la tabla con el índice vectorial a la derecha y utiliza la función de comparación que coincide con la métrica de puntuación del índice. La tabla de vectores de consulta a la izquierda también debe tener activado el seguimiento de filas.

Crear un índice vectorial

Use CREATE VECTOR INDEX para crear un índice para una columna y una métrica de puntuación. Por ejemplo, esta afirmación crea un índice con similitud coseno para la embedding columna:

CREATE VECTOR INDEX main.analytics.documents_embedding_cosine_idx
ON main.analytics.documents (embedding)
OPTIONS (scoring_metric = 'cosine_similarity');

Puedes crear múltiples índices vectoriales en la misma columna para soportar diferentes métricas de puntuación.

Cada métrica de puntuación corresponde a una función de consulta:

Métrica de puntuación Función de consulta
cosine_similarity vector_cosine_similarity
inner_product vector_inner_product
l2_distance vector_l2_distance

Importante

Utiliza la función de consulta que coincida con la métrica de puntuación del índice en tu APPROX NEAREST BY consulta. Si no existe un índice coincidente, la consulta se ejecuta sin optimización vectorial.

Consulta de datos con optimización vectorial

Coloque la tabla con el índice vectorial en el lado derecho de una combinación APPROX NEAREST BY. Puedes filtrar la tabla de consulta-vector de la izquierda mientras sigues usando optimización vectorial. La siguiente unión por lotes devuelve hasta 10 documentos por vector de consulta:

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

Mantenimiento y estado del índice

Después de crear un índice vectorial, Predictive Optimization lo actualiza automáticamente a medida que cambia la tabla. Las consultas incluyen las filas recién añadidas de inmediato, incluso antes de que esas filas hayan sido indexadas.

Para encontrar los índices asociados a una tabla, ejecuta DESCRIBE EXTENDED:

DESCRIBE EXTENDED main.analytics.documents;

La # Indexes sección de la salida muestra el nombre de cada índice y el nombre completamente calificado. Por ejemplo:

# Indexes
documents_embedding_cosine_idx   main.analytics.documents_embedding_cosine_idx

Para inspeccionar el índice, utilice su nombre totalmente cualificado:

DESCRIBE INDEX main.analytics.documents_embedding_cosine_idx;

La salida incluye información sobre la columna indexada y la métrica de puntuación. Por ejemplo:

propiedad valor
Nombre documents_embedding_cosine_idx
Columns embedding
Métrica de puntuación cosine_similarity

Predictive Optimization actualiza el índice, pero no lo reentrena automáticamente. Si la distribución de vectores en tu tabla cambia significativamente, el reentrenamiento puede ayudar a mantener la calidad de búsqueda.

Para reentrenar el índice, elimínalo y vuelve a crearlo con la misma columna y métrica de puntuación. Por ejemplo:

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

Eliminar un índice vectorial

Úsase DROP INDEX para eliminar un índice vectorial:

DROP INDEX main.analytics.documents_embedding_cosine_idx;

Después de eliminar el índice, las consultas que dependían de él se ejecutan sin la aceleración de ese índice.

Note

Antes de renombrar, eliminar o cambiar el tipo de columna indexada, elimina todos los índices vectoriales de esa columna.

Limitations

  • Cuando creas el índice, la tabla puede tener hasta 1.000 millones de filas, y los vectores pueden contener hasta 4.096 elementos.

  • En los siguientes casos, las consultas utilizan búsqueda por fuerza bruta en lugar de optimización vectorial:

    • La consulta utiliza el viaje en el tiempo en la tabla indexada.
    • La tabla contiene filtros de fila, máscaras de columna o políticas de control de acceso basadas en atributos (ABAC).
    • La tabla es un origen o un destino de OpenSharing.

    Esto se aplica incluso si añades estas políticas o empiezas a compartir la tabla después de crear el índice.