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
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)
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 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);
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 myissues ADD COLUMN issue_vec VECTOR(FLOAT, 768);
UPDATE TABLE myissues
SET issue_vec = SNOWFLAKE.CORTEX.EMBED_TEXT_768('e5-base-v2', issue_text);
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: