Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: SQL Server 2025 (17.x)
A partir de SQL Server 2025 (17.x), puede especificar el tipo base subyacente para el tipo de datos vectorial . De forma predeterminada, el vector usa float32 como tipo base.
float16 (precisión media) es un tipo alternativo para escenarios en los que se acepta una precisión reducida. Ofrece una alternativa más compacta al reducir el almacenamiento y mejorar el rendimiento.
Un vector de punto flotante de precisión media es una matriz o colección de números, donde cada número se representa mediante un formato de punto flotante de precisión media () de 16 bits (float16). Esta representación consume la mitad de la memoria de un float estándar de precisión única de 32 bits. Use estos tipos de vectores para ahorrar memoria y ancho de banda, especialmente en bases de datos de aprendizaje profundo y vectores, al intercambiar cierta precisión para mejorar la eficacia.
Aunque float16 ofrece importantes ventajas de almacenamiento y rendimiento, proporciona una precisión numérica reducida en comparación con float32. Esta compensación hace que sea adecuado para escenarios aproximados de similitud, como la búsqueda semántica, pero menos adecuado para las cargas de trabajo que exigen una fidelidad numérica exacta o aritmética de alta precisión.
Ventajas clave de la compatibilidad con float16
Aumento del soporte para la dimensionalidad
SQL Server admite vectores con hasta 3996 dimensiones (
1998 × 2) al usarfloat16. Esta característica duplica la limitación de 1998 dimensiones parafloat32. Esta funcionalidad permite incrustaciones más expresivas y compatibilidad con modelos más grandes, por ejemplotext-embedding-large.Reducción de la superficie de almacenamiento y memoria
El almacenamiento de vectores en un formato de 16 bits reduce significativamente la cantidad de almacenamiento necesario en comparación con los vectores de precisión completa. Esto hace que sea factible almacenar y consultar vectores de alta dimensión a escala. Esta optimización también mejora la densidad de datos, lo que puede mejorar el rendimiento de las consultas en escenarios de búsqueda vectorial.
Eficiencia del almacenamiento y control de precisión
Elija el tipo base más adecuado:
-
float16para almacenamiento compacto -
float32para tareas de uso general y de mayor precisión
Esta flexibilidad garantiza un uso óptimo de los recursos sin poner en peligro la precisión de la aplicación.
-
Sintaxis de ejemplo
La sintaxis de uso es similar al tipo de datos vectorial . Sin embargo, para usar float16, especifique explícitamente el tipo base.
column_name VECTOR ( <dimensions> [, <base_type>] ) [ NOT NULL | NULL ]
Disponibilidad de funcionalidades
float16 vector está actualmente disponible para vista previa. Para probarlo, habilite la PREVIEW_FEATURES opción de configuración con ámbito de base de datos. Para obtener más información, revise PREVIEW_FEATURES = { ON | OFF }.
float16 Los vectores se transmiten actualmente como varchar(max) (matriz JSON) a través de TDS. La compatibilidad con el transporte binario para float16 no está disponible actualmente.
ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES = ON;
GO
Examples
Defina una columna vector en una CREATE TABLE instrucción utilizando ya sea el tipo base predeterminado o uno explícito.
De forma predeterminada, el tipo base es float32.
-- Default: float32
CREATE TABLE ExampleTable
(
id INT PRIMARY KEY,
VectorColumn VECTOR(3)
);
Para usar la precisión media, especifique float16 explícitamente.
-- Explicit float16
CREATE TABLE ExampleTable
(
id INT PRIMARY KEY,
VectorColumn VECTOR(3, float16)
);
En el ejemplo siguiente se crea una tabla con una columna de vector float de precisión media y se insertan datos en ella.
-- Step 0: Enable Preview Features
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO
-- Step 1: Create a Table with a VECTOR(5, float16) Column
CREATE TABLE dbo.Articles
(
id INT PRIMARY KEY,
title NVARCHAR(100),
content NVARCHAR(MAX),
embedding VECTOR(5, float16)
);
-- Step 2: Insert Sample Data
INSERT INTO Articles (id, title, content, embedding)
VALUES
(1, 'Intro to AI', 'This article introduces AI concepts.', '[0.1, 0.2, 0.3, 0.4, 0.5]'),
(2, 'Deep Learning', 'Deep learning is a subset of ML.', '[0.2, 0.1, 0.4, 0.3, 0.6]'),
(3, 'Neural Networks', 'Neural networks are powerful models.', '[0.3, 0.3, 0.2, 0.5, 0.1]'),
(4, 'Machine Learning Basics', 'ML basics for beginners.', '[0.4, 0.5, 0.1, 0.2, 0.3]'),
(5, 'Advanced AI', 'Exploring advanced AI techniques.', '[0.5, 0.4, 0.6, 0.1, 0.2]');
-- Step 3: Perform a Vector Similarity Search Using VECTOR_DISTANCE function
DECLARE @v AS VECTOR(5, float16) = '[0.3, 0.3, 0.3, 0.3, 0.3]';
SELECT TOP (3)
id,
title,
VECTOR_DISTANCE('cosine', @v, embedding) AS distance
FROM dbo.Articles
ORDER BY distance;
-- Step 4: Optionally Create a Vector Index
CREATE VECTOR INDEX vec_idx ON Articles(embedding)
WITH (
metric = 'cosine',
type = 'diskANN'
);
-- Step 5: Perform a Vector Similarity Search
DECLARE @qv AS VECTOR(5, float16) = '[0.3, 0.3, 0.3, 0.3, 0.3]';
SELECT
t.id,
t.title,
t.content,
s.distance
FROM
VECTOR_SEARCH(
table = Articles AS t,
column = embedding,
similar_to = @qv,
metric = 'cosine',
top_n = 3
) AS s
ORDER BY s.distance, t.title;
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=float321=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 del intervalo para float16 (por ejemplo, por encima de 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
float16 no se admite en arquitecturas arm64 y su uso genera 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) no distingue actualmente entre float32 y float16 en la interfaz de usuario. Use sys.columns para confirmar el tipo base real usado en un esquema.
Compatibilidad con el transporte binario para vectores float16 aún no está disponible
float16 Los vectores se transmiten actualmente como varchar(max) (matriz JSON) a través de TDS. La compatibilidad con el transporte binario para float16 aún no está disponible en controladores como ODBC, JDBC y .NET.
Nota:
Todas las limitaciones que se aplican al tipo de vector predeterminado (con float32) también se aplican a VECTOR(float16).