Types de données vectoriels

Cette rubrique décrit les types de données vectoriels.

Types de données

Snowflake prend en charge un seul type de données vectoriel, VECTOR.

Note

Le type de données VECTOR n’est pris en charge que dans SQL, le connecteur Python et la bibliothèque Python Snowpark. Aucune autre langue n’est prise en charge.

VECTOR

Grâce au type de données VECTOR, Snowflake encode et traite efficacement les vecteurs. Ce type de données prend en charge les applications de recherche et d’extraction sémantique de vecteurs, telles que les applications basées sur RAG, et les opérations courantes sur les vecteurs dans les applications de traitement vectoriel.

Pour spécifier un type VECTOR, utilisez la syntaxe suivante :

VECTOR( <type>, <dimension> )
Copy

Où :

  • type est le type de données Snowflake des éléments, qui peuvent être des entiers de 32 bits ou des nombres à virgule flottante de 32 bits.

    Vous pouvez spécifier l’un des types suivants :

    • INT

    • FLOAT

  • dimension est la dimension (longueur) du vecteur. Il doit s’agir d’une valeur entière positive d’une valeur maximale de 4 096.

Note

Les comparaisons vectorielles directes (par ex. v1 < v2) sont lexicographiques un octet à la fois et, bien que déterministes, ne produisent pas les résultats que vous attendriez de comparaisons de nombres. Ainsi, même si vous pouvez utiliser des colonnes VECTOR dans des clauses ORDER BY, pour les comparaisons vectorielles, utilisez les fonctions de similarité vectorielle fournies.

Voici des exemples de définitions de vecteurs valides :

  • Définissez un vecteur de 256 valeurs à virgule flottante de 32 bits :

    VECTOR(FLOAT, 256)
    
    Copy
  • Définissez un vecteur de 16 valeurs entières de 32 bits :

    VECTOR(INT, 16)
    
    Copy

Voici des exemples de définitions de vecteurs non valides :

  • Définition d’un vecteur utilisant un type de valeur non valide :

    VECTOR(STRING, 256)
    
    Copy
  • Définition de vecteur utilisant une taille de vecteur non valide :

    VECTOR(INT, -1)
    
    Copy

Conversion vectorielle

Cette section explique comment effectuer une conversion depuis et vers une valeur VECTOR. Pour des informations détaillées sur la conversion, voir Conversion de type de données.

Conversion d’une valeur en valeur VECTOR

Les valeurs VECTOR peuvent être explicitement converties depuis les types suivants :

Conversion d’une valeur à partir d’une valeur VECTOR

Les valeurs VECTOR peuvent être explicitement converties dans les types suivants :

Chargement et déchargement de données vectorielles

Le chargement et le déchargement directs d’une colonne VECTOR ne sont pas pris en charge. Pour les colonnes VECTOR, vous devez charger et décharger les données sous forme d’ARRAY, puis les convertir en VECTOR lorsque vous les utilisez. Pour savoir comment charger et décharger des types de données ARRAY, voir Introduction au chargement de données semi-structurées. Un cas d’utilisation courant des vecteurs consiste à générer une intégration vectorielle.

L’exemple suivant montre comment décharger une table avec une colonne VECTOR dans une zone de préparation interne nommée 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

L’exemple suivant montre comment charger une table à partir d’une zone de préparation, puis convertir les colonnes ARRAY en colonnes 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

Exemples

Créez un VECTOR en convertissant un ARRAY de constantes :

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

Ajoutez une colonne avec le type de données 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

Limitations

  • La prise en charge linguistique du type de données VECTOR est limitée. Les langues non représentées dans ce tableau ne sont pas prises en charge.

    Fonctionnalité Snowflake

    Python

    SQL

    UDFs

    UDTFs

    Pilotes/Connecteurs

    API Snowpark

  • Les vecteurs ne sont pas pris en charge dans les colonnes VARIANT.

  • Les vecteurs ne sont pas pris en charge en tant que clés de clustering.

  • La liaison côté serveur n’est pas prise en charge. Cela signifie que lorsque vous écrivez dans une colonne VECTOR via un pilote Snowflake, vous devez convertir les valeurs VECTOR de la requête avant d’exécuter cette dernière.

  • Les vecteurs sont autorisés dans les tables hybrides mais pas en tant que clés primaires ou clés d’index secondaires.

  • Le type de données VECTOR ne peut pas être utilisé avec les fonctionnalités Snowflake suivantes :