Zum Inhalt springen

Array-Typ

Eine ARRAY-Spalte speichert Arrays fester Größe. Alle Felder in der Spalte müssen dieselbe Länge und denselben zugrunde liegenden Typ haben. Arrays werden typischerweise für Zahlenarrays verwendet, können aber jeden einheitlichen Datentyp enthalten, einschließlich ARRAY-, LIST- und STRUCT-Typen.

Arrays eignen sich zum Speichern von Vektoren wie Word Embeddings oder Image Embeddings.

Für Listen variabler Länge verwenden Sie den LIST-Typ. Einen Vergleich der verschachtelten Datentypen finden Sie im Überblick zu den Datentypen.

Der ARRAY-Typ in PostgreSQL erlaubt Felder variabler Länge. Der ARRAY-Typ von DuckDB hat feste Länge.

Arrays erstellen

Arrays können mit der Funktion array_value(expr, ...) erstellt werden.

Konstruktion mit der Funktion array_value:

SELECT array_value(1, 2, 3);

Ein Array kann immer implizit in eine Liste umgewandelt werden (und List-Funktionen wie list_extract, [i] nutzen):

SELECT array_value(1, 2, 3)[2];

Von einer Liste kann in ein Array gecastet werden (die Dimensionen müssen übereinstimmen):

SELECT [3, 2, 1]::INTEGER[3];

Arrays können verschachtelt werden:

SELECT array_value(array_value(1, 2), array_value(3, 4), array_value(5, 6));

Arrays können Structs speichern:

SELECT array_value({'a': 1, 'b': 2}, {'a': 3, 'b': 4});

Ein Array-Feld definieren

Arrays können mit der Syntax ⟨TYPE_NAME⟩[⟨LENGTH⟩]{:.language-sql .highlight} angelegt werden. Um beispielsweise ein Array-Feld für 3 Integer anzulegen, führen Sie aus:

CREATE TABLE array_table (id INTEGER, arr INTEGER[3]);
INSERT INTO array_table VALUES (10, [1, 2, 3]), (20, [4, 5, 6]);

Werte aus Arrays lesen

Einen oder mehrere Werte aus einem Array lesen Sie mit Klammern und Slice-Notation oder über List-Funktionen wie list_extract und array_extract. Am Beispiel aus Ein Array-Feld definieren.

Die folgenden Abfragen zum Extrahieren des ersten Elements eines Arrays sind äquivalent:

SELECT id, arr[1] AS element FROM array_table;
SELECT id, list_extract(arr, 1) AS element FROM array_table;
SELECT id, array_extract(arr, 1) AS element FROM array_table;
id element
10 1
20 4

Die Slice-Notation liefert eine LIST:

SELECT id, arr[1:2] AS elements FROM array_table;
id elements
10 [1, 2]
20 [4, 5]

Funktionen

Alle LIST-Funktionen funktionieren mit dem ARRAY-Typ. Zusätzlich werden mehrere native ARRAY-Funktionen unterstützt. Siehe die ARRAY-Funktionen.

Beispiele

Beispieldaten anlegen:

CREATE TABLE x (i INTEGER, v FLOAT[3]);
CREATE TABLE y (i INTEGER, v FLOAT[3]);
INSERT INTO x VALUES (1, array_value(1.0::FLOAT, 2.0::FLOAT, 3.0::FLOAT));
INSERT INTO y VALUES (1, array_value(2.0::FLOAT, 3.0::FLOAT, 4.0::FLOAT));

Kreuzprodukt berechnen:

SELECT array_cross_product(x.v, y.v)
FROM x, y
WHERE x.i = y.i;

Kosinusähnlichkeit berechnen:

SELECT array_cosine_similarity(x.v, y.v)
FROM x, y
WHERE x.i = y.i;

Ordnung

Die Ordnung von ARRAY-Instanzen ist lexikographisch definiert. NULL-Werte sind größer als alle anderen Werte und untereinander gleich.

Siehe auch

Weitere Funktionen finden Sie unter List-Funktionen.