Vektor-Datentypen¶
Unter diesem Thema werden die Vektor-Datentypen beschrieben.
Datentypen¶
Snowflake unterstützt nur den Vektor-Datentyp VECTOR.
Bemerkung
Der Datentyp VECTOR wird nur von SQL, dem Python-Konnektor und der Snowpark Python-Bibliothek unterstützt. Andere Sprachen werden nicht unterstützt.
VECTOR¶
Mit dem Datentyp VECTOR kann Snowflake Vektoren effizient kodieren und verarbeiten. Dieser Datentyp unterstützt Anwendungen für semantische Vektorsuchen und Vektorabrufe, wie z. B. RAG-basierte Anwendungen, sowie gängige Operationen auf Vektoren in vektorverarbeitenden Anwendungen.
Um einen VECTOR-Typ anzugeben, verwenden Sie die folgende Syntax:
VECTOR( <type>, <dimension> )
Wobei:
type
ist der Snowflake-Datentyp der Elemente, die 32-Bit-Ganzzahlen oder 32-Bit-Gleitkommazahlen sein können.Sie können einen der folgenden Typen angeben:
INT
FLOAT
dimension
ist die Dimension (Länge) des Vektors. Dies muss ein positiver ganzzahliger Wert mit einem Höchstwert von 4.096 sein.
Bemerkung
Direkte Vektorvergleiche (z. B. v1 < v2) sind byteweise lexikografisch und liefern, obwohl sie deterministisch sind, nicht die Ergebnisse, die Sie von Zahlenvergleichen erwarten würden. Während Sie also VECTOR-Spalten in ORDER BY-Klauseln verwenden können, sollten Sie für Vektorvergleiche die bereitgestellten Vektorähnlichkeitsfunktionen verwenden.
Im Folgenden finden Sie Beispiele für gültige Definitionen von Vektoren:
Definieren eines Vektors mit 256 32-Bit-Gleitkommawerten:
VECTOR(FLOAT, 256)
Definieren eines Vektors mit 16 32-Bit-Ganzzahlwerten:
VECTOR(INT, 16)
Im Folgenden finden Sie Beispiele für ungültige Definitionen von Vektoren:
Eine Vektordefinition, die einen ungültigen Wertetyp verwendet:
VECTOR(STRING, 256)
Eine Vektordefinition mit einer ungültigen Vektorgröße:
VECTOR(INT, -1)
Vektor-Konvertierung¶
In diesem Abschnitt wird beschrieben, wie Sie einen Wert von und nach VECTOR konvertieren. Weitere Informationen zur Umwandlung finden Sie unter Datentypkonvertierung.
Konvertieren eines Werts in einen VECTOR-Wert¶
VECTOR-Werte können explizit aus den folgenden Typen umgewandelt werden:
Konvertieren eines Wertes aus einem VECTOR-Wert¶
VECTOR werte können explizit in die folgenden Typen umgewandelt werden:
Laden und Entladen von Vektordaten¶
Das direkte Laden und Entladen einer VECTOR-Spalte wird nicht unterstützt. Für VECTOR-Spalten müssen Sie die Daten als ARRAY laden und entladen und sie dann bei der Verwendung in VECTOR-Werte umwandeln. Informationen zum Laden und Entladen von ARRAY-Datentypen finden Sie unter Einführung in das Laden semistrukturierter Daten. Ein häufiger Anwendungsfall für Vektoren ist das Erstellen einer Vektoreinbettung.
Das folgende Beispiel zeigt, wie Sie eine Tabelle mit einer VECTOR-Spalte in einen internen Stagingbereich namens mystage
entladen:
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);
Das folgende Beispiel zeigt, wie Sie eine Tabelle aus einem Stagingbereich laden und dann die ARRAY-Spalten in VECTOR-Spalten umwandeln:
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;
Beispiele¶
Erstellen eines VECTOR-Werts durch Umwandeln einer ARRAY-Konstante:
SELECT [1, 2, 3]::VECTOR(FLOAT, 3) as vec;
Hinzufügen einer Spalte vom Datentyp 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);
Einschränkungen¶
Die Unterstützung durch Programmiersprachen ist für den Datentyp VECTOR begrenzt. Sprachen, die nicht in der folgenden Tabelle aufgeführt sind, werden nicht unterstützt.
Snowflake-Feature
Python
SQL
UDFs
✔
✔
UDTFs
✔
✔
Treiber/Konnektoren
✔
✔
Snowpark API
✔
Vektoren werden in VARIANT-Spalten nicht unterstützt.
Vektoren werden nicht als Gruppierungschlüssel unterstützt.
Serverseitiges Binden wird nicht unterstützt. Das bedeutet, dass Sie beim Schreiben in eine VECTOR-Spalte über einen Snowflake-Treiber erst die VECTOR-Werte in der Abfrage umwandeln müssen, bevor Sie die Abfrage ausführen können.
Vektoren sind in Hybridtabellen erlaubt, aber nicht als Primärschlüssel oder sekundäre Indexschlüssel.
Der Datentyp VECTOR wird für folgende Snowflake-Features nicht unterstützt: