Amazon Redshift unterstützt die Verwendung von Python-UDFs nach dem 30. Juni 2026 nicht mehr. Wir werden damit beginnen, es schrittweise durchzusetzen. Weitere Informationen zum Ende der Lebensdauer von Python und zu den Migrationsoptionen finden Sie im Blogbeitrag
Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Funktionen von Apache Iceberg v3 in Amazon Redshift
Amazon Redshift unterstützt Apache Iceberg v3-Tabellen. Iceberg v3 führt Standardspaltenwerte, Zeilenabstammungsverfolgung und Löschvektoren ein. Sie können neue v3-Tabellen erstellen oder bestehende v2-Tabellen auf Version 3 aktualisieren.
Iceberg v3-Tabellen verwenden dieselbe SQL-Syntax für Abfragen und DML-Operationen (INSERT, DELETE, UPDATE, MERGE) wie v2-Tabellen. Die auf dieser Seite beschriebenen Funktionen sind spezifisch für Iceberg v3.
Eine Iceberg v3-Tabelle erstellen
Um eine Iceberg v3-Tabelle zu erstellen, geben Sie 'format-version'='3' in der TABLE PROPERTIES-Klausel Folgendes an:
CREATE TABLEexternal_schema.table_name( column_name data_type [DEFAULT literal_value] [, ...] ) USING ICEBERG LOCATION 's3://your-bucket-name/prefix/' [PARTITIONED BY [[column_name | transform_function]], ...] TABLE PROPERTIES ('format-version'='3' [, 'compression_type'='compression_value']);
Beispiel:
CREATE TABLE my_schema.orders ( id int, status varchar DEFAULT 'pending', priority int DEFAULT 0 ) USING ICEBERG LOCATION 's3://amzn-s3-demo-bucket/orders/' TABLE PROPERTIES ('format-version'='3');
Wenn Sie keine Formatversion angeben, erstellt Amazon Redshift die Tabelle als Iceberg v2.
Upgrade von v2 auf v3
Sie können eine bestehende Iceberg v2-Tabelle auf Version 3 aktualisieren:
ALTER TABLEiceberg_tableSET TABLE PROPERTIES ('format-version' = '3');
Das Aktualisieren der Formatversion ist ein reiner Metadaten-Vorgang. Bestehende Datendateien werden nicht neu geschrieben. Bestehende v2-Dateien zum positionellen Löschen bleiben gültig und werden beim Lesen angewendet. Beim ersten Schreibvorgang nach einem Upgrade werden Zeilenherkunftswerte für die gesamte Tabelle generiert. Bei nachfolgenden DELETE-, UPDATE- oder MERGE-Vorgängen führt Amazon Redshift positionelle Löschungen der Version 2 in Löschvektoren für die von dem Vorgang betroffenen Datendateien zusammen.
Wichtig
Lesen Sie vor dem Upgrade auf Iceberg v3 den Einschränkungen Abschnitt, da einige Funktionen für v3-Tabellen noch nicht unterstützt werden. Da ein Downgrade von Version 3 auf Version 2 nicht unterstützt wird, stellen Sie sicher, dass sich die nicht unterstützten Funktionen nicht auf Ihre Workloads auswirken, bevor Sie mit dem Upgrade fortfahren.
Einschränkungen
-
Sie können Iceberg v3 nur auf Amazon Redshift Serverless-Clustern (mit Ausnahme des Clusters mit 4 RPU) und auf bereitgestellten Clustern verwenden, die RG-Instance-Typen verwenden.
-
Sie können in Iceberg v3-Tabellen keine komplexen Typen (Struktur, Liste, Map, Variante) lesen oder schreiben.
-
Sie können die folgenden Datentypen in Iceberg v3-Tabellen nicht verwenden: struct, list, map, variant, geometry, geography, binary, uuid, time, timestamp_ns, timestamptz_ns und unknown.
-
Sie können keine Iceberg v3-Tabellen verwenden, die Gleichheitslöschungen enthalten.
-
Sie können keine materialisierten Ansichten für Iceberg v3-Tabellen erstellen.
-
Nach dem Upgrade einer Tabelle auf Version 3 wird der
timestamptzTyp von Iceberg dem Amazon Redshift TIMESTAMPTZ-Typ statt TIMESTAMP (in Version 2 verwendet) zugeordnet. Daher geben Ihre Abfragen Zeitstempel zurück, die Zeitzoneninformationen enthalten.
Standardwerte für Spalten
Standardspaltenwerte werden nur für Iceberg v3-Tabellen unterstützt. Amazon Redshift gibt einen Fehler zurück, wenn Sie einen Standardwert für eine Iceberg v2-Tabelle angeben.
Standardwerte geben einen Literalwert an, auf den eine Spalte zurückgreift, wenn kein expliziter Wert vorhanden ist. Auf diese Weise können Sie einer vorhandenen Tabelle neue Spalten hinzufügen, ohne die Datendateien neu schreiben zu müssen. Beim Lesen zuvor geschriebener Datendateien wird automatisch der Standardwert für die neue Spalte zurückgegeben. Der Standardwert wird auch geschrieben, wenn eine DML-Anweisung die Spalte auslässt oder DEFAULT als Wert angibt.
Nur Literalwerte werden als Standardwerte unterstützt. Verschachtelte Datentypen unterstützen keine Standardwerte.
CREATE TABLE AS SELECT erbt keine Standardspaltenwerte aus der Quelltabelle. Um Standardwerte für die neue Tabelle zu definieren, verwenden Sie nach der Erstellung ALTER TABLE ALTER COLUMN SET DEFAULT.
Definieren von Standardwerten bei der Tabellenerstellung
CREATE TABLEexternal_schema.table_name( column_name data_type DEFAULT literal_value [, ...] ) USING ICEBERG LOCATION '...' TABLE PROPERTIES ('format-version'='3');
Hinzufügen einer Spalte mit einem Standard
ALTER TABLEiceberg_tableADD COLUMN column_name data_type DEFAULT literal_value;
Bestehende Datendateien geben den Standardwert für die neu hinzugefügte Spalte zurück, ohne dass die Daten neu geschrieben werden müssen.
Einen Standard ändern oder entfernen
ALTER TABLEiceberg_tableALTER COLUMN column_name SET DEFAULT literal_value; ALTER TABLEiceberg_tableALTER COLUMN column_name DROP DEFAULT;
SET DEFAULT ändert den Standardwert einer vorhandenen Spalte. Die neue Standardeinstellung gilt für Datendateien, die nach der Änderung geschrieben wurden. Bestehende Datendateien verwenden weiterhin die vorherige Standardeinstellung.
DROP DEFAULT entfernt den Standardwert aus einer Spalte. Nach diesem Vorgang wenden neue Schreibvorgänge keinen Standardwert mehr für die Spalte an. Datendateien, die die Spalte nicht enthalten, geben weiterhin den ursprünglichen Standardwert der Spalte zurück.
INSERT-Verhalten
Wenn Zeilen eingefügt werden, ohne eine Spalte mit einem Standardwert anzugeben, wird der Standardwert in die Datendatei geschrieben.
SHOW TABLE
SHOW TABLE zeigt Standardwerte in der Ausgabe an.
Herkunft der Zeilen
Die Zeilenabstammung wird nur für Iceberg v3-Tabellen unterstützt. Es bietet zwei Pseudospalten, die die Zeilenidentität und den Änderungsverlauf verfolgen. Diese Spalten werden automatisch von Amazon Redshift verwaltet. Sie legen ihre Werte nicht fest.
Pseudo-columns
| Spalte | Datentyp | Description |
|---|---|---|
_row_id |
BIGINT | Identifiziert jede Zeile in der Tabelle eindeutig. Wird bei Schreibvorgängen automatisch zugewiesen. |
_last_updated_sequence_number |
BIGINT | Die Snapshot-Sequenznummer des letzten Schreibvorgangs, durch den die Zeile geändert wurde. |
Die Herkunft der Zeilen wird abgefragt
Zeilen- und Abstammungsspalten müssen in der SELECT-Liste explizit benannt werden. Sie sind nicht in SELECT* enthalten.
SELECT _row_id, _last_updated_sequence_number, * FROM my_schema.my_iceberg_v3_table;
Sie können Zeilenstammspalten in den Klauseln WHERE, ORDER BY, GROUP BY und JOIN verwenden:
SELECT * FROM my_schema.my_iceberg_v3_table WHERE _last_updated_sequence_number >= 3 ORDER BY _row_id;
Verhalten bei Nicht-V3-Tabellen
Wenn Sie eine Tabelle abfragen, die nicht von Iceberg v3 stammt, _row_id und geben Sie NULL zurück. _last_updated_sequence_number
Verhalten nach dem Upgrade von v2 auf v3
Bei Tabellen, die von Iceberg v2 auf v3 aktualisiert wurden, sind die Zeilenabstammungswerte für Daten vor dem Upgrade nicht sofort verfügbar. Beide _row_id _last_updated_sequence_number geben bis zum ersten Schreibvorgang nach dem Upgrade, der Zeilenherkunftswerte für die gesamte Tabelle generiert, NULL zurück. Dies ist ein reiner Metadaten-Vorgang, bei dem vorhandene Datendateien nicht neu geschrieben werden.
Verhalten beim Schreiben
Die Zeilenabstammung wird bei allen Schreibvorgängen (INSERT, CTAS, UPDATE, MERGE) automatisch von Amazon Redshift aufgefüllt. Jede Zeile erhält ein Unikat _row_id und _last_updated_sequence_number gibt die Snapshot-Sequenznummer des Commits wieder, der die Zeile geschrieben hat.
Einschränkungen
-
Spalten zur Zeilenherkunft sind in SELECT * nicht enthalten.
-
Die Zeilenabstammung wird für Iceberg v2 oder frühere Tabellen nicht unterstützt.
-
Pre-upgrade Daten in Tabellen, die von v2 auf v3 aktualisiert wurden, geben für beide Pseudospalten bis zum ersten Schreibvorgang nach dem Upgrade NULL zurück.
Vektoren zum Löschen
Löschvektoren sind der Mechanismus, den Iceberg v3 verwendet, um Löschungen auf Zeilenebene zu verfolgen. Sie ersetzen die von Iceberg v2 verwendeten positionsbezogenen Löschdateien.
Wenn Sie DELETE, UPDATE oder MERGE für eine Iceberg v3-Tabelle ausführen, zeichnet Amazon Redshift gelöschte Zeilenpositionen in Löschvektoren auf, anstatt separate Dateien zum Löschen von Positionen zu schreiben. Dies wird automatisch behandelt. Es sind keine Änderungen an der SQL-Syntax erforderlich.
Wie funktionieren Löschvektoren
Ein Löschvektor ist eine komprimierte Bitmap, die aufzeichnet, welche Zeilenpositionen in einer Datendatei gelöscht wurden. Löschvektoren werden in Puffin-Dateien am selben S3-Speicherort wie die Tabellendaten gespeichert. Jede Datendatei hat höchstens einen Löschvektor.
Beim Lesen einer Iceberg v3-Tabelle wendet Amazon Redshift automatisch Löschvektoren an, um gelöschte Zeilen aus den Abfrageergebnissen auszuschließen.
Vorteile gegenüber positionellen Löschdateien
-
Löschvektoren sind kompakter als positionelle Löschdateien.
-
Ein einziger Löschvektor pro Datendatei vermeidet die Anhäufung vieler kleiner Löschdateien.
-
Nachfolgende Löschvorgänge in derselben Datendatei erzeugen einen neuen Löschvektor, der die vorherigen Löschungen mit den neu gelöschten Positionen zusammenführt, sodass ein einziger Löschvektor pro Datendatei erhalten bleibt.
-
Da Löschvektoren kompakter sind und das Ansammeln vieler kleiner Dateien vermeiden, sind Lese- und Schreibvorgänge schneller als bei Iceberg v2-Dateien zum positionellen Löschen.
Verhalten nach dem Upgrade von v2 auf v3
Nach dem Upgrade einer Tabelle von Iceberg v2 auf v3 bleiben vorhandene Dateien zum positionellen Löschen von Version 2 gültig und werden beim Lesen angewendet. Bei nachfolgenden Schreibvorgängen (DELETE, UPDATE oder MERGE) führt Amazon Redshift bestehende positionelle Löschvorgänge in Version 2 zu Löschvektoren zusammen, wie in der Iceberg-Spezifikation definiert.
Einschränkungen
-
Löschvektoren werden für Iceberg v2 oder frühere Tabellen nicht unterstützt.
-
Iceberg v3-Tabellen können für neue Schreibvorgänge nicht auf positionale Löschdateien zurückgreifen. Das bedeutet, dass Iceberg v3-Tabellen zwar vorhandene Dateien zum positionellen Löschen lesen können, aber keine neuen Dateien zum Löschen von Positionen hinzugefügt werden können. Stattdessen können Iceberg v3-Tabellen nur mithilfe von Löschvektoren neue Löschvorgänge hinzufügen.