Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S'applique à : SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
Base de données SQL dans Microsoft Fabric
Le type de données vectoriel prend en charge un type de base optionnel. Par défaut, Vector utilise float32. Vous pouvez spécifier float16 (demi-précision) lorsque la réduction de la précision est acceptable. Float16 offre une représentation plus compacte qui peut réduire le stockage et améliorer les performances.
Un vecteur à virgule flottante à demi-précision est un tableau de nombres dans lequel chaque nombre utilise le format float virgule flottante de 16 bits. Cette représentation utilise la moitié du stockage du format float32 32 bits. Utilisez float16 pour réduire la mémoire et la consommation de mémoire pour des charges de travail telles que les embeddings, la recherche sémantique et l’apprentissage automatique.
Float16 offre une précision numérique moindre et une plage numérique plus petite que float32. Ce compromis rend float16 adapté aux scénarios de similarité approximative, mais moins adapté aux charges de travail nécessitant une arithmétique de haute précision ou une fidélité numérique exacte.
Syntax
Pour utiliser des valeurs de demi-précision, spécifiez float16 comme type de base vectorielle :
column_name VECTOR ( <dimensions> [ , <base_type> ] ) [ NOT NULL | NULL ]
Si vous omettez <base_type>, le défaut est float32.
Principaux avantages de float16
Dimensionnalité accrue
Le SQL Moteur de base de données prend en charge des vecteurs allant jusqu’à 3 996 dimensions avec float16, contre 1 998 dimensions avec float32. Les dimensions supplémentaires supportent les embeddings générés par des modèles produisant plus de 1 998 valeurs.
Réduction de l’encombrement du stockage et de la mémoire
Le stockage d’éléments vectoriels dans un format 16 bits réduit la capacité de stockage nécessaire par rapport à float32. Cette réduction rend pratique le stockage et l’interrogation de vecteurs de haute dimension à grande échelle.
Efficacité du stockage et contrôle de précision
Choisissez le type de base qui convient à la charge de travail :
- Utilisez float16 pour un stockage compact lorsque la réduction de la précision est acceptable.
- Utilisez float32 pour un usage général et des charges de travail nécessitant plus de précision.
Disponibilité des fonctionnalités
Les vecteurs demi-précision (float16) sont généralement disponibles dans Azure SQL Database, Azure SQL Managed Instance et SQL Database dans Microsoft Fabric. Aucune configuration de prévisualisation n’est requise.
Les vecteurs demi-précision (float16) sont disponibles en aperçu dans SQL Server 2025. Activez l’option de configuration délimitée à la base de données
PREVIEW_FEATURESavant d’utiliserVECTOR(..., float16). Pour plus d’informations, voir PREVIEW_FEATURES = { ON | OFF }.ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES = ON; GO
Examples
R : Définir les colonnes vectorielles
L’exemple suivant définit des colonnes séparées qui utilisent le type de base par défaut float32 et le type explicite de base 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. Stocker et comparer les vecteurs float16
L’exemple suivant crée une table avec une colonne vectorielle float16 , insère des données d’échantillon, et utilise VECTOR_DISTANCE pour trouver les trois vecteurs les plus proches :
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;
Note
Un indice vectoriel nécessite au moins 100 lignes avec des valeurs vectorielles non NULL. Pour des exigences et des exemples, voir CREATE VECTOR INDEX.
C. Inspecter les métadonnées de type de base vectorielle
La requête suivante confirme le type de base réel et les dimensions d’une colonne vectorielle :
--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');
Colonnes de sortie :
vector_dimensions: nombre de dimensions définies pour le vecteur.vector_base_type: code numérique interne pour le type de base :-
0= float32 -
1= float16
-
vector_base_type_desc: description lisible par l’homme du type de base.
Prise en charge des conversions implicite et explicite
SQL Server prend en charge la conversion implicite et explicite à partir de chaînes varchar, nvarchar et json en VECTOR(<dimension_count>, float16), à condition que le vecteur soit déclaré avec un nombre de dimensions explicite.
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 conversion implicite est prise en charge uniquement lorsque le type de vecteur cible est entièrement déclaré.
-- 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);
Scénarios non pris en charge ou sujets aux erreurs
Les exemples suivants mettent en évidence les erreurs et limitations courantes lors de l’utilisation du type de données de vecteur float demi-précision dans SQL Server.
Conversion explicite et implicite entre les types de base float32 et float16
SQL Server ne prend actuellement pas en charge la conversion implicite entre VECTOR(float32) et VECTOR(float16).
En outre, la conversion explicite à l’aide CAST ou CONVERT est actuellement bloquée.
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
L’erreur suivante est retournée :
Error: Msg 42238, Level 16, State 1, Line 61
Conversion of vector from data type float32 to float16 is not allowed.
Incompatibilité des dimensions
La conversion entre vecteurs avec des dimensions incompatibles n’est pas autorisée et génère une erreur d’incompatibilité de dimension.
DECLARE @v1 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(4, float16) = NULL;
SET @v1 = @v2;
L’erreur suivante est retournée :
Error: Msg 42204, Level 16, State 1, Line 10
The vector dimensions 4 and 3 do not match
Gestion des valeurs Null
Si un vecteur est déclaré sans nombre de dimensions, l’affectation d’une valeur à celle-ci génère une erreur.
Cet exemple fonctionne :
DECLARE @v1 AS VECTOR(3, float16) = NULL;
DECLARE @v2 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2;
Toutefois, si le nombre de dimensions n’est pas spécifié, il génère une erreur :
DECLARE @v1 AS VECTOR(float16) = NULL;
DECLARE @v2 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2;
Valeurs en dehors de la plage autorisée
Les valeurs hors plage pour float16 (par exemple, les valeurs supérieures à 65504.0) génèrent une erreur lors de l’affectation.
DECLARE @v AS VECTOR(3, float16) = '[1.0, 2.0, 70000.0]';
L’erreur suivante est retournée :
Input JSON contains out-of-range values for float16
Types de base mixtes dans les fonctions
Les types de base mixtes dans les fonctions comme VECTOR_DISTANCE ne sont pas pris en charge et déclenchent une erreur de type.
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);
L’erreur suivante est retournée :
VECTOR_DISTANCE does not support different base types
Architecture non prise en charge
Les architectures Arm64 ne supportent pas float16. Utiliser ce type provoque une erreur d’exécution.
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);
L’erreur suivante est retournée :
float16 is not supported on ARM64 architecture
Dépassement de capacité SIMD
Les opérations basées sur une seule instruction et plusieurs données (SIMD), telles qu’AVX2 ou SSE4.2, peuvent produire des erreurs de dépassement si les valeurs dépassent les plages représentables.
DECLARE @v AS VECTOR(8) = '[-2.9e+38, ..., 2.9e+38]';
SELECT VECTOR_NORM(@v, 'norm1');
Le comportement dépend du ARITHABORT paramètre :
-
ARITHABORT ONentraîne une erreur -
ARITHABORT OFFa pour résultatNULL
Prise en charge des outils
SQL Server Management Studio (SSMS) ne fait actuellement pas de distinction entre float32 et float16 dans l'interface utilisateur. Interrogez sys.columns pour confirmer le type de base utilisé par une colonne vectorielle.
Support des pilotes
Les pilotes suivants prennent en charge le transport binaire natif pour les vecteurs float16 :
- Le pilote Microsoft JDBC 13.4 pour SQL Server et versions ultérieures prennent en charge la sérialisation et la désérialisation IEEE 754 entre les valeurs
Float[]Java et le format wire à demi-précision. - Le pilote Microsoft ODBC 18.7.1 pour SQL Server et les versions ultérieures prennent en charge le sous-type de vecteur float16.
Utilisez ces versions de pilotes ou ultérieures pour envoyer et recevoir des vecteurs float16 en format binaire natif. Les pilotes qui ne prennent pas en charge le transport natif de float16 peuvent fonctionner avec des vecteurs représentés sous forme de varchar(max) tableaux JSON.
Note
Toutes les limitations qui s’appliquent au type de vecteur par défaut avec le type de base float32 s’appliquent également à VECTOR(..., float16), sauf indication contraire.