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> )
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)
Defina um vetor de 16 valores inteiros de 32 bits:
VECTOR(INT, 16)
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)
Uma definição de vetor usando um tamanho de vetor inválido:
VECTOR(INT, -1)
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);
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;
Exemplos¶
Construa um VECTOR convertendo uma constante ARRAY:
SELECT [1, 2, 3]::VECTOR(FLOAT, 3) as vec;
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);
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: