Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2025 (17.x)
Base de Dados SQL do Azure
Azure SQL Managed Instance
SQL database in Microsoft Fabric
O tipo de dados vetorial suporta um tipo base opcional. Por defeito, o vector usa float32. Pode especificar float16 (meia-precisão) quando a precisão reduzida for aceitável. O float16 fornece uma representação mais compacta que pode reduzir o armazenamento e melhorar o desempenho.
Um vetor de vírgula flutuante de meia precisão é uma sequência de números em que cada número usa o formato de vírgula flutuante float16 de 16 bits. Esta representação utiliza metade do armazenamento do formato float32 de 32 bits. Utilize float16 para reduzir o armazenamento e o consumo de memória em cargas de trabalho como embeddings, pesquisa semântica e aprendizagem automática.
O float16 oferece menos precisão numérica e um alcance numérico menor do que o float32. Este compromisso torna o float16 adequado para cenários de similaridade aproximada, mas menos adequado para cargas de trabalho que exigem aritmética de alta precisão ou fidelidade numérica exata.
Syntax
Para usar valores de meia precisão, especifique float16 como tipo base vetorial:
column_name VECTOR ( <dimensions> [ , <base_type> ] ) [ NOT NULL | NULL ]
Se omitires <base_type>, o padrão é float32.
Principais benefícios do float16
Aumento da dimensionalidade
O SQL Database Engine suporta vetores com até 3.996 dimensões ao usar float16, comparado com 1.998 dimensões ao usar float32. As dimensões adicionais suportam embeddings gerados por modelos que produzem mais de 1.998 valores.
Armazenamento reduzido e espaço ocupado pela memória
Armazenar elementos vetoriais num formato de 16 bits reduz o armazenamento necessário em comparação com o float32. Esta redução torna prático armazenar e consultar vetores de alta dimensão em grande escala.
Eficiência de armazenamento e controle de precisão
Escolha o tipo base que seja apropriado para a carga de trabalho:
- Utilize float16 para armazenamento compacto quando uma precisão reduzida for aceitável.
- Utilize float32 para uso geral e cargas de trabalho que exijam maior precisão.
Disponibilidade de funcionalidades
Vetores de meia-precisão (float16) estão geralmente disponíveis no Base de Dados SQL do Azure, Azure SQL Managed Instance e SQL database no Microsoft Fabric. Não é necessária qualquer configuração de pré-visualização.
Vetores de meia-precisão (float16) estão disponíveis em pré-visualização no SQL Server 2025. Ative a
PREVIEW_FEATURESopção de configuração com âmbito de base de dados antes de usarVECTOR(..., float16). Para mais informações, veja PREVIEW_FEATURES = { ON | DESLIGADO }.ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES = ON; GO
Examples
A. Defina colunas vetoriais
O exemplo seguinte define colunas separadas que usam o tipo de base padrão float32 e o 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. Armazenar e comparar vetores float16
O exemplo seguinte cria uma tabela com uma coluna vetorial float16 , insere dados de amostra e utiliza VECTOR_DISTANCE para encontrar os três vetores mais próximos:
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;
Observação
Um índice vetorial requer pelo menos 100 linhas com valores vetoriais não NULL. Para requisitos e exemplos, veja CREATE VECTOR INDEX.
C. Inspecionar metadados do tipo base vetorial
A consulta a seguir confirma o tipo de base real e as dimensões de uma coluna vetorial :
--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');
Colunas de saída:
vector_dimensions: Número de dimensões definidas para o vetor.vector_base_type: Código numérico interno para o tipo de base:-
0= float32 -
1= float16
-
vector_base_type_desc: Descrição do tipo base legível por humanos.
Conversão implícita ou explícita suportada
O SQL Server oferece suporte à conversão implícita e explícita de cadeias de caracteres varchar, nvarchar e json para VECTOR(<dimension_count>, float16), desde que o vetor seja declarado com uma contagem de dimensões explícita.
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
A conversão implícita é suportada somente quando o tipo de vetor de destino é 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);
Cenários sem suporte ou propensos a erros
Os exemplos a seguir destacam erros e limitações comuns ao trabalhar com o tipo de dados de vetor flutuante de meia precisão no SQL Server.
Conversão explícita e implícita entre os tipos de base float32 e float16
Atualmente, o SQL Server não oferece suporte à conversão implícita entre VECTOR(float32) e VECTOR(float16).
Além disso, a conversão explícita usando CAST ou CONVERT está bloqueada no momento.
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
O seguinte erro é devolvedo:
Error: Msg 42238, Level 16, State 1, Line 61
Conversion of vector from data type float32 to float16 is not allowed.
Incompatibilidade de dimensões
A conversão entre vetores com dimensões incompatíveis não é permitida e gera um erro de incompatibilidade de dimensão.
DECLARE @v1 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(4, float16) = NULL;
SET @v1 = @v2;
O seguinte erro é devolvedo:
Error: Msg 42204, Level 16, State 1, Line 10
The vector dimensions 4 and 3 do not match
Tratamento nulo
Se um vetor for declarado sem uma contagem de dimensões, atribuir um valor a ele gerará um erro.
Este exemplo funciona:
DECLARE @v1 AS VECTOR(3, float16) = NULL;
DECLARE @v2 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2;
No entanto, se a contagem de dimensão não for especificada, gera um erro:
DECLARE @v1 AS VECTOR(float16) = NULL;
DECLARE @v2 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2;
Valores fora do intervalo
Valores fora do intervalo para float16 (por exemplo, valores acima de 65504.0) geram um erro durante a atribuição.
DECLARE @v AS VECTOR(3, float16) = '[1.0, 2.0, 70000.0]';
O seguinte erro é devolvedo:
Input JSON contains out-of-range values for float16
Tipos de base mistos em funções
Tipos de base mistos em funções como VECTOR_DISTANCE não são suportados e gera um erro 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);
O seguinte erro é devolvedo:
VECTOR_DISTANCE does not support different base types
Arquitetura não suportada
As arquiteturas Arm64 não suportam float16. Usar este tipo causa um erro em tempo de execução.
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);
O seguinte erro é devolvedo:
float16 is not supported on ARM64 architecture
Excesso de SIMD
Operações do tipo instrução única e dados múltiplos (SIMD), como AVX2 ou SSE4.2, podem produzir erros de estouro se os valores excederem os intervalos representáveis.
DECLARE @v AS VECTOR(8) = '[-2.9e+38, ..., 2.9e+38]';
SELECT VECTOR_NORM(@v, 'norm1');
O comportamento depende da configuração do ARITHABORT.
-
ARITHABORT ONresulta num erro -
ARITHABORT OFFresultados emNULL
Suporte de ferramentas
O SQL Server Management Studio (SSMS) atualmente não distingue entre float32 e float16 na interface do utilizador. Consulta sys.columns para confirmar o tipo base usado por uma coluna vetorial.
Suporte ao motorista
Os seguintes drivers suportam transporte binário nativo para vetores float16 :
-
O Microsoft JDBC Driver 13.4 para SQL Server e versões posteriores suportam serialização e desserialização IEEE 754 entre valores Java
Float[]e o formato wire-half precision. - O Microsoft ODBC Driver 18.7.1 para SQL Server e versões posteriores suportam o subtipo de vetor float16.
Use estas versões do driver ou posteriores para enviar e receber vetores float16 em formato binário nativo. Controladores que não suportam transporte nativo de float16 podem funcionar com vetores representados como varchar(max) matrizes JSON.
Observação
Todas as limitações que se aplicam ao tipo de vetor padrão com o tipo base float32 também se aplicam a VECTOR(..., float16), salvo indicação em contrário.