Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: SQL Server 2025 (17.x)
Database SQL di Azure
Istanza gestita di SQL di Azure
Database SQL in Microsoft Fabric
Il tipo di dati vettoriale supporta un tipo base opzionale. Di default, Vector utilizza float32. Puoi specificare float16 (mezza precisione) quando è accettabile una precisione ridotta. Float16 fornisce una rappresentazione più compatta che può ridurre lo storage e migliorare le prestazioni.
Un vettore in virgola mobile a mezza precisione è un array di numeri in cui ogni numero utilizza il formato in virgola mobile float16 a 16 bit. Questa rappresentazione utilizza metà della memoria del formato float32 a 32 bit. Utilizza float16 per ridurre il consumo di archiviazione e memoria per carichi di lavoro come embedding, ricerca semantica e machine learning.
Float16 offre una precisione numerica inferiore e un intervallo numerico più ridotto rispetto a Float32. Questo compromesso rende float16 adatto a scenari di similarità approssimativa, ma meno adatto a carichi di lavoro che richiedono aritmetica ad alta precisione o fedeltà numerica esatta.
Syntax
Per usare valori a mezza precisione, specifica float16 come tipo base vettoriale:
column_name VECTOR ( <dimensions> [ , <base_type> ] ) [ NOT NULL | NULL ]
Se ometti <base_type>, il predefinito è float32.
Principali benefici di float16
Aumento della dimensionalità
Il SQL motore di database supporta vettori fino a 3.996 dimensioni usando float16, rispetto a 1.998 dimensioni usando float32. Le dimensioni aggiuntive supportano embedding generati da modelli che producono più di 1.998 valori.
Riduzione dell'archiviazione e del footprint di memoria
Memorizzare elementi vettoriali in un formato a 16 bit riduce la memoria richiesta rispetto a float32. Questa riduzione rende pratico memorizzare e interrogare vettori ad alta dimensione su larga scala.
Efficienza di archiviazione e controllo della precisione
Scegli il tipo base più adatto al carico di lavoro:
- Usa float16 per uno stoccaggio compatto quando è accettabile una precisione ridotta.
- Usa float32 per l'uso generale e per carichi di lavoro che richiedono maggiore precisione.
Disponibilità delle funzionalità
I vettori a mezza precisione (float16) sono generalmente disponibili in database SQL di Azure, Istanza gestita di SQL di Azure e database SQL in Microsoft Fabric. Non è richiesta alcuna configurazione di anteprima.
I vettori a mezza precisione (float16) sono disponibili in anteprima in SQL Server 2025. Abilita l'opzione
PREVIEW_FEATURESdi configurazione con ambito del database prima di usareVECTOR(..., float16). Per maggiori informazioni, vedi PREVIEW_FEATURES = { ON | OFF }.ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES = ON; GO
Esempi
A. Definisci colonne vettoriali
Il seguente esempio definisce colonne separate che utilizzano il tipo base predefinito float32 e il tipo base esplicito 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. Memorizzare e confrontare i vettori float16
Il seguente esempio crea una tabella con una colonna vettoriale float16 , inserisce dati campioni e utilizza VECTOR_DISTANCE per trovare i tre vettori più vicini:
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;
Annotazioni
Un indice vettoriale richiede almeno 100 righe con valori vettoriali non NULL. Per requisiti ed esempi, vedi CREATE VECTOR INDEX.
C. Esaminare i metadati del tipo di base vettoriale
La query seguente conferma il tipo di base e le dimensioni effettive di una colonna vettoriale :
--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');
Colonne di output:
vector_dimensions: numero di dimensioni definite per il vettore.vector_base_type: codice numerico interno per il tipo di base:-
0= float32 -
1= float16
-
vector_base_type_desc: descrizione leggibile del tipo di base.
Conversione implicita e esplicita supportata
SQL Server supporta sia la conversione implicita che esplicita da stringhe varchar, nvarchar e json a VECTOR(<dimension_count>, float16), purché il vettore venga dichiarato con un conteggio delle dimensioni esplicito.
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 conversione implicita è supportata solo quando il tipo di vettore di destinazione è completamente dichiarato.
-- 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);
Scenari non supportati o soggetti a errori
Negli esempi seguenti vengono evidenziati errori e limitazioni comuni quando si usa il tipo di dati float vector a metà precisione in SQL Server.
Conversione esplicita e implicita tra i tipi di base float32 e float16
SQL Server attualmente non supporta la conversione implicita tra VECTOR(float32) e VECTOR(float16).
Inoltre, la conversione esplicita con CAST o CONVERT è attualmente bloccata.
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
Viene restituito l'errore seguente:
Error: Msg 42238, Level 16, State 1, Line 61
Conversion of vector from data type float32 to float16 is not allowed.
Mancata corrispondenza delle dimensioni
La conversione tra vettori con dimensioni non corrispondenti non è consentita e genera un errore di mancata corrispondenza della dimensione.
DECLARE @v1 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(4, float16) = NULL;
SET @v1 = @v2;
Viene restituito l'errore seguente:
Error: Msg 42204, Level 16, State 1, Line 10
The vector dimensions 4 and 3 do not match
Gestione dei valori Null
Se un vettore viene dichiarato senza un conteggio delle dimensioni, l'assegnazione di un valore a esso genera un errore.
Questo esempio funziona:
DECLARE @v1 AS VECTOR(3, float16) = NULL;
DECLARE @v2 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2;
Tuttavia, se il conteggio delle dimensioni non viene specificato, genera un errore:
DECLARE @v1 AS VECTOR(float16) = NULL;
DECLARE @v2 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2;
Valori non compresi nell'intervallo
I valori fuori dalla gamma per float16 (ad esempio, valori superiori a 65504.0) generano un errore durante l'assegnazione.
DECLARE @v AS VECTOR(3, float16) = '[1.0, 2.0, 70000.0]';
Viene restituito l'errore seguente:
Input JSON contains out-of-range values for float16
Tipi di base misti nelle funzioni
I tipi di base misti nelle funzioni come VECTOR_DISTANCE non sono supportati e generano un errore di 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);
Viene restituito l'errore seguente:
VECTOR_DISTANCE does not support different base types
Architettura non supportata
Le architetture Arm64 non supportano float16. L'uso di questo tipo causa un errore di runtime.
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);
Viene restituito l'errore seguente:
float16 is not supported on ARM64 architecture
Overflow di SIMD
Operazioni basate su istruzione singola, dati multipli (SIMD), ad esempio AVX2 o SSE4.2, possono causare errori di overflow se i valori superano gli intervalli rappresentabili.
DECLARE @v AS VECTOR(8) = '[-2.9e+38, ..., 2.9e+38]';
SELECT VECTOR_NORM(@v, 'norm1');
Il comportamento dipende dall'impostazione ARITHABORT :
-
ARITHABORT ONgenera un errore -
ARITHABORT OFFrisultati inNULL
Supporto degli strumenti
SQL Server Management Studio (SSMS) attualmente non distingue tra float32 e float16 nell'interfaccia utente. Consulta sys.columns per confermare il tipo base usato da una colonna vettoriale.
Supporto per i driver
I seguenti driver supportano il trasporto binario nativo per i vettori float16 :
-
Microsoft JDBC Driver 13.4 per SQL Server e versioni successive supportano la serializzazione e la deserializzazione IEEE 754 tra i valori Java
Float[]e il formato di trasmissione a mezza precisione. - Il driver Microsoft ODBC 18.7.1 per SQL Server e versioni successive supportano il sottotipo di vettore float16.
Utilizzare queste versioni del driver o successive per inviare e ricevere vettori float16 in formato binario nativo. I driver che non supportano il trasporto nativo float16 possono lavorare con vettori rappresentati come varchar(max) array JSON.
Annotazioni
Tutte le limitazioni che si applicano al tipo vettoriale predefinito con il tipo base float32 si applicano anche a VECTOR(..., float16), salvo diversa indicazione.