Tipos de dados vetoriais

Este tópico descreve os tipos de dados vetoriais.

Tipos de dados

O Snowflake suporta um único tipo de dados vetoriais, VECTOR.

Nota

O tipo de dados VECTOR só é suportado no SQL, conector Python e na biblioteca Snowpark Python. Não há suporte para outras linguagens.

VECTOR

Com o tipo de dados VECTOR, o Snowflake codifica e processa vetores de forma eficiente. Este tipo de dados oferece suporte a aplicativos de pesquisa e recuperação de vetores semânticos, como aplicativos baseados em RAG e operações comuns em aplicativos de processamento de vetores.

Para especificar um tipo de VECTOR, use a seguinte sintaxe:

VECTOR( <type>, <dimension> )
Copy

Onde:

  • type é o tipo de dados Snowflake dos elementos, que podem ser inteiros de 32 bits ou números de ponto flutuante de 32 bits.

    Você pode especificar um dos seguintes tipos:

    • INT

    • FLOAT

  • dimension é a dimensão (comprimento) do vetor. Este deve ser um valor inteiro positivo com um valor máximo de 4096.

Nota

Comparações de vetores diretos (por exemplo, v1< v2) são lexicográficas byte a byte e, embora determinísticas, não produzem resultados que você esperaria de comparações numéricas. Então, enquanto você pode usar colunas VECTOR em cláusulas ORDER BY, para comparações de vetores, use as funções de similaridade vetorial fornecidas.

A seguir estão exemplos de definições válidas de vetores:

  • Defina um vetor de 256 valores de ponto flutuante de 32 bits:

    VECTOR(FLOAT, 256)
    
    Copy
  • Defina um vetor de 16 valores inteiros de 32 bits:

    VECTOR(INT, 16)
    
    Copy

A seguir estão exemplos de definições inválidas de vetores:

  • Uma definição de vetor usando um tipo de valor inválido:

    VECTOR(STRING, 256)
    
    Copy
  • Uma definição de vetor usando um tamanho de vetor inválido:

    VECTOR(INT, -1)
    
    Copy

Conversão de vetores

Esta seção descreve como converter de e para um valor VECTOR. Para detalhes sobre a conversão, consulte Conversão do tipo de dados.

Conversão de um valor em um valor VECTOR

Valores VECTOR podem ser explicitamente convertidos a partir dos seguintes tipos:

Conversão de um valor a partir de um valor VECTOR

Valores VECTOR podem ser explicitamente convertidos para os seguintes tipos:

Carregamento e descarregamento de dados vetoriais

Não há suporte para carregamento e descarregamento direto de uma coluna VECTOR. Para colunas VECTOR, você deve carregar e descarregar dados como uma ARRAY e então lançá-la para um VECTOR quando você o usa. Para aprender a carregar e descarregar tipos de dados ARRAY, consulte Introdução ao carregamento de dados semiestruturados. Um caso de uso comum para vetores é gerar uma incorporação de vetores.

O exemplo a seguir mostra como descarregar uma tabela com uma coluna VECTOR em um estágio interno denominado mystage:

CREATE TABLE mytable (a VECTOR(float, 3), b VECTOR(float, 3));
INSERT INTO mytable SELECT [1.1,2.2,3]::VECTOR(FLOAT,3), [1,1,1]::VECTOR(FLOAT,3);
INSERT INTO mytable SELECT [1,2.2,3]::VECTOR(FLOAT,3), [4,6,8]::VECTOR(FLOAT,3);

COPY INTO @mystage/unload/
  FROM (SELECT TO_ARRAY(a), TO_ARRAY(b) FROM mytable);
Copy

O exemplo a seguir mostra como carregar uma tabela de um estágio e, em seguida, converter as colunas ARRAY em colunas VECTOR:

CREATE OR REPLACE TABLE arraytable (a ARRAY, b ARRAY);

COPY INTO arraytable
  FROM @mystage/unload/mydata.csv.gz;

SELECT a::VECTOR(FLOAT, 3), b::VECTOR(FLOAT, 3)
  FROM arraytable;
Copy

Exemplos

Construa um VECTOR convertendo uma constante ARRAY:

SELECT [1, 2, 3]::VECTOR(FLOAT, 3) as vec;
Copy

Adicione uma coluna com o tipo de dados VECTOR:

ALTER TABLE issues ADD COLUMN issue_vec VECTOR(FLOAT, 768);

UPDATE TABLE issues
  SET issue_vec = SNOWFLAKE.CORTEX.EMBED_TEXT_768('e5-base-v2', issue_text);
Copy

Limitações

  • Há suporte de linguagem limitado para o tipo de dados VECTOR. Linguagens não representadas nesta tabela não são suportadas.

    Recurso Snowflake

    Python

    SQL

    UDFs

    UDTFs

    Drivers/Conectores

    Snowpark API

  • Os vetores não são suportados em colunas VARIANT.

  • Vetores não são compatíveis como chaves de clustering.

  • A vinculação do lado do servidor não é suportada. Isso significa que ao escrever para uma coluna VECTOR por meio de um driver Snowflake, você deve converter os valores VECTOR na consulta antes de executá-la.

  • Vetores são permitidos em tabelas híbridas, mas não como chaves primárias ou chaves de índice secundárias.

  • O tipo de dados VECTOR não é suportado para uso com os seguintes recursos do Snowflake: