Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
Het vectordatatype ondersteunt een optioneel basistype. Standaard gebruikt vectorfloat32. Je kunt float16 (half-precisie) specificeren wanneer verminderde precisie acceptabel is. float16 biedt een compactere weergave die opslag kan verminderen en de prestaties kan verbeteren.
Een half-precisie floating-point vector is een array van getallen waarbij elk getal het 16-bits floating-16 floating-point formaat gebruikt. Deze representatie gebruikt de helft van de opslag van het 32-bits float32-formaat . Gebruik float16 om het opslag- en geheugenverbruik te verminderen voor workloads zoals embeddings, semantisch zoeken en machine learning.
float16 biedt minder numerieke precisie en een kleiner numeriek bereik dan float32. Deze afweging maakt float16 geschikt voor scenario's met ongeveer gelijkenis, maar minder geschikt voor workloads die hoge precisie rekenkunde of exacte numerieke nauwkeurigheid vereisen.
Syntax
Om halfprecisiewaarden te gebruiken, specificeer float16 als vectorbasistype:
column_name VECTOR ( <dimensions> [ , <base_type> ] ) [ NOT NULL | NULL ]
Als je weglaat <base_type>, is de standaard float32.
Belangrijkste voordelen van float16
Verhoogde dimensionaliteit
De SQL Database Engine ondersteunt vectoren met maximaal 3.996 dimensies bij gebruik van float16, vergeleken met 1.998 dimensies bij gebruik van float32. De aanvullende dimensies ondersteunen embeddings die door modellen worden gegenereerd en meer dan 1.998 waarden produceren.
Verminderde opslag- en geheugenvoetafdruk
Het opslaan van vectorelementen in een 16-bits formaat vermindert de benodigde opslag vergeleken met float32. Deze reductie maakt het praktisch om hoogdimensionale vectoren op schaal op te slaan en te bevragen.
Efficiëntie en precisiebeheer van opslag
Kies het basistype dat geschikt is voor de werklast:
- Gebruik float16 voor compacte opslag wanneer de verminderde precisie acceptabel is.
- Gebruik float32 voor algemeen gebruik en workloads die meer precisie vereisen.
Beschikbaarheid van functies
Half-precision (float16) vectoren zijn over het algemeen beschikbaar in Azure SQL Database, Azure SQL Managed Instance en SQL database in Microsoft Fabric. Er is geen previewconfiguratie vereist.
Half-precision (float16) vectoren zijn beschikbaar in preview in SQL Server 2025. Schakel de configuratieoptie voor databereik
PREVIEW_FEATURESin voordat jeVECTOR(..., float16)gebruikt. Voor meer informatie, zie PREVIEW_FEATURES = { AAN | UIT }.ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES = ON; GO
Voorbeelden
Eén. Definieer vectorkolommen
Het volgende voorbeeld definieert aparte kolommen die het standaard float32-basistype en het expliciete float16-basistype gebruiken:
CREATE TABLE dbo.Float32Vectors
(
id int PRIMARY KEY,
VectorColumn vector(3)
);
CREATE TABLE dbo.Float16Vectors
(
id int PRIMARY KEY,
VectorColumn vector(3, float16)
);
B. Sla float16-vectoren op en vergelijk ze
Het volgende voorbeeld maakt een tabel met een float16-vectorkolom , voegt voorbeeldgegevens in en gebruikt VECTOR_DISTANCE het om de drie dichtstbijzijnde vectoren te vinden:
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;
Opmerking
Een vectorindex vereist minstens 100 rijen met niet-NULL vectorwaarden. Voor vereisten en voorbeelden, zie CREATE VECTOR INDEX.
C. Metagegevens van vectorbasistype controleren
De volgende query bevestigt het werkelijke basistype en de afmetingen van een vectorkolom :
--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');
Uitvoerkolommen:
vector_dimensions: Het aantal dimensies dat is gedefinieerd voor de vector.vector_base_type: Interne numerieke code voor het basistype:-
0= float32 -
1= float16
-
vector_base_type_desc: Leesbare beschrijving van het basistype.
Ondersteunde impliciete en expliciete conversie
SQL Server ondersteunt zowel impliciete als expliciete conversie van varchar-, nvarchar- en json-tekenreeksen naar VECTOR(<dimension_count>, float16), zolang de vector wordt gedeclareerd met een expliciet aantal dimensies.
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
Impliciete conversie wordt alleen ondersteund wanneer het doelvectortype volledig is gedeclareerd.
-- 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);
Niet-ondersteunde of foutgevoelige scenario's
In de volgende voorbeelden worden veelvoorkomende fouten en beperkingen gemarkeerd bij het werken met gegevenstype met een halve precisie float vector in SQL Server.
Expliciete en impliciete conversie tussen basistypen float32 en float16
SQL Server biedt momenteel geen ondersteuning voor impliciete conversie tussen VECTOR(float32) en VECTOR(float16).
Daarnaast is expliciete conversie met CAST of CONVERT momenteel geblokkeerd.
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
De volgende fout wordt geretourneerd:
Error: Msg 42238, Level 16, State 1, Line 61
Conversion of vector from data type float32 to float16 is not allowed.
Dimensie komt niet overeen
Conversie tussen vectoren met niet-overeenkomende dimensies is niet toegestaan en leidt tot een onjuiste dimensiefout.
DECLARE @v1 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(4, float16) = NULL;
SET @v1 = @v2;
De volgende fout wordt geretourneerd:
Error: Msg 42204, Level 16, State 1, Line 10
The vector dimensions 4 and 3 do not match
Nullverwerking
Als een vector wordt gedeclareerd zonder dimensieaantal, ontstaat er een fout wanneer er een waarde aan wordt toegekend.
Dit voorbeeld werkt:
DECLARE @v1 AS VECTOR(3, float16) = NULL;
DECLARE @v2 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2;
Als het aantal dimensies echter niet is opgegeven, wordt er een fout gegenereerd:
DECLARE @v1 AS VECTOR(float16) = NULL;
DECLARE @v2 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2;
Waarden buiten bereik
Waarden buiten bereik voor float16 (bijvoorbeeld waarden boven 65504,0) veroorzaken een fout tijdens de toewijzing.
DECLARE @v AS VECTOR(3, float16) = '[1.0, 2.0, 70000.0]';
De volgende fout wordt geretourneerd:
Input JSON contains out-of-range values for float16
Gemengde basistypen in functies
Gemengde basistypen in functies zoals VECTOR_DISTANCE worden niet ondersteund en veroorzaken een typefout.
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);
De volgende fout wordt geretourneerd:
VECTOR_DISTANCE does not support different base types
Niet-ondersteunde architectuur
Arm64-architecturen ondersteunen float16 niet. Het gebruik van dit type veroorzaakt een runtime-fout.
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);
De volgende fout wordt geretourneerd:
float16 is not supported on ARM64 architecture
SIMD-overflow
Eén instructie, op basis van meerdere gegevens (SIMD)-bewerkingen, zoals AVX2 of SSE4.2, kunnen overloopfouten veroorzaken als waarden groter zijn dan vertegenwoordigbare bereiken.
DECLARE @v AS VECTOR(8) = '[-2.9e+38, ..., 2.9e+38]';
SELECT VECTOR_NORM(@v, 'norm1');
Het gedrag is afhankelijk van de ARITHABORT instelling:
-
ARITHABORT ONresulteert in een fout -
ARITHABORT OFFresulteert inNULL
Ondersteuning voor hulpmiddelen
SQL Server Management Studio (SSMS) maakt momenteel geen onderscheid tussen float32 en float16 in de gebruikersinterface. Vraag sys.columns om het basistype te bevestigen dat door een vectorkolom wordt gebruikt.
Driverondersteuning
De volgende drivers ondersteunen native binair transport voor float16-vectoren :
-
Microsoft JDBC Driver 13.4 voor SQL Server en latere versies ondersteunen IEEE 754-serialisatie en deserialisatie tussen Java-waarden
Float[]en het half-precision wire-formaat. - Microsoft ODBC Driver 18.7.1 voor SQL Server en latere versies ondersteunt het float16 vector subtype.
Gebruik deze driverversies of hoger om float16-vectoren in systeemeigen binaire indeling te verzenden en te ontvangen. Drivers die geen native float16-transport ondersteunen, kunnen werken met vectoren die als varchar(max) JSON-arrays worden weergegeven.
Opmerking
Alle beperkingen die gelden voor het standaard vectortype met het float32-basistype gelden ook voor VECTOR(..., float16), tenzij anders vermeld.