Valores vectoriales
Los vectores son representaciones matemáticas de datos de entrada estructurados y no estructurados que resultan vitales para las aplicaciones modernas de inteligencia artificial (IA) y las capacidades de búsqueda semántica. Db2 ahora puede importar datos vectoriales y convertirlos a un formato que pueda consultarse con sentencias SQL.
¿Por qué son importantes los datos vectoriales?
Muchas aplicaciones de IA que emplean modelos de aprendizaje automático y técnicas de aprendizaje profundo generan vectores en forma de incrustaciones vectoriales de alta dimensión. Un vector de alta dimensión describe cantidades de objetos distintos. Estas aplicaciones utilizan técnicas de búsqueda de similitudes para identificar vectores con similitudes dentro de un conjunto de datos para su uso en un vector de referencia. La similitud suele medirse como una función de distancia entre dos vectores, como la distancia euclídea o la similitud coseno.
Muchas empresas están adoptando tecnologías de IA y GenAI y buscan una solución rentable, segura y simplificada para el almacenamiento de vectores. Para satisfacer estas necesidades, una aplicación debe disponer de capacidades eficientes de búsqueda de similitudes en un conjunto de incrustaciones vectoriales de alta dimensión. Normalmente, el número de dimensiones necesarias para estas aplicaciones oscila entre cientos y miles. El número de vectores almacenados en las bases de datos de estas aplicaciones suele ser muy grande, ya que los vectores se utilizan para representar pequeñas porciones de cada objeto. Estas aplicaciones necesitan ejecutar un gran número de consultas de búsqueda de similitudes para que una sola petición del usuario produzca una respuesta. El tiempo de respuesta previsto para este tipo de consultas oscila entre fracciones de segundo y milisegundos. Las incrustaciones vectoriales suelen mantener metadatos que pueden incluirse en las consultas de búsqueda de similitud.
¿Por qué elegir Db2 para almacenar y trabajar con datos vectoriales?
- Se basan en repositorios de datos externos. Al combinar vectores con la entrada original, los usuarios tienen que trabajar con múltiples repositorios de datos, lo que aumenta los costes, la latencia y la complejidad.
- Tienen poca o ninguna capacidad para mejorar las consultas con otras capacidades de filtrado utilizando los metadatos asociados a las incrustaciones vectoriales.
- Su capacidad en otros ámbitos de la gestión de datos es limitada.
Las capacidades de consulta de Db2 son incomparables, y la adición de la búsqueda de similitud vectorial mejora estas capacidades.
Db2 ha desarrollado durante muchos años una funcionalidad líder en el sector en áreas como la escalabilidad, la seguridad, la auditabilidad, el rendimiento y la supervisión. La mayoría de las soluciones específicas para vectores no pueden ofrecer eso.
Para ver ejemplos de aplicaciones prácticas del uso de Db2 para gestionar datos vectoriales, consulte Casos prácticos.
El tipo de datos VECTOR
- Sintaxis
whereVECTOR (<dimension> ,<coordinate-type>)dimensiones un literal entero que especifica la dimensión del vector. Para tablas organizadas por filas, el valor debe ser de 1 a 8168 para FLOAT32 y de 1 a 32672 para INT8 (SQLSTATE 42611). Para tablas organizadas por columnas, el valor debe ser de 1 a 8148 para FLOAT32 y de 1 a 32592 para INT8 (SQLSTATE 42611).coordinate-typees un valor de coma flotante de 4 bytes de precisión simple REAL o FLOAT32, o un entero de 1 byte INT8.
- Ejemplo
- El siguiente ejemplo muestra la sintaxis del comando para crear una tabla, VTABLE, que contiene dos columnas de diferentes tipos de datos vectoriales:
Este comando genera la siguiente tabla:CREATE TABLE VTABLE (RV VECTOR(100, REAL), -- Coordinates are single-precision (4-byte) floating point IV VECTOR(300, INT8)) -- Coordinates are 1-byte integers$ db2 describe table VTABLE Data type Column Column name schema Data type name Length Scale Nulls ------------------------------- --------- ------------------- ---------- ----- ------ RV SYSIBM VECTOR(FLOAT32) 100 0 Yes IV SYSIBM VECTOR(INT8) 300 0 Yes 1 record(s) selected.
Funciones vectoriales y sus usos
- VECTOR : Construye un vector a partir de una cadena de entrada.
- VECTOR_SERIALIZE : Convierte un vector en una cadena.
- VECTOR_DISTANCIA : Calcula la distancia entre dos vectores utilizando la métrica especificada.
- VECTOR_NORM : Calcula la distancia entre un vector y el vector cero utilizando la métrica especificada.
- VECTOR_DIMENSION_COUNT : Devuelve la dimensión de la definición del tipo vector, incluso si el valor es nulo.
Operaciones UPDATE e INSERT con vectores
La columna VECTOR almacena los vectores en formato binario. Db2 utiliza la forma de cadena del vector cuando interactúa con las aplicaciones.
Por ejemplo, la nueva función VECTOR convierte una representación de cadena de un vector en su forma binaria. El siguiente ejemplo muestra la sintaxis del comando para actualizar un valor de vector existente utilizando una variable de host y la forma de cadena de un vector:
C++
EXEC SQL BEGIN DECLARE SECTION;
// Generated by db2dclgn
sqlint32 id;
struct
{
short length;
char data[50];
} f32_3;
EXEC SQL END DECLARE SECTION;
id = 1;
sprintf(f32_3, "[0.123, -0.456, 0.789]");
EXEC SQL UPDATE VECTOR_TB SET F32_3 = VECTOR(:f32_3, 3, FLOAT32) WHERE ID = :id;
Operaciones de EXPORTACIÓN, IMPORTACIÓN y CARGA con vectores
- Los comandos EXPORTAR e IMPORTAR admiten el tipo de datos VECTOR en Db2 12.1.2 y posteriores. El comando LOAD soporta el tipo de datos VECTOR en Db2 12.1.3 y posteriores.
- El comando EXPORTAR escribe los valores del vector como cadenas de caracteres. Los comandos IMPORTAR y CARGAR esperan que los valores de los datos vectoriales de entrada estén en forma de cadena.
- El comando EXPORTAR da salida a formas de cadena de valores vectoriales sin espacios en blanco innecesarios.
- Un tipo VECTOR INT8 de tamaño pequeño es aquel que tiene hasta 6534 dimensiones, mientras que un tipo VECTOR FLOAT32/REAL de tamaño pequeño tiene hasta 2041 dimensiones. Para estos tipos de VECTOR, la forma de cadena de un valor de vector que se genera mediante una operación de EXPORTACIÓN no supera los 32672 bytes.
- Los comandos EXPORT, IMPORT y LOAD manejan estos tipos VECTOR pequeños de forma similar a como manejan el tipo VARCHAR.
- Si un tipo VECTOR grande tiene más de 6534 dimensiones para vectores INT8, o más de 2041 dimensiones para vectores FLOAT32/REAL, entonces la forma de cadena de estos vectores, cuando es generada por una operación EXPORT, puede exceder los 32672 bytes de longitud.
- Los comandos EXPORTAR, IMPORTAR y CARGAR manejan los tipos VECTOR grandes de forma similar a como manejan los datos de tipo CLOB, con escenarios de uso y restricciones similares a como los comandos EXPORTAR, IMPORTAR y CARGAR manejan los tipos CLOB reales.
- Reglas para ejecutar comandos EXPORT con datos vectoriales
- Existen opciones que pueden incluirse en una sentencia EXPORT cuando se trabaja con datos de objetos grandes (LOB):
- LOB para
- ARCHIVOLOB
- MODIFIED BY LOBSINFILE
- MODIFIED BY lobsinsepfiles
Nota: El comando IMPORTAR no inserta filas de datos con cadenas vectoriales truncadas en columnas VECTOR ( SQL0420N ). Especifique una opción LOB en el comando EXPORT, a menos que tenga otras formas de evitar o mitigar el problema de las cadenas de vectores truncadas. - Reglas para ejecutar los comandos IMPORT y LOAD con datos vectoriales
- Cuando se ejecuta una sentencia IMPORT o LOAD contra una tabla que tiene una columna VECTOR pequeña, los valores de la cadena vectorial deben residir en el archivo de datos de entrada principal, los valores no deben estar truncados y los valores no deben superar los 32672 bytes de tamaño.
- Si la columna VECTOR es grande y no se especifica la opción LOB, los valores de la cadena vectorial deben residir en el archivo de datos de entrada principal. Algunos ejemplos de opciones LOB son LOBS FROM y MODIFIED BY LOBSINFILE. De nuevo, los valores de la cadena vectorial no deben estar truncados y no deben superar los 32700 bytes de tamaño.
- Si la columna VECTOR es grande y se especifica una opción LOB, el archivo de datos de entrada principal debe contener LLS que apunten a los valores de la cadena vectorial en archivos de datos LOB separados. En este caso, el comando LOAD admite valores de cadena vectorial de hasta 1MB (1048576 bytes) de tamaño. El comando EXPORTAR no genera valores de cadenas vectoriales superiores a 1MB. Para el comando LOAD, los archivos de datos LOB separados deben ser accesibles desde el Db2 servidor, tanto cuando el comando LOAD se envía desde un cliente remoto como cuando el comando LOAD utiliza el parámetro CLIENT.
- Cuando se ejecuta el comando LOAD desde un Db2 remoto, tanto el Db2 cliente como el Db2 servidor deben ser de la versión 12.1.3 o posterior.Nota: A veces los datos vectoriales de entrada no son generados por el comando EXPORTAR: Pueden ser construidos manualmente o por otras herramientas o aplicaciones. La importación de estos datos de cadenas vectoriales en tipos de columna VECTOR sigue las mismas reglas que la importación o carga de datos generados por el comando EXPORTAR.
- Reglas aplicables a las operaciones de EXPORTACIÓN, IMPORTACIÓN y CARGA con datos vectoriales
- Para garantizar que los valores vectoriales se insertan correctamente en columnas VECTOR grandes, tanto el comando EXPORT como el comando IMPORT o LOAD correspondiente deben utilizar una opción LOB o no utilizarla. No utilizar una opción LOB conlleva el riesgo de tener valores de cadena vectorial truncados.
- Los comandos EXPORTAR, IMPORTAR y CARGAR tratan los valores de las cadenas vectoriales como cadenas y no como números. Los modificadores de tipo de archivo que se aplican a los valores numéricos no son aplicables a los valores vectoriales de cadena. Los modificadores de tipo de archivo afectados son los siguientes:
decplusblank.decptx.implieddecimalsólo para IMPORTAR y CARGAR.striplzerossólo para EXPORTACIÓN.
- No es posible exportar valores vectoriales de una columna VECTOR y, a continuación, importarlos a una columna VECTOR de otro tipo. Ejemplos de tipos diferentes son los vectores con diferentes dimensiones o diferentes tipos de coordenadas.Nota:
Los comandos EXPORTAR e IMPORTAR son funciones del lado del cliente. Al ejecutar los comandos EXPORTAR e IMPORTAR desde un cliente Db2 remoto, el Db2 cliente y el Db2 servidor deben estar ejecutando Db2 12.1.2 o posterior, para garantizar que ambos soportan columnas de tipo de datos VECTOR.
El comando LOAD tiene componentes tanto del lado del cliente como del lado del servidor. Al ejecutar el comando LOAD desde un cliente Db2 cliente, las instancias cliente y servidor de Db2 Db2 servidor deben estar ejecutando Db2 12.1.3 o posterior, para garantizar que ambos soportan columnas de tipo de datos VECTOR.
Limitaciones de los vectores
- Tipos definidos por el usuario:
- Diferenciado.
- Matriz.
- Tipo de fila.
- Tipo estructurado.
- Tipo de dato anclado.
- Cree el apodo.
- CREAR MAPEO DE TIPOS.
Además:
- La replicación no admite una tabla con una columna VECTOR.
- Los vectores no pueden compararse.
LOADyINGESTno admiten vectores.- db2dart no admite el volcado de columnas VECTOR con la opción /DDEL.
- Las operaciones de copia de seguridad y restauración lógicas no admiten el tipo
VECTOR. ALTOBJno admite tablas con una columnaVECTOR.- No se puede modificar una columna existente para convertirla en un VECTOR.
- Una columna VECTOR existente no puede modificarse a un tipo de datos diferente, ni a un tipo de coordenada diferente.
- Una dimensión de columna VECTOR existente no puede modificarse.
- El único valor DEFAULT permitido es NULL, por lo que no se puede añadir una columna vectorial NOT NULL a una tabla existente.
- No se admite una expresión VECTOR en la lista de selección de una tabla de consulta materializada REFRESCAR INMEDIATA.
- Dado que no existe el concepto de mayor-que o menor-que cuando se trabaja con vectores, una columna VECTOR, o una expresión con un tipo de dato resultado VECTOR, no puede utilizarse de las siguientes maneras:
- Como clave primaria.
- Como clave externa.
- Como clave única.
- Como clave CREATE INDEX.
- Como clave de ordenación ORDER BY.
- Como clave de distribución DPF.
- Como clave de partición de rango.
- Como una llave MDC.
- Como clave del ECA.
- Como expresión GROUP BY.
- En una condición de unión distinta de
IS (NOT) NULL. - Como expresión SELECT DISTINCT.
- Como expresión COUNT DISTINCT.
- En un operador de conjunto distinto de UNION ALL.
Casos de uso
- Caso práctico 1: Buscar registros de pacientes similares en una tabla Db2
- Puede utilizar las capacidades de soporte vectorial propuestas en Db2 para implementar una búsqueda de similitud vectorial sobre registros relacionales.
- Caso práctico 2: Almacenamiento de vectores para aplicaciones de IA generativa / GAR
- Los grandes modelos lingüísticos (LLM) se han hecho cada vez más populares en los últimos años, pero tienen una limitación. Sólo pueden funcionar bien con los datos con los que han sido entrenados. Cuando se enfrentan a preguntas nuevas, suelen dar respuestas incorrectas o inventarse cosas. Para solucionarlo, se utiliza un método llamado generación aumentada de recuperación (RAG) para mejorar las respuestas LLM. El GAR utiliza un repositorio privado de conocimientos en el que se incluye una lista de documentos relevantes del repositorio en el aviso al LLM. A continuación, el LLM intenta generar una respuesta basada en estos documentos. La aplicación del GAR requiere bases de datos seguras para almacenar las incrustaciones vectoriales y un depósito seguro para el contenido confidencial de los conocimientos. Estos contenidos pueden proceder de PDF, documentos de Word o páginas wiki. Los conocimientos se convierten en incrustaciones vectoriales y se almacenan de forma segura en el repositorio.

