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

As comparações diretas de vetores (por exemplo, v1 < v2) são lexicográficas em bytes e, embora determinísticas, não produzirão os resultados que você esperaria de comparações de números. 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 carregar e descarregar diretamente 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 OR REPLACE TABLE myvectortable (a VECTOR(float, 3), b VECTOR(float, 3));
INSERT INTO myvectortable SELECT [1.1,2.2,3]::VECTOR(FLOAT,3), [1,1,1]::VECTOR(FLOAT,3);
INSERT INTO myvectortable 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 myvectortable);
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 myissues ADD COLUMN issue_vec VECTOR(FLOAT, 768);

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

Limitações

As seguintes limitações se aplicam aos dados VECTOR:

  • Há suporte de linguagem limitado para o tipo de dados VECTOR. Os idiomas não representados nesta tabela não são compatíveis.

    Recurso Snowflake

    Python

    SQL

    UDFs

    UDTFs

    Drivers/Conectores

    Snowpark API

  • Os vetores não são compatíveis com as colunas VARIANT.

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

  • Não há suporte para vinculação no lado do servidor. 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 é compatível para uso com os seguintes recursos do Snowflake: