Compartilhar via


VECTOR_DISTANCE (Transact-SQL) (versão prévia)

Aplica-se a: SQL Server 2025 (17.x) Versão prévia do Banco de Dados SQL do Azurebanco de dadosSQL do Banco de Dados SQL do Azure banco de dados SQL gerenciadono Microsoft Fabric

Observação

Esse tipo de dados está em versão prévia e está sujeito a alterações. Leia os termos de uso da versão prévia no SLA (Contratos de Nível de Serviço) para Serviços Online.

Calcula a distância entre dois vetores usando uma métrica de distância especificada. A distância do vetor é sempre exata e não usa nenhum índice de vetor, mesmo que disponível. Para usar um índice de vetor e, portanto, executar uma pesquisa de vetor aproximada, você deve usar a função VECTOR_SEARCH . Para saber mais sobre como funciona a indexação de vetores e a pesquisa de vetores e as diferenças entre a pesquisa exata e aproximada, consulte vetores no Mecanismo de Banco de Dados SQL.

Sintaxe

Convenções de sintaxe de Transact-SQL

VECTOR_DISTANCE ( distance_metric, vector1, vector2 )

Argumentos

distance_metric

Uma string com o nome da métrica de distância a ser usada para calcular a distância entre os dois vetores fornecidos. As seguintes métricas de distância são suportadas:

  • cosine - Distância do cosseno
  • euclidean - Distância euclidiana
  • dot - (Negativo) Produto escalar

vetor1

Uma expressão que é avaliada como tipo de dados de vetor .

vetor2

Uma expressão que é avaliada como tipo de dados de vetor .

Métricas de distância

Métrica Descrição Intervalo Exemplos
cosine Distância do cosseno (angular) [0, 2] 0: vetores idênticos
2: vetores opostos
euclidean Distância euclidiana [-∞, +∞] 0: vetores idênticos
dot Indicação de distância baseada em produto escalar,
obtido pelo cálculo do produto escalar negativo
[-∞, +∞] Números menores indicam vetores mais semelhantes

Valor retornado

A função retorna um valor escalar flutuante que representa a distância entre os dois vetores usando a métrica de distância especificada.

Um erro será retornado se distance_metric não for uma métrica válida e se os vetores fornecidos não forem do tipo de dados de vetor.

Exemplos

Os detalhes do banco de dados usado no exemplo podem ser encontrados aqui: Baixe e importe o artigo da Wikipédia com o Vector Embeddings.

Os exemplos assumem a existência de uma tabela nomeada wikipedia_articles com uma coluna title_vector do tipo vector que armazena as incorporações de títulos de artigos da Wikipédia. title_vector é considerado uma incorporação gerada com um modelo de incorporação como text-embedding-ada-002 ou text-embedding-3-small , que retorna vetores com 1.536 dimensões.

Para obter mais exemplos, incluindo soluções de ponta a ponta, acesse o repositório GitHub de Exemplos de Pesquisa de Vetor do Banco de Dados SQL do Azure.

Exemplo 1

O exemplo a seguir cria um vetor com três dimensões de uma cadeia de caracteres com uma matriz JSON.

DECLARE @v1 VECTOR(2) = '[1,1]';
DECLARE @v2 VECTOR(2) = '[-1,-1]';

SELECT 
    VECTOR_DISTANCE('euclidean', @v1, @v2) AS euclidean,
    VECTOR_DISTANCE('cosine', @v1, @v2) AS cosine,
    VECTOR_DISTANCE('dot', @v1, @v2) AS negative_dot_product;

Exemplo 2

O exemplo a seguir retorna os 10 artigos mais semelhantes a um determinado artigo, com base na distância do cosseno entre seus vetores de título.

DECLARE @v AS VECTOR(1536);
SELECT @v = title_vector FROM [dbo].[wikipedia_articles] WHERE title = 'Alan Turing';

SELECT TOP(10) 
  id, 
  title, 
  VECTOR_DISTANCE('cosine', @v, title_vector) AS distance 
FROM 
  [dbo].[wikipedia_articles] 
ORDER BY
  distance

Exemplo 3

O exemplo a seguir retorna todos os artigos semelhantes a um determinado artigo, com base na distância do cosseno entre seus vetores de título, selecionando apenas aqueles com uma distância menor que 0,3.

DECLARE @v AS VECTOR(1536);
SELECT @v = title_vector FROM [dbo].[wikipedia_articles] WHERE title = 'Alan Turing';

SELECT  
  id, 
  title,
  VECTOR_DISTANCE('cosine', @v, title_vector) AS distance
FROM 
  [dbo].[wikipedia_articles] 
WHERE
  VECTOR_DISTANCE('cosine', @v, title_vector) < 0.3
ORDER BY
  distance