Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:Azure SQL-Datenbank
Verwaltete Azure SQL-Instanz
SQL-Datenbank in Microsoft Fabric
Der Vektordatentyp wurde entwickelt, um Vektordaten zu speichern, die für Vorgänge wie Ähnlichkeitssuche und Machine Learning-Anwendungen optimiert sind. Vektoren werden in einem optimierten Binärformat gespeichert, werden jedoch der Einfachheit halber als JSON-Arrays verfügbar gemacht. Jedes Element des Vektors wird als ein Gleitkommawert mit einfachen Genauigkeit (4 Byte) gespeichert.
Hinweis
- Dieser Datentyp befindet sich in der Vorschau und kann geändert werden. Stellen Sie sicher, dass Sie die Nutzungsbedingungen für die Vorschau im Dokument Service Level Agreements (SLA) für Onlinedienste lesen. Einschränkungen der aktuellen Vorschau finden Sie unter "Einschränkungen " und "Bekannte Probleme".
- Vektor-Funktionen sind in Azure SQL Managed Instance verfügbar, die mit der Always-up-to-date-Richtlinie konfiguriert ist.
Weitere Informationen zum Arbeiten mit Vektordaten finden Sie unter:
Beispielsyntax
Die Verwendungssyntax für den Vektortyp ähnelt allen anderen SQL Server-Datentypen in einer Tabelle.
column_name VECTOR( {<dimensions>} ) [NOT NULL | NULL]
Maße
Ein Vektor muss mindestens eine Dimension aufweisen. Die maximale Anzahl unterstützter Dimensionen beträgt 1998.
Beispiele
A. Spaltendefinition
Der Vektortyp kann in der Spaltendefinition verwendet werden, die in einer CREATE TABLE
Anweisung enthalten ist, z. B.:
Das folgende Beispiel erstellt eine Tabelle mit einer Vektorspalte und fügt Daten in diese ein.
CREATE TABLE dbo.vectors
(
id INT PRIMARY KEY,
v VECTOR(3) NOT NULL
);
INSERT INTO dbo.vectors (id, v) VALUES
(1, '[0.1, 2, 30]'),
(2, '[-100.2, 0.123, 9.876]');
SELECT * FROM dbo.vectors;
B. Verwendung in Variablen
Im folgenden Beispiel werden Vektoren mithilfe des neuen Vektordatentyps deklariert und Entfernungen mithilfe der VECTOR_DISTANCE
Funktion berechnet.
Der Vektortyp kann mit Variablen verwendet werden:
DECLARE @v VECTOR(3) = '[0.1, 2, 30]';
SELECT @v;
C. Verwendung in gespeicherten Prozeduren oder Funktionen
Der Vektordatentyp kann als Parameter in gespeicherten Prozeduren oder Funktionen verwendet werden. Zum Beispiel:
CREATE PROCEDURE dbo.SampleStoredProcedure
@V VECTOR(3),
@V2 VECTOR(3) OUTPUT
AS
BEGIN
SELECT @V;
SET @V2 = @V;
END
Featureverfügbarkeit
Der neue Vektortyp ist unter allen Datenbankkompatibilitätsebenen verfügbar.
Kompatibilität
Damit alle Clients Vektordaten verwenden können, werden Vektoren als varchar(max)- Typen verfügbar gemacht. Clientanwendungen können mit Vektordaten arbeiten, als wären sie ein JSON-Array. Das Modul wird Vektoren automatisch in und aus einem JSON-Array konvertieren, wodurch der neue Typ für den Client transparent wird. Dank diesem Ansatz sind alle Treiber und alle Sprachen automatisch mit dem neuen Typ kompatibel.
Sie können sofort mit der Verwendung des neuen Typs „Vektor“ beginnen. Dies sind einige Beispiele:
Mit C# können Vektoren mithilfe der Klasse JsonSerializer
von und zu Zeichenfolgen serialisiert und deserialisiert werden.
using Microsoft.Data.SqlClient;
using Dapper;
using DotNetEnv;
using System.Text.Json;
namespace DotNetSqlClient;
class Program
{
static void Main(string[] args)
{
Env.Load();
var v1 = new float[] { 1.0f, 2.0f, 3.0f };
using var conn = new SqlConnection(Env.GetString("MSSQL"));
conn.Execute("INSERT INTO dbo.vectors VALUES(100, @v)", param: new {@v = JsonSerializer.Serialize(v1)});
var r = conn.ExecuteScalar<string>("SELECT v FROM dbo.vectors") ?? "[]";
var v2 = JsonSerializer.Deserialize<float[]>(r);
Console.WriteLine(JsonSerializer.Serialize(v2));
}
}
Begrenzungen
Für die laufende Vorschau gelten folgende Einschränkungen:
Tabellen
- Einschränkungen auf Spaltenebene werden nicht unterstützt, mit Ausnahme der Einschränkungen
NULL
/NOT NULL
.DEFAULT
undCHECK
Einschränkungen werden für Vektorspalten nicht unterstützt.- Schlüsseleinschränkungen wie z. B.
PRIMARY KEY
oderFOREIGN KEY
werden für Vektorspalten nicht unterstützt. Gleichheit, Eindeutigkeit, Verknüpfungen mithilfe von Vektorspalten als Schlüssel und Sortierreihenfolgen gelten nicht für Vektordatentypen . - Für Vektoren gibt es kein Konzept der Eindeutigkeit, daher sind eindeutige Beschränkungen nicht anwendbar.
- Das Überprüfen des Wertebereichs innerhalb eines Vektors ist ebenfalls nicht anwendbar.
- Vektoren unterstützen keinen Vergleich, keine Addition, Subtraktion, Multiplikation, Division, Verkettung oder andere mathematische, logische und zusammengesetzte Zuweisungsoperatoren.
- Vektorspalten können nicht in speicheroptimierten Tabellen verwendet werden.
- Das Ändern von Vektorspalten mithilfe von
ALTER TABLE ... ALTER COLUMN
in andere Datentypen ist nicht zulässig.
Tabellenschema-Metadaten
sp_describe_first_result_set gespeicherte Systemprozedur gibt den Vektordatentyp nicht ordnungsgemäß zurück. Daher sehen viele Datenzugriffsclients und Treiber einen Varchar - oder nvarchar-Datentyp .
INFORMATION_SCHEMA.COLUMNS
meldet Spalten des Typs Vektor als varbinary. Eine Problemumgehung zum Erhalten des richtigen Datentyps besteht darin, die Systemansichtsys.columns
zu verwenden.sys.columns
gibt die Länge des Vektors in Bytes zurück. Verwenden Sie die folgende Formel, um die Anzahl der Dimensionen abzurufen:dimensions = (length - 8) / 4
wo
length
der Wert ist, der vonmax_length
zurückgegeben wird. Wenn Sie beispielsweise einemax_length
von 20 Bytes sehen, lautet die Anzahl der Dimensionen (20 - 8) / 4 = 3.
Konvertierungen
Implizite und explizite Konvertierung mithilfe von
CAST
oderCONVERT
aus dem Vektortyp kann in varchar und nvarchar-Typen durchgeführt werden. Ebenso können nur varchar und nvarchar implizit oder explizit in den Vektortyp konvertiert werden.Der Vektortyp kann nicht mit dem sql_variant Typ verwendet oder einer sql_variant Variablen oder Spalte zugewiesen werden. Diese Einschränkung ähnelt varchar(max), varbinary(max), nvarchar(max), xml, json und CLR-basierten Datentypen.
Das Casting zum und vom JSON-Datentyp wird noch nicht unterstützt. Die Problemumgehung besteht darin, zuerst von/in nvarchar(max) und dann in/aus JSON zu konvertieren. So konvertieren Sie beispielsweise einen Vektor in einen JSON-Typ:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]'; SELECT CAST(CAST(@v AS NVARCHAR(MAX)) AS JSON) AS j;
und um von einem JSON-Typ in einen Vektor zu konvertieren:
DECLARE @j JSON = JSON_ARRAY(1.0, -0.2, 30) SELECT CAST(CAST(@j AS NVARCHAR(MAX)) AS VECTOR(3)) AS v;
Indizes
- B-Baum-Indizes oder Columnstore-Indizes sind für Vektorspalten nicht zulässig. Eine Vektorspalte kann jedoch als eingeschlossene Spalte in einer Indexdefinition angegeben werden.
Benutzerdefinierte Typen
- Die Erstellung des Aliastyps,
CREATE TYPE
der für den Vektortyp verwendet wird, ist nicht zulässig, ähnlich wie das Verhalten der XML- und JSON-Datentypen.
Ledgertabellen
- Die gespeicherte Prozedur
sp_verify_database_ledger
generiert einen Fehler, wenn die Datenbank eine Tabelle mit einer Vektorspalte enthält.
Bekannte Probleme
In der laufenden Vorschau gibt es die folgenden bekannten Probleme:
- Tools wie SQL Server Management Studio, Azure Data Studio oder die Mssql-Erweiterung für VS Code können derzeit möglicherweise nicht das Skript einer Tabelle mit einer Spalte mit dem Vektordatentyp generieren.
- Tools wie SQL Server Management Studio, Azure Data Studio oder die Mssql-Erweiterung für VS Code melden derzeit möglicherweise einen Datentyp von Varbinary anstelle des Vektors für eine Spalte mit dem Vektortyp .
- BCP und
BULK INSERT
funktionieren derzeit nicht, wenn Tabellen den Vektortyp enthalten. - Der Import und Export über DacFx funktioniert derzeit nicht, wenn eine Tabelle einen Vektortyp verwendet.
- Die Spaltenverschlüsselung unterstützt derzeit nicht den Vektortyp .
- Always Encrypted unterstützt derzeit nicht den Vektortyp .
- Die Datenmaskierung zeigt derzeit Vektordaten als varbinary-Datentyp im Portal an.
- Beim Übergeben eines Vektortyps an
LEN
undDATALENGTH
wird der Fehler 8116 zurückgegeben (Der Argument-Datentyp 'Vektor' ist für Argument 1 der Funktion 'datalength' ungültig). - Wenn Sie einen Vektor an eine gespeicherte Prozedur oder eine Funktion übergeben, wird in einigen Fällen möglicherweise Fehler 42211 (Abschneiden des Vektors ist während der Konvertierung nicht zulässig) angezeigt. Eine Problemumgehung besteht darin, stattdessen den Vektortypnvarchar(max) zu verwenden.
Diese Probleme werden in zukünftigen Updates behoben und die Dokumentation entsprechend aktualisiert werden.