Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
Se aplica a: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
Base de datos SQL en Microsoft Fabric
El tipo de datos vectorial soporta un tipo base opcional. Por defecto, vector usa float32. Puedes especificar float16 (media precisión) cuando la precisión reducida sea aceptable. Float16 proporciona una representación más compacta que puede reducir el almacenamiento y mejorar el rendimiento.
Un vector de punto flotante de media precisión es un array de números en el que cada número utiliza el formato de punto flotante float16 de 16 bits. Esta representación utiliza la mitad del almacenamiento del formato float32 de 32 bits. Utiliza float16 para reducir el almacenamiento y el consumo de memoria en cargas de trabajo como incrustaciones, búsqueda semántica y aprendizaje automático.
Float16 proporciona menor precisión numérica y un rango numérico menor que float32. Este equilibrio hace que float16 sea adecuado para escenarios aproximados de similitud, pero menos adecuado para cargas de trabajo que requieren aritmética de alta precisión o fidelidad numérica exacta.
Syntax
Para usar valores de media precisión, especifica float16 como tipo base vectorial:
column_name VECTOR ( <dimensions> [ , <base_type> ] ) [ NOT NULL | NULL ]
Si omites <base_type>, el valor por defecto es float32.
Principales beneficios de float16
Aumento de la dimensionalidad
El SQL Motor de base de datos soporta vectores con hasta 3.996 dimensiones cuando se utiliza float16, en comparación con 1.998 dimensiones cuando se utiliza float32. Las dimensiones adicionales soportan incrustaciones generadas por modelos que producen más de 1.998 valores.
Reducción de la superficie de almacenamiento y memoria
Almacenar elementos vectoriales en un formato de 16 bits reduce el almacenamiento requerido en comparación con float32. Esta reducción hace práctico almacenar y consultar vectores de alta dimensión a gran escala.
Eficiencia del almacenamiento y control de precisión
Elige el tipo base que sea apropiado para la carga de trabajo:
- Utiliza float16 para almacenamiento compacto cuando se acepta una precisión reducida.
- Usa float32 para uso general y cargas de trabajo que requieren mayor precisión.
Disponibilidad de funcionalidades
Los vectores de media precisión (float16) están generalmente disponibles en Azure SQL Database, Azure SQL Managed Instance y SQL database en Microsoft Fabric. No se requiere ninguna configuración de vista previa.
Los vectores de media precisión (float16) están disponibles en vista previa en SQL Server 2025. Habilita la opción de configuración de ámbito de base de datos
PREVIEW_FEATURESantes de usarVECTOR(..., float16). Para más información, véase PREVIEW_FEATURES = { ON | OFF }.ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES = ON; GO
Examples
A. Definir columnas vectoriales
El siguiente ejemplo define columnas separadas que usan el tipo base predeterminado float32 y el tipo explícito float16 :
CREATE TABLE dbo.Float32Vectors
(
id int PRIMARY KEY,
VectorColumn vector(3)
);
CREATE TABLE dbo.Float16Vectors
(
id int PRIMARY KEY,
VectorColumn vector(3, float16)
);
B. Almacenar y comparar vectores float16
El siguiente ejemplo crea una tabla con una columna vectorial float16 , inserta datos de muestra y utiliza VECTOR_DISTANCE para encontrar los tres vectores más cercanos:
CREATE TABLE dbo.Articles
(
id int PRIMARY KEY,
title nvarchar(100),
content nvarchar(max),
embedding vector(5, float16)
);
INSERT INTO dbo.Articles (id, title, content, embedding)
VALUES
(1, N'Intro to AI', N'This article introduces AI concepts.',
'[0.1, 0.2, 0.3, 0.4, 0.5]'),
(2, N'Deep Learning', N'Deep learning is a subset of ML.',
'[0.2, 0.1, 0.4, 0.3, 0.6]'),
(3, N'Neural Networks', N'Neural networks are powerful models.',
'[0.3, 0.3, 0.2, 0.5, 0.1]'),
(4, N'Machine Learning Basics', N'ML basics for beginners.',
'[0.4, 0.5, 0.1, 0.2, 0.3]'),
(5, N'Advanced AI', N'Exploring advanced AI techniques.',
'[0.5, 0.4, 0.6, 0.1, 0.2]');
DECLARE @QueryVector vector(5, float16) =
'[0.3, 0.3, 0.3, 0.3, 0.3]';
SELECT TOP (3)
id,
title,
VECTOR_DISTANCE('cosine', @QueryVector, embedding) AS distance
FROM dbo.Articles
ORDER BY distance;
Nota:
Un índice vectorial requiere al menos 100 filas con valores vectoriales no NULL. Para requisitos y ejemplos, véase CREATE VECTOR INDEX.
C. Inspección de metadatos de tipo base vectorial
La consulta siguiente confirma el tipo base real y las dimensiones de una columna vectorial :
--Inspect Vector Base type Metadata in sys.columns
SELECT name AS column_name,
system_type_id,
user_type_id,
vector_dimensions,
vector_base_type,
vector_base_type_desc
FROM sys.columns
WHERE object_id = OBJECT_ID('dbo.Articles');
Columnas de salida:
vector_dimensions: número de dimensiones definidas para el vector.vector_base_type: código numérico interno para el tipo base:-
0= float32 -
1= float16
-
vector_base_type_desc: descripción legible del tipo base.
Admitida conversión implícita y explícita
SQL Server admite la conversión implícita y explícita de cadenas varchar, nvarchar y json en VECTOR(<dimension_count>, float16), siempre y cuando el vector se declare con un recuento de dimensiones explícito.
DECLARE @j AS JSON = '[1.0, 2.0, 3.0]';
DECLARE @v AS VECTOR(3, float16);
SET @v = CAST (@j AS VECTOR(3, float16)); -- Explicit conversion from JSON to float16
DECLARE @v1 AS VARCHAR (50) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(3, float16);
SET @v2 = CAST (@v1 AS VECTOR(3, float16)); -- Explicit conversion from VARCHAR to float16
DECLARE @v1 AS NVARCHAR (50) = N'[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(3, float16);
SET @v2 = CAST (@v1 AS VECTOR(3, float16)); -- Explicit conversion from NVARCHAR to float16
La conversión implícita solo se admite cuando el tipo de vector de destino está totalmente declarado.
-- Implicit conversion from VARCHAR to float16
DECLARE @v1 AS VARCHAR (50) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(3, float16);
SET @v2 = @v1;
-- Implicit conversion from NVARCHAR to float16
DECLARE @v1 AS NVARCHAR (50) = N'[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(3, float16);
SET @v2 = @v1;
--From JSON_ARRAY to VECTOR
DECLARE @v3 AS VECTOR(3, float16) = JSON_ARRAY(1.0, 2.0, 3.0);
Escenarios no admitidos o propensos a errores
En los ejemplos siguientes se resaltan errores y limitaciones comunes al trabajar con el tipo de datos vector float de media precisión en SQL Server.
Conversión explícita e implícita entre los tipos base float32 y float16
ACTUALMENTE, SQL Server no admite la conversión implícita entre VECTOR(float32) y VECTOR(float16).
Además, la conversión explícita mediante CAST o CONVERT está bloqueada actualmente.
DECLARE @v1 AS VECTOR(3, float16);
DECLARE @v2 AS VECTOR(3, float32) = '[1.0, 2.0, 3.0]';
SET @v1 = CAST (@v2 AS VECTOR(3, float16)); -- Explicit conversion from float32 to float16
Se devuelve el siguiente error:
Error: Msg 42238, Level 16, State 1, Line 61
Conversion of vector from data type float32 to float16 is not allowed.
Error de coincidencia de dimensiones
No se permite la conversión entre vectores con dimensiones no coincidentes y genera un error de coincidencia de dimensión.
DECLARE @v1 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(4, float16) = NULL;
SET @v1 = @v2;
Se devuelve el siguiente error:
Error: Msg 42204, Level 16, State 1, Line 10
The vector dimensions 4 and 3 do not match
Control nulo
Si un vector se declara sin un recuento de dimensiones, al asignarle un valor se produce un error.
Este ejemplo funciona:
DECLARE @v1 AS VECTOR(3, float16) = NULL;
DECLARE @v2 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2;
Sin embargo, si no se especifica el recuento de dimensiones, genera un error:
DECLARE @v1 AS VECTOR(float16) = NULL;
DECLARE @v2 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2;
Valores fuera de rango
Los valores fuera de rango para float16 (por ejemplo, valores superiores a 65504.0) generan un error durante la asignación.
DECLARE @v AS VECTOR(3, float16) = '[1.0, 2.0, 70000.0]';
Se devuelve el siguiente error:
Input JSON contains out-of-range values for float16
Tipos base mixtos en funciones
Los tipos base mixtos en funciones como VECTOR_DISTANCE no se admiten y generan un error de tipo.
DECLARE @v1 AS VECTOR(3, float32) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(3, float16) = '[1, 2, 3]';
SELECT VECTOR_DISTANCE('euclidean', @v1, @v2);
Se devuelve el siguiente error:
VECTOR_DISTANCE does not support different base types
Arquitectura no admitida
Las arquitecturas Arm64 no soportan float16. Usar este tipo provoca un error en tiempo de ejecución.
DECLARE @v1 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(3, int) = '[1, 2, 3]';
SELECT VECTOR_DISTANCE('euclidean', @v1, @v2);
Se devuelve el siguiente error:
float16 is not supported on ARM64 architecture
Desbordamiento de SIMD
Una sola instrucción, varias operaciones basadas en datos (SIMD), como AVX2 o SSE4.2, pueden producir errores de desbordamiento si los valores superan los intervalos que se pueden representar.
DECLARE @v AS VECTOR(8) = '[-2.9e+38, ..., 2.9e+38]';
SELECT VECTOR_NORM(@v, 'norm1');
El comportamiento depende de la ARITHABORT configuración:
-
ARITHABORT ONda como resultado un error -
ARITHABORT OFFda como resultadoNULL
Compatibilidad con herramientas
SQL Server Management Studio (SSMS) actualmente no distingue entre float32 y float16 en la interfaz de usuario. Consulta sys.columns para confirmar el tipo base que usa una columna vectorial.
Soporte para controladores
Los siguientes controladores soportan transporte binario nativo para vectores float16 :
- El controlador JDBC 13.4 de Microsoft para SQL Server y versiones posteriores soporta serialización y deserialización IEEE 754 entre valores Java
Float[]y el formato wire de media precisión. - El controlador ODBC de Microsoft 18.7.1 para SQL Server y versiones posteriores soporta el subtipo de vector float16.
Utiliza estas versiones de controladores o posteriores para enviar y recibir vectores float16 en formato binario nativo. Los controladores que no admiten el transporte nativo de float16 pueden trabajar con vectores representados como varchar(max) arrays en JSON.
Nota:
Todas las limitaciones que se aplican al tipo vectorial predeterminado con el tipo base float32 también se aplican a VECTOR(..., float16), salvo que se indique lo contrario.